Configure una canalización de CI/CD mediante AWS y CodePipeline AWS CDK - Recomendaciones de AWS

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.

Configure una canalización de CI/CD mediante AWS y CodePipeline AWS CDK

Repositorio de código: AWS CodePipeline con CI/CD

Entorno: PoC o piloto

Tecnologías: DevOps

Carga de trabajo: código abierto

Servicios de AWS: AWS CodePipeline

Inicio

Automatizar el proceso de creación y publicación del software mediante la integración y entrega continuas (CI/CD) facilita las compilaciones repetibles y la entrega rápida de nuevas funciones a los usuarios. Puede probar rápida y fácilmente cada cambio de código, así como detectar y corregir errores antes de lanzar su software. Al ejecutar cada cambio en los procesos de preparación y publicación, puede verificar la calidad del código de su aplicación o infraestructura. La CI/CD abarca una cultura, un conjunto de principios operativos y un conjunto de prácticas que ayudan a los equipos de desarrollo de aplicaciones a realizar cambios de código con mayor frecuencia y fiabilidad. Esta implementación también se conoce como proceso de CI/CD.

Este patrón define un proceso reutilizable de integración y entrega continuas (CI/CD) en Amazon Web Services (AWS). La CodePipeline canalización de AWS se ha escrito con el AWS Cloud Development Kit (AWS CDK) v2.

Con CodePipeline él, puede modelar las diferentes etapas del proceso de lanzamiento de software a través de la interfaz de la consola de administración de AWS, la interfaz de línea de comandos de AWS (AWS CLI), CloudFormation AWS o los SDK de AWS. Este patrón demuestra la implementación CodePipeline y sus componentes mediante AWS CDK. Además de crear bibliotecas, AWS CDK incluye un kit de herramientas (el comando de CLI cdk). Es la herramienta principal para interactuar con la aplicación de AWS CDK. Entre otras funciones, el kit de herramientas ofrece la posibilidad de convertir una o más pilas en CloudFormation plantillas e implementarlas en una cuenta de AWS.

El proceso incluye pruebas para validar la seguridad de sus bibliotecas de terceros, y ayuda a garantizar una publicación rápida y automatizada en los entornos especificados. Puede aumentar la seguridad general de sus aplicaciones sometiéndolas a un proceso de validación.

El objetivo de este patrón es acelerar el uso de las canalizaciones de CI/CD para implementar el código y, al mismo tiempo, garantizar que los recursos que se implementen se ajusten a las mejores prácticas. DevOps Tras implementar el código de ejemplo, dispondrá de un AWS CodePipeline con procesos de linting, pruebas, controles de seguridad y procesos de implementación y posteriores a la implementación. Este patrón también incluye pasos para Makefile. Con Makefile, los desarrolladores pueden reproducir los pasos de CI/CD localmente y aumentar la velocidad del proceso de desarrollo.

Requisitos previos y limitaciones

Requisitos previos 

  • Una cuenta de AWS activa

  • Una comprensión básica de lo siguiente:

    • AWS CDK

    • AWS CloudFormation

    • AWS CodePipeline

    • TypeScript

Limitaciones

Este patrón utiliza AWS CDK TypeScript únicamente para. No abarca otros lenguajes compatibles con AWS CDK.

Versiones de producto

Utilice las versiones más recientes de las siguientes herramientas:

  • Interfaz de la línea de comandos de AWS (AWS CLI)

  • cfn_nag

  • git-remote-codecommit

  • Node.js

Arquitectura

Pila de tecnología de destino

  • AWS CDK

  • AWS CloudFormation

  • AWS CodeCommit

  • AWS CodePipeline

Arquitectura de destino

La canalización se desencadena por un cambio en el CodeCommit repositorio de AWS (SampleRepository). Al principio, CodePipeline crea artefactos, se actualiza automáticamente e inicia el proceso de implementación. El proceso resultante implementa una solución en tres entornos independientes:

  • Desarrollo: verificación del código en tres pasos en el entorno de desarrollo activo

  • Prueba: entorno de pruebas de integración y regresión

  • Prod: entorno de producción

Los tres pasos incluidos en la etapa de desarrollo son el linting, la seguridad y las pruebas unitarias. Estos pasos se ejecutan en paralelo para acelerar el proceso. Para garantizar que el proceso solo proporcione artefactos funcionales, dejará de funcionar cada vez que falle un paso del proceso. Tras la implementación en la fase de desarrollo, el proceso ejecuta pruebas de validación para verificar los resultados. En caso de éxito, el proceso implementará los artefactos en el entorno de prueba, que contiene la validación posterior a la implementación. El paso final consiste en implementar los artefactos en el entorno de producción.

El siguiente diagrama muestra el flujo de trabajo desde el CodeCommit repositorio hasta los procesos de creación y actualización que se llevan a cabo en el entorno de desarrollo, así como el despliegue y la validación posteriores en cada uno de los tres entornos. CodePipeline

""

Herramientas

Servicios de AWS

  • AWS Cloud Development Kit (AWS CDK) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la infraestructura de la nube de AWS en código.

  • AWS le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS. En este patrón, CloudFormation las plantillas se pueden utilizar para crear un CodeCommit repositorio y una canalización de CodePipeline CI/CD.

  • AWS CodeCommit es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.

  • AWS CodePipeline es un servicio de CI/CD que le ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.

  • La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.

Otras herramientas

  • cfn_nag es una herramienta de código abierto que busca patrones en CloudFormation las plantillas para identificar posibles problemas de seguridad.

  • git-remote-codecommit es una utilidad para insertar y extraer código de los repositorios CodeCommit mediante la extensión de Git.

  • Node.js es un entorno de JavaScript ejecución basado en eventos diseñado para crear aplicaciones de red escalables.

Código

El código de este patrón está disponible en el repositorio de prácticas de GitHub AWS CodePipeline with CI/CD.

Prácticas recomendadas

Revise los recursos, como las políticas de AWS Identity and Access Management (IAM), para asegurarse de que se ajusten a las prácticas recomendadas de su organización.

Epics

TareaDescripciónHabilidades requeridas

Instalar herramientas en macOS o Linux.

Si usa macOS o Linux, puede instalar las herramientas ejecutando el siguiente comando en su terminal preferido o usando Homebrew para Linux.

brew install brew install git-remote-codecommit brew install ruby brew-gem brew-gem install cfn-nag
DevOps ingeniero

Instale herramientas con AWS Cloud9.

Si usa AWS Cloud9, instale las herramientas ejecutando el siguiente comando.

gem install cfn-nag

Nota: AWS Cloud9 debe tener Node.js y npm instalados. Para comprobar la instalación o la versión, ejecute el siguiente comando.

node -v npm -v
DevOps ingeniero

Configure AWS CLI.

Para configurar la CLI de AWS, consulte las instrucciones del sistema operativo:

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Descargue o clone el código.

Para obtener el código que utiliza este patrón, realice una de las siguientes acciones:

  • Descarga el código fuente más reciente de las versiones del GitHub repositorio y descomprime el archivo descargado en una carpeta.

  • Clone el proyecto ejecutando el siguiente comando.

git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git

Elimine el directorio .git del repositorio clonado.

cd ./aws-codepipeline-cicd rm -rf ./.git

Más adelante, utilizará un CodeCommit repositorio de AWS recién creado como origen remoto.

DevOps ingeniero

Conéctese a la cuenta de AWS.

Puede conectarse mediante un token de seguridad temporal o una autenticación de zona de aterrizaje. Para confirmar que está utilizando la cuenta y región de AWS correctas, ejecute los siguientes comandos.

AWS_REGION="eu-west-1" ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text) echo "${ACCOUNT_NUMBER}"
DevOps ingeniero

Inicie el entorno.

Para arrancar un entorno AWS CDK, ejecute los siguientes comandos.

npm install npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"

Tras arrancar correctamente el entorno, debería aparecer el siguiente resultado.

⏳ Bootstrapping environment aws://{account}/{region}... ✅ Environment aws://{account}/{region} bootstrapped

Para más información sobre el proceso de arranque de AWS CDK, consulte la documentación de AWS CDK.

DevOps ingeniero

Sintetice una plantilla.

Para sintetizar una aplicación de AWS CDK, ejecute el comando cdk synth.

npm run cdk synth

Debería ver la siguiente salida.

Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out Supply a stack id (CodePipeline, Dev-MainStack) to display its template.
DevOps ingeniero

Despliega la CodePipeline pila.

Ahora que ha iniciado y sintetizado la CloudFormation plantilla, puede desplegarla. La implementación creará la CodePipeline canalización y un CodeCommit repositorio, que serán la fuente y el desencadenante de la canalización.

npm run cdk -- deploy CodePipeline --require-approval never

Tras ejecutar el comando, debería ver una implementación correcta de la CodePipeline pila y la información de salida. CodePipeline.RepositoryNameLe da el nombre del CodeCommit repositorio de la cuenta de AWS.

CodePipeline: deploying... CodePipeline: creating CloudFormation changeset... ✅ CodePipeline Outputs: CodePipeline.RepositoryName = SampleRepository Stack ARN: arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID
DevOps ingeniero

Configure el CodeCommit repositorio y la sucursal remotos.

Tras una implementación correcta, CodePipeline iniciará la primera ejecución de la canalización, que puede encontrar en la CodePipeline consola de AWS. Como AWS CDK y CodeCommit no inician una rama predeterminada, esta canalización inicial fallará y devolverá el siguiente mensaje de error.

The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null

Para corregir este error, configure un origen remoto como SampleRepository y cree la ramificación main requerida.

RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text) echo "${RepoName}" # git init git branch -m master main git remote add origin codecommit://${RepoName} git add . git commit -m "Initial commit" git push -u origin main
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Realice un cambio para activar el proceso.

Tras la implementación inicial satisfactoria, debería disponer de un proceso de CI/CD completo con una ramificación main con SampleRepository como ramificación de origen. En cuanto realice los cambios en la ramificación main, se iniciará el proceso y se ejecutará la siguiente secuencia de acciones:

  1. Obtenga el código del CodeCommit repositorio.

  2. Compila el código.

  3. Actualiza el proceso (UpdatePipeline).

  4. Ejecuta tres trabajos paralelos para comprobar el linting, la seguridad y las pruebas unitarias.

  5. En caso de éxito, el proceso implementará la pila Main de ./lib/main-stack.ts en el entorno de desarrollo.

  6. Realice una comprobación de los recursos tras la implementación. Puedes seguir todos los CodePipeline pasos y resultados en la CodePipeline consola.

  7. En caso de éxito, el proceso repetirá la implementación y la validación en los entornos de prueba y producción.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Ejecute el proceso de desarrollo mediante Makefile.

Puede ejecutar todo el proceso de forma local mediante el comando make, o bien ejecutar un paso individual (por ejemplo, make linting).

Para probar el uso de make, realice las siguientes acciones:

  • Implemente el proceso local: make

  • Ejecute solo pruebas unitarias: make unittest

  • Implemente en la cuenta actual: make deploy

  • Limpie el entorno: make clean

Desarrollador de aplicaciones, DevOps ingeniero
TareaDescripciónHabilidades requeridas

Elimine los recursos de la aplicación AWS CDK.

Para limpiar su aplicación AWS CDK, ejecute el siguiente comando.

cdk destroy --all

Tenga en cuenta que los buckets de Amazon Simple Storage Service (Amazon S3) creados durante el arranque no se eliminan automáticamente. Necesitará una política de retención que permita su eliminación, o bien tendrá que eliminarlos manualmente en su cuenta de AWS.

DevOps ingeniero

Resolución de problemas

ProblemaSolución

La plantilla no funciona como se esperaba.

Si algo sale mal y la plantilla no funciona, asegúrese de que dispone de lo siguiente:

  • Las versiones adecuadas de las herramientas.

  • Acceso a la cuenta de AWS de destino (conectividad de red).

  • Permisos suficientes para la cuenta de AWS de destino.

Recursos relacionados