

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial: Cree una canalización que publique su aplicación sin servidor en el AWS Serverless Application Repository
<a name="tutorials-serverlessrepo-auto-publish"></a>

Puede utilizarla AWS CodePipeline para entregar continuamente su aplicación AWS SAM sin servidor al. AWS Serverless Application Repository

**importante**  
Como parte de la creación de una canalización, se utilizará un depósito de artefactos de S3 proporcionado por el cliente CodePipeline para almacenar artefactos. (Es diferente del bucket que se usa para una acción de origen de S3). Si el depósito de artefactos de S3 está en una cuenta diferente a la de tu canalización, asegúrate de que el depósito de artefactos de S3 pertenezca a una Cuentas de AWS persona segura y fiable.

En este tutorial se muestra cómo crear y configurar una canalización para crear una aplicación sin servidor alojada en ella GitHub y publicarla en ella automáticamente. AWS Serverless Application Repository La canalización GitHub se utiliza como proveedor de código fuente y CodeBuild como proveedor de compilación. Para publicar su aplicación sin servidor en AWS Serverless Application Repository, debe implementar una [aplicación](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~aws-serverless-codepipeline-serverlessrepo-publish ) (desde AWS Serverless Application Repository) y asociar la función Lambda creada por esa aplicación como un proveedor de acciones de invocación en su canalización. De este modo, podrá enviar actualizaciones de la aplicación de forma continua a AWS Serverless Application Repository, sin necesidad de escribir ningún código.

**importante**  
Muchas de las acciones que añada a la canalización en este procedimiento implican AWS recursos que debe crear antes de crear la canalización. AWS Los recursos para las acciones de origen siempre deben crearse en la misma AWS región en la que se creó la canalización. Por ejemplo, si creas tu canalización en la región EE.UU. Este (Ohio), tu CodeCommit repositorio debe estar en la región EE.UU. Este (Ohio).   
Puedes añadir acciones entre regiones al crear tu canalización. AWS los recursos para las acciones entre regiones deben estar en la misma AWS región en la que planeas ejecutar la acción. Para obtener más información, consulte [Añadir una acción interregional en CodePipeline](actions-create-cross-region.md).

## Antes de empezar
<a name="tutorials-serverlessrepo-auto-publish-prereq"></a>

En este tutorial, se presupone lo siguiente. 
+ Está familiarizado con [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/) y con el [AWS Serverless Application Repository](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/).
+ Tiene alojada una aplicación sin servidor GitHub que ha publicado en ella AWS Serverless Application Repository mediante la AWS SAM CLI. Para publicar una aplicación de ejemplo en la AWS Serverless Application Repository, consulte [Inicio rápido: publicación de aplicaciones](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-quick-start.html) en la *Guía para AWS Serverless Application Repository desarrolladores*. Para publicar su propia aplicación en AWS Serverless Application Repository, consulte [Publicar aplicaciones mediante la AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications.html) en la *Guía para AWS Serverless Application Model desarrolladores*.

## Paso 1: Crear un archivo buildspec.yml
<a name="serverlessrepo-auto-publish-create-buildspec"></a>

Cree un `buildspec.yml` archivo con el siguiente contenido y agréguelo al GitHub repositorio de su aplicación sin servidor. {{template.yml}}Sustitúyalo por la AWS SAM plantilla de la aplicación y {{bucketname}} por el depósito de S3 en el que se almacena la aplicación empaquetada.

```
version: 0.2
phases:
  install:
    runtime-versions:
        python: 3.8
  build:
    commands:
      - sam package --template-file {{template.yml}} --s3-bucket {{bucketname}} --output-template-file packaged-template.yml
artifacts:
  files:
    - packaged-template.yml
```

## Paso 2: Crear y configurar la canalización
<a name="serverlessrepo-auto-publish-create-pipeline"></a>

Siga estos pasos para crear su canalización en el Región de AWS lugar donde desee publicar la aplicación sin servidor.

1. Inicie sesión en Consola de administración de AWS y abra la CodePipeline consola en [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. Si es necesario, cambie al Región de AWS lugar en el que desee publicar la aplicación sin servidor.

1. En la página **Bienvenido**, **Introducción** o **Canalizaciones**, elija **Crear canalización**.

1. En la página **Paso 1: elección de la opción de creación**, en **Opciones de creación**, seleccione la opción **Crear una canalización personalizada**. Elija **Siguiente**.

1. Seleccione **Create pipeline**. En la página **Paso 2: elegir la configuración de la canalización**, en **Nombre de la canalización**, escriba el nombre de la canalización.

1. En **Tipo de canalización**, seleccione **V2**. Para obtener más información, consulte [Tipos de canalización](pipeline-types.md). Elija **Siguiente**.

1. En **Función de servicio**, elija **Nueva función de servicio** CodePipeline para permitir la creación de una función de servicio en IAM.

1. En **Advanced settings (Configuración avanzada)**, deje los valores predeterminados y elija **Next (Siguiente)**.

1. En la página **Paso 3: Añadir la fase de origen**, en **Proveedor de origen**, seleccione **GitHub**.

1. En **Conexión**, seleccione una conexión existente o cree una nueva. Para crear o gestionar una conexión para la acción GitHub de origen, consulte[GitHub conexiones](connections-github.md).

1. En **Repositorio**, elige tu repositorio GitHub de origen.

1. En **Branch**, elige tu GitHub sucursal.

1. Deje los valores predeterminados restantes para la acción de origen. Elija **Siguiente**.

1. En la página **Paso 4: agregación de la etapa de compilación**, agregue una etapa de compilación:

   1. En **Build provider (Proveedor de compilación)**, elija **AWS CodeBuild**. En **Region (Región)**, utilice la región de la canalización.

   1. Elija **Crear proyecto**.

   1. En **Project name (Nombre de proyecto)**, escriba un nombre para este proyecto de compilación.

   1. En **Environment image (Imagen de entorno)**, elija **Managed image (Imagen administrada)**. En **Operating system (Sistema operativo)**, elija **Ubuntu**.

   1. En **Runtime (Tiempo de ejecución)** y **Runtime version (Versión de tiempo de ejecución)**, elija el tiempo de ejecución y la versión necesarios para la aplicación sin servidor.

   1. En **Service role (Rol de servicio)**, elija **New service role (Nuevo rol de servicio)**.

   1. En **Build specifications (Especificaciones de compilación)**, elija **Use a buildspec file (Usar un archivo buildspec)**.

   1. Selecciona **Continuar a CodePipeline**. De este modo, se abre la CodePipeline consola y se crea un CodeBuild proyecto que lo utiliza `buildspec.yml` en su repositorio para la configuración. El proyecto de compilación utiliza un rol de servicio para administrar los permisos del Servicio de AWS . Es posible que este paso tarde un par de minutos.

   1. Elija **Siguiente**.

1. En **Paso 5: agregación de la etapa de prueba**, elija **Omitir la etapa de prueba** y, a continuación, acepte el mensaje de advertencia eligiendo **Omitir** una vez más. 

   Elija **Siguiente**.

1. En la página **Paso 6: Añadir fase de despliegue**, seleccione **Omitir fase de despliegue** y, a continuación, acepte el mensaje de advertencia seleccionando **Omitir** de nuevo. Elija **Siguiente**.

1. En el **paso 7: Revisar**, selecciona **Crear canalización**. Debería ver un diagrama con las etapas.

1. Conceda permiso al rol de CodeBuild servicio para acceder al bucket de S3 donde está almacenada la aplicación empaquetada.

   1. En la etapa **Build (Compilación)** de la canalización nueva, elija **CodeBuild**.

   1. Elija la pestaña **Build details (Detalles de compilación)**.

   1. En **Entorno**, elija el rol CodeBuild de servicio para abrir la consola de IAM.

   1. Amplíe la selección para `CodeBuildBasePolicy` y elija **Edit policy (Editar política)**.

   1. Elija **JSON**.

   1. Añada una instrucción de política nueva con el siguiente contenido. La declaración permite CodeBuild colocar objetos en el depósito de S3 donde se almacena la aplicación empaquetada. {{bucketname}}Sustitúyalo por el nombre del depósito de S3.

      ```
              {
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:s3:::{{bucketname}}/*"
                  ],
                  "Action": [
                      "s3:PutObject"
                  ]
              }
      ```

   1. Elija **Revisar política**.

   1. Seleccione **Save changes (Guardar cambios)**.

## Paso 3: Implementar la aplicación de publicación
<a name="serverlessrepo-auto-publish-deploy-app"></a>

Siga estos pasos para implementar la aplicación que contiene la función de Lambda que lleva a cabo la publicación en el AWS Serverless Application Repository. Esta aplicación es **aws-serverless-codepipeline-serverlessrepo-publish**.

**nota**  
Debes implementar la aplicación en el mismo lugar Región de AWS que tu canalización.

1. Vaya a la página de la [aplicación](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~aws-serverless-codepipeline-serverlessrepo-publish ) y elija **Deploy (Implementar)**.

1. Seleccione **I acknowledge that this app creates custom IAM roles (Confirmo que esta aplicación puede crear roles de IAM personalizados)**. 

1. Elija **Implementar**.

1. Selecciona **View CloudFormation Stack** para abrir la CloudFormation consola.

1. Amplíe la sección **Resources (Recursos)**. Verás **ServerlessRepoPublish**, que es de ese tipo **AWS::Lambda::Function**. Anote el ID físico de este recurso para el siguiente paso. Lo utilizará al crear la acción de publicación nueva en CodePipeline.

## Paso 4: Crear la acción de publicación
<a name="serverlessrepo-auto-publish-create-action"></a>

Siga estos pasos para crear la acción de publicación en la canalización.

1. Abra la CodePipeline consola en [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. En la sección de navegación izquierda, elija la canalización que desea editar.

1. Elija **Edit (Edición de)**.

1. Después de la última etapa de la canalización actual, elija **\+ Add stage (Añadir etapa)**. En **Stage name (Nombre de etapa)**, escriba un nombre, por ejemplo **Publish**, y elija **Add stage (Añadir etapa)**.

1. En la nueva etapa, elija **\+Add action group (\+Añadir grupo de acciones)**.

1. Introduzca un nombre para la acción. En **Action provider (Proveedor de acción)**, en **Invoke (Invocar)**, elija **AWS Lambda**.

1. En **Artefactos de entrada**, elija **BuildArtifact**.

1. En **Nombre de función**, elija el ID físico de la función de Lambda que ha anotado en el paso anterior.

1. Elija **Save (Guardar)** para la acción.

1. Elija **Done (Listo)** para la etapa.

1. En la parte superior derecha, elija **Save (Guardar)**.

1. Para verificar tu canalización, realiza un cambio en tu aplicación en GitHub. Por ejemplo, cambia la descripción de la aplicación en la `Metadata` sección del archivo de AWS SAM plantilla. Confirma el cambio y envíalo a tu GitHub sucursal. Esto desencadena la ejecución de la canalización. Cuando la canalización esté completa, compruebe que la aplicación se ha actualizado con el cambio en el [AWS Serverless Application Repository](https://console.aws.amazon.com/serverlessrepo/home).