Tutorial: Crear una canalización que publica una aplicación sin servidor en AWS Serverless Application Repository - AWS CodePipeline

Tutorial: Crear una canalización que publica una aplicación sin servidor en AWS Serverless Application Repository

Puede utilizar AWS CodePipeline para distribuir de manera continua una aplicación sin servidor de AWS SAM al AWS Serverless Application Repository.

importante

Como parte de la creación de una canalización, CodePipeline utilizará un bucket de artefactos de S3 proporcionado por el cliente para los artefactos. (Es diferente del bucket que se usa para una acción de origen de S3). Si el bucket de artefactos de S3 se encuentra en una cuenta diferente a la cuenta de su canalización, asegúrese de que el bucket de artefactos de S3 pertenezca a Cuentas de AWS que sean seguras y fiables.

Este tutorial muestra cómo crear y configurar una canalización para compilar una aplicación sin servidor alojada en GitHub y publicarla en el AWS Serverless Application Repository forma automática. La canalización utiliza como GitHub como proveedor de origen y CodeBuild como proveedor de compilación. Para publicar una aplicación sin servidor en el AWS Serverless Application Repository, debe implementar una aplicación (del AWS Serverless Application Repository) y asociar la función de Lambda que crea dicha aplicación como un proveedor de acciones de invocación en la canalización. A continuación, puede distribuir de forma continua actualizaciones de la aplicación al AWS Serverless Application Repository, sin necesidad de escribir ningún código.

importante

Muchas de las acciones que agrega a su canalización en este procedimiento implican recursos de AWS que debe crear antes de crear la canalización. Los recursos de AWSpara las acciones de origen siempre deben crearse en la misma región de AWS en la que se creó la canalización. Por ejemplo, si crea la canalización en la región Este de EE. UU. (Ohio) , el repositorio de CodeCommit debe estar en la región Este de EE. UU. (Ohio).

Puede añadir acciones entre regiones al crear su canalización. Los recursos de AWS para las acciones entre regiones deben estar en la misma región de AWS en la que planea ejecutar la acción. Para obtener más información, consulte Agregar una acción entre regiones en CodePipeline.

Antes de empezar

En este tutorial, se presupone lo siguiente.

Paso 1: Crear un archivo buildspec.yml

Cree un archivo buildspec.yml con el siguiente contenido y añádalo al repositorio de GitHub de la aplicación sin servidor. Sustituya template.yml por la plantilla de AWS SAM de la aplicación y bucketname por el bucket de S3 en el que está almacenada 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

Siga estos pasos para crear la canalización en la Región de AWS en la que desea publicar la aplicación sin servidor.

  1. Inicie sesión en la AWS Management Console y abra la consola de CodePipeline en https://console.aws.amazon.com/codepipeline/.

  2. Si es necesario, cambie a la Región de AWS en la que desea publicar la aplicación sin servidor.

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

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

  5. 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.

  6. En Tipo de canalización, seleccione V2. Para obtener más información, consulte Tipos de canalización. Elija Siguiente.

  7. En Rol de servicio, elija Nuevo rol de servicio para permitir que CodePipeline cree un rol de servicio en IAM.

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

  9. En la página Añadir fase de origen, en Proveedor de origen, elija GitHub.

  10. En Conexión, seleccione una conexión existente o cree una nueva. Para crear o administrar una conexión para su acción de origen de GitHub, consulte Conexiones de GitHub.

  11. En Repository (Repositorio), elija el repositorio de código fuente de GitHub.

  12. En Branch (Ramificación), elija la ramificación de GitHub.

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

  14. En la página Add build stage (Añadir etapa de compilación), añada 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.

    2. Elija Crear proyecto.

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

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

    5. 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.

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

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

    8. Elija Continue to CodePipeline (Continuar en CodePipeline). Esto abre la consola de CodePipeline y crea un proyecto de CodeBuild que utiliza el archivo buildspec.yml del 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.

    9. Elija Siguiente.

  15. En la página Add deploy stage (Añadir etapa de implementación), elija Skip deploy stage (Omitir etapa de implementación) y, a continuación, acepte el mensaje de advertencia eligiendo Skip (Omitir) una vez más. Elija Siguiente.

  16. Seleccione Create pipeline. Debe ver un diagrama que muestra las etapas de código fuente y de compilación.

  17. Conceda al rol de servicio de CodeBuild permiso para obtener acceso al bucket de S3 en el que está almacenada la aplicación empaquetada.

    1. En la etapa Compilación de la canalización nueva, elija CodeBuild.

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

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

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

    5. Elija JSON.

    6. Añada una instrucción de política nueva con el siguiente contenido. La instrucción permite a CodeBuild colocar objetos en el bucket de S3 en el que está almacenada la aplicación empaquetada. Sustituya bucketname por el nombre del bucket de S3.

      { "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucketname/*" ], "Action": [ "s3:PutObject" ] }
    7. Elija Revisar política.

    8. Elija Guardar cambios.

Paso 3: Implementar la aplicación de publicación

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

Debe implementar la aplicación en la misma Región de AWS que la canalización.

  1. Vaya a la página de la aplicación y elija Deploy (Implementar).

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

  3. Elija Implementar.

  4. Elija Ver pila de AWS CloudFormation para abrir la consola de AWS CloudFormation.

  5. Amplíe la sección Resources (Recursos). Podrá ver ServerlessRepoPublish, que es del 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

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

  1. Abra la consola de CodePipeline en https://console.aws.amazon.com/codepipeline/.

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

  3. Elija Editar.

  4. 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).

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

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

  7. En Input artifacts (Artefactos de entrada), elija BuildArtifact.

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

  9. Elija Save (Guardar) para la acción.

  10. Elija Done (Listo) para la etapa.

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

  12. Para verificar la canalización, realice un cambio en la aplicación en GitHub. Por ejemplo, cambie la descripción de la aplicación en la sección Metadata del archivo de plantilla de AWS SAM. Confirme el cambio y envíelo a la ramificación de GitHub. 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.