Cree automáticamente canalizaciones de CI/CD y ECS clústeres de Amazon para microservicios mediante 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.

Cree automáticamente canalizaciones de CI/CD y ECS clústeres de Amazon para microservicios mediante AWS CDK

Creado por Varsha Raju () AWS

Entorno: PoC o piloto

Tecnologías: contenedores y microservicios DevOps; Modernización; Infraestructura

AWSservicios: AWS CodeBuild AWS CodeCommit; AWS CodePipeline; AmazonECS; AWS CDK

Resumen

Este patrón describe cómo crear automáticamente las canalizaciones de integración y entrega continuas (CI/CD) y la infraestructura subyacente para crear e implementar microservicios en Amazon Elastic Container Service (Amazon). ECS Puede utilizar este enfoque si desea configurar canalizaciones de proof-of-concept CI/CD para mostrar a su organización las ventajas de la CI/CD, los microservicios y. DevOps También puede utilizar este enfoque para crear canalizaciones iniciales de CI/CD que, a continuación, podrá personalizar o cambiar según los requisitos de su organización. 

El enfoque del patrón crea un entorno de producción y un entorno de no producción, cada uno de los cuales tiene una nube privada virtual (VPC) y un ECS clúster de Amazon configurado para ejecutarse en dos zonas de disponibilidad. Todos sus microservicios comparten estos entornos y, a continuación, usted crea una canalización de CI/CD para cada microservicio. Estas canalizaciones de CI/CD extraen los cambios de un repositorio de origen, los compilan automáticamente y AWS CodeCommit, a continuación, los implementan en sus entornos de producción y no producción. Cuando una canalización completa correctamente todas sus etapas, puede utilizarla URLs para acceder al microservicio en los entornos de producción y no producción.

Requisitos previos y limitaciones

Requisitos previos 

  • Una cuenta de Amazon Web Services (AWS) activa.

  • Un bucket de Amazon Simple Storage Service (Amazon S3) existente que contiene el archivo starter-code.zip (adjunto).

  • AWSCloud Development Kit (AWSCDK), instalado y configurado en su cuenta. Para obtener más información al respecto, consulta Cómo empezar a usarlo AWS CDK en la AWS CDK documentación.

  • Python 3 y pip, instalado y configurado. Para obtener más información, consulte la documentación de Python.

  • Familiaridad con AWS CDK Amazon Elastic Container Registry (AmazonECR)ECS, Amazon y AWS Fargate. AWS CodePipeline AWS CodeBuild CodeCommit

  • Conocimientos de Docker.

  • Una comprensión de la CI/CD y. DevOps

Limitaciones

  • Se aplican límites generales AWS de cuenta. Para obtener más información al respecto, consulte las cuotas de AWS servicio en la documentación de referencia AWS general.

Versiones de producto

  • El código se probó con las versiones 16.13.0 y AWS CDK 1.132.0 de Node.js.

Arquitectura

Nube de AWS architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Un desarrollador de aplicaciones envía el código a un repositorio. CodeCommit

  2. Se inicia una canalización.

  3. CodeBuild compila y envía la imagen de Docker a un repositorio de Amazon ECR

  4. CodePipeline implementa una nueva imagen en un servicio Fargate existente en un clúster de Amazon que no es de producción. ECS

  5. Amazon ECS extrae la imagen del ECR repositorio de Amazon y la coloca en un servicio Fargate que no es de producción.

  6. Las pruebas se realizan utilizando un dispositivo que no es de producción. URL

  7. El administrador de versiones aprueba la implementación de producción.

  8. CodePipeline implementa la nueva imagen en un servicio Fargate existente en un clúster de Amazon de producción ECS

  9. Amazon ECS extrae la imagen del ECR repositorio de Amazon y la coloca en el servicio Fargate de producción.

  10. Los usuarios de producción acceden a tu función mediante una producción. URL

Pila de tecnología

  • AWS CDK

  • CodeBuild

  • CodeCommit 

  • CodePipeline

  • Amazon ECR 

  • Amazon ECS 

  • Amazon VPC

Automatizar y escalar

Puede utilizar el enfoque de este patrón para crear canalizaciones para los microservicios desplegados en una pila compartida AWS CloudFormation . La automatización puede crear más de un ECS clúster de Amazon en cada uno VPC y también crear canalizaciones para los microservicios implementados en un clúster de Amazon ECS compartido. Sin embargo, esto requiere que proporcione nueva información sobre los recursos como entradas a la pila de canalizaciones.

Herramientas

  • AWSCDK— AWS Cloud Development Kit (AWSCDK) es un marco de desarrollo de software para definir la infraestructura de la nube en el código y aprovisionarla mediante AWS CloudFormation ella.

  • AWS CodeBuild— AWS CodeBuild es un servicio de creación en la nube totalmente gestionado. CodeBuild compila el código fuente, ejecuta pruebas unitarias y produce artefactos listos para su despliegue.

  • AWS CodeCommit— AWS CodeCommit es un servicio de control de versiones que te permite almacenar y gestionar de forma privada los repositorios de Git en la AWS nube. CodeCommit elimina la necesidad de gestionar tu propio sistema de control de código fuente o de preocuparte por escalar su infraestructura.

  • AWS CodePipeline— AWS CodePipeline es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para lanzar su software. Puede modelar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software. CodePipeline automatiza los pasos necesarios para publicar los cambios de software de forma continua.

  • Amazon ECS: Amazon Elastic Container Service (AmazonECS) es un servicio de administración de contenedores rápido y altamente escalable que se utiliza para ejecutar, detener y administrar contenedores en un clúster. Puede ejecutar sus tareas y servicios en una infraestructura sin servidor gestionada por AWS Fargate. Como alternativa, para tener más control sobre su infraestructura, puede ejecutar sus tareas y servicios en un clúster de instancias de Amazon Elastic Compute Cloud (AmazonEC2) que administre.

  • Docker: Docker ayuda a los desarrolladores a empaquetar, enviar y ejecutar cualquier aplicación como un contenedor ligero, portátil y autosuficiente.

Código

El código de este patrón está disponible en los archivos cicdstarter.zip y starter-code.zip (adjuntos).

Epics

TareaDescripciónHabilidades requeridas
Configure el directorio de trabajo para AWSCDK.
  1. Cree un directorio denominado cicdproject en su máquina local.

  2. Descargue el archivo cicdstarter.zip (adjunto) al directorio cicdproject y descomprímalo. Esto crea una carpeta denominada cicdstarter.

  3. Ejecute el comando cd <user-home>/cicdproject/cicdstarter

  4. Configure el entorno virtual de Python ejecutando el comando python3 -m venv .venv.

  5. Ejecute el comando source ./.venv/bin/activate.

  6. Configure su AWS entorno ejecutando el aws configure comando o utilizando las siguientes variables de entorno: 

    • AWS_ACCESS_KEY_ID

    • AWS_SECRET_ACCESS_KEY 

    • AWS_DEFAULT_REGION

AWS DevOps, Infraestructura de nube
TareaDescripciónHabilidades requeridas
Cree la infraestructura compartida.
  1. En su directorio de trabajo, ejecute el comando cd cicdvpcecs

  2. Ejecute el comando pip3 install -r requirements.txt para instalar todas las dependencias de Python necesarias.

  3. Ejecute el cdk bootstrap command para configurar el AWS entorno para AWSCDK. 

  4. Ejecute el comando cdk synth --context aws_account=<aws_account_ID> --context aws_region=<aws-region>

  5. Ejecute el comando cdk deploy --context aws_account=<aws_account_ID> --context aws_region=<aws-region>.

  6. La AWS CloudFormation pila crea la siguiente infraestructura:

    • Una no producción llamada VPC cicd-vpc-ecs/cicd-vpc-nonprod

    • Una producción llamada VPC cicd-vpc-ecs/cicd-vpc-prod

    • Un ECS clúster de Amazon que no es de producción denominado cicd-ecs-nonprod

    • Un ECS clúster de Amazon de producción llamado cicd-ecs-prod

AWS DevOps, Infraestructura en la nube
Supervise la AWS CloudFormation pila.
  1. Inicie sesión en la consola AWS de administración, abra la AWS CloudFormation consola y, a continuación, elija la cicd-vpc-ecs pila de la lista. 

  2. En el panel de detalles de la pila, seleccione la pestaña Eventos y supervise el progreso de la creación de la pila.

AWS DevOps, Infraestructura de nube
Pruebe la AWS CloudFormation pila.
  1. Una vez creada la cicd-vpc-ecs AWS CloudFormation pila, asegúrese de que cicd-vpc-ecs/cicd-vpc-prod VPCs se cicd-vpc-ecs/cicd-vpc-nonprod hayan creado las y. 

  2. Asegúrese de que se hayan creado ECS los clústeres cicd-ecs-nonprod y los de cicd-ecs-prod Amazon.

Importante: Asegúrese de registrar los dos grupos IDs de seguridad VPCs y el grupo de seguridad de IDs los grupos de seguridad predeterminados en ambosVPCs.

AWS DevOps, Infraestructura de nube
TareaDescripciónHabilidades requeridas
Cree la infraestructura para el microservicio.
  1. Asigne un nombre a su microservicio. Por ejemplo, este patrón utiliza myservice1 como nombre del microservicio.

  2. En su directorio de trabajo, ejecute el comando cd <working-directory>/cdkpipeline.

  3. Ejecute el comando pip3 install -r requirements.txt.

  4. Ejecute el comando cdk synth completo que está disponible en la sección de Información adicional de este patrón.

  5. Ejecute el comando cdk deploy completo que está disponible en la sección de Información adicional de este patrón.

Nota: También puede proporcionar los valores de ambos comandos mediante el archivo cdk.json del directorio.

AWS DevOps, Infraestructura en la nube
Supervise la AWS CloudFormation pila.

Abre la AWS CloudFormation consola y monitorea el progreso de la myservice1-cicd-stack pila. Finalmente, el estado cambia a CREATE_COMPLETE.

AWS DevOps, Infraestructura en la nube
Pruebe la AWS CloudFormation pila.
  1. En la AWS CodeCommit consola, compruebe que myservice1 existe un repositorio con el nombre y que contiene el código de inicio.

  2. En la AWS CodeBuild consola, compruebe que myservice1 existe un proyecto de compilación denominado.

  3. En la ECR consola de Amazon, compruebe que myservice1 existe un ECR repositorio de Amazon denominado.

  4. En la ECS consola de Amazon, compruebe que myservice1 existe un servicio de Fargate denominado en un clúster de Amazon que no sea de producción o en un clúster de Amazon de producción. ECS

  5. En la consola de Amazon Elastic Compute Cloud (AmazonEC2), compruebe que se hayan creado los balanceadores de carga de aplicaciones que no son de producción y de producción. Registre los DNS nombres de. ALBs

  6. En la AWS CodePipeline consola, compruebe que myservice1 existe una canalización con el nombre. Debe tener las etapas Source, Build, Deploy-NonProd y Deploy-Prod. La canalización también debe tener un estado in progress.

  7. Supervise la canalización hasta que se completen todas las etapas. 

  8. Apruébela manualmente para la producción.

  9. En una ventana del navegador, introduzca los DNS nombres deALBs.

  10. La aplicación debería mostrarse tanto Hello World en la fase de producción como en la de producciónURLs.

Use la canalización.
  1. Abra el CodeCommit repositorio que creó anteriormente y abra el index.js archivo. 

  2. Sustituya Hello World por Hello CI/CD.

  3. Guarde y confirme los cambios en la rama principal.

  4. Verifique que la canalización se inicie y que el cambio pase por las etapas Build, Deploy-NonProd y Deploy-Prod 

  5. Apruebe la producción manualmente.

  6. Ahora URLs deberían Hello CICD mostrarse tanto la producción como la no producción.

AWS DevOps, Infraestructura en la nube
Repita esta épica para cada microservicio.

Repita las tareas de esta épica para crear una canalización de CI/CD para cada uno de sus microservicios.

AWS DevOps, Infraestructura en la nube

Recursos relacionados

Información adicional

Comando de la cdk synth

cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

cdk deploy command

cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

Conexiones

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip