Implemente una canalización de CI/CD para microservicios de Java en Amazon ECS
Vijay Thompson y Sankar Sangubotla, Amazon Web Services
Resumen
Este patrón le guía por los pasos para implementar una canalización de integración y entrega continuas (CI/CD) para microservicios de Java en un clúster de Amazon Elastic Container Service (Amazon ECS) existente mediante AWS CodeBuild. Cuando el desarrollador confirma los cambios, se inicia la canalización de CI/CD y el proceso de compilación comienza en CodeBuild. Cuando se completa la compilación, el artefacto se envía a Amazon Elastic Container Registry (Amazon ECR) y la última compilación de Amazon ECR se recoge y se envía al servicio Amazon ECS.
Requisitos previos y limitaciones
Requisitos previos
Una aplicación de microservicios Java existente que se ejecuta en Amazon ECS
Familiaridad con AWS CodeBuild y AWS CodePipeline
Arquitectura
Pila de tecnología de origen
Microservicios Java que se ejecutan en Amazon ECS
Repositorio de código en Amazon ECR
AWS Fargate
Arquitectura de origen

Pila de tecnología de destino
Amazon ECR
Amazon ECS
AWS Fargate
AWS CodePipeline
AWS CodeBuild
Arquitectura de destino

Automatizar y escalar
Archivo CodeBuild buildspec.yml:
version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws --version - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email) - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}') build: commands: - echo Build started on `date` - echo building the Jar file - mvn clean install - echo Building the Docker image... - docker build -t $REPOSITORY_URI:$BUILD_TAG . - docker tag $REPOSITORY_URI:$BUILD_TAG $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $REPOSITORY_URI:$BUILD_TAG - docker push $REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"%s","imageUri":"%s"}]' $DOCKER_CONTAINER_NAME $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json - cat imagedefinitions.json artifacts: files: - imagedefinitions.json - target/DockerDemo.jar
Herramientas
Servicios de AWS
AWS CodeBuild es un servicio de compilación completamente administrado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para implementar. AWS CodeBuild se escala constantemente y procesa numerosas versiones a la vez, de manera que sus versiones no permanece en la cola.
AWS CodePipeline le ayuda a diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatiza los pasos necesarios para lanzar los cambios en el software de manera continua. Puede integrar AWS CodePipeline con servicios de terceros, como GitHub, o utilizar un servicio de AWS, como Amazon ECR.
Amazon Elastic Container Registry (Amazon ECR) es un registro de contenedores de Docker completamente administrado que facilita el almacenamiento, la administración y la implementación de imágenes de contenedores de Docker. Amazon ECR está integrado con Amazon ECS para simplificar el flujo de trabajo del desarrollo a la producción. Amazon ECR aloja las imágenes en una arquitectura escalable y de alta disponibilidad, lo que le permite implementar contenedores para sus aplicaciones con fiabilidad. La integración con AWS Identity and Access Management (IAM) proporciona un control a nivel de recursos de cada repositorio.
Amazon Elastic Container Service (Amazon ECS) es un servicio de orquestación de contenedores de alto rendimiento y escalado que admite contenedores de Docker y facilita la ejecución y el escalado de aplicaciones en contenedores en AWS. Amazon ECS elimina la necesidad de instalar y operar su propio software de orquestación de contenedores, administrar y escalar un clúster de máquinas virtuales o programar contenedores en esas máquinas virtuales.
AWS Fargate es un motor de cómputo para Amazon ECS que le permite ejecutar contenedores sin tener que administrar servidores o clústeres. Con AWS Fargate ya no tendrá que aprovisionar, configurar ni escalar clústeres de máquinas virtuales para ejecutar los contenedores. De esta manera, se elimina la necesidad de elegir tipos de servidores, decidir cuándo escalar los clústeres u optimizar conjuntos de clústeres.
Otras herramientas
Docker
le ayuda a crear, probar y entregar aplicaciones en paquetes llamados contenedores. Git
es un sistema de control de versiones distribuido que rastrea los cambios en el código fuente durante el desarrollo del software. Está diseñado para coordinar el trabajo entre los programadores, pero se puede utilizar para realizar un seguimiento de los cambios en cualquier conjunto de archivos. Sus objetivos incluyen la velocidad, la integridad de los datos y la compatibilidad con flujos de trabajo distribuidos y no lineales.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Creación de un proyecto de compilación. | En la consola de AWS CodeBuild | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Seleccione el origen. | Este patrón usa Git como repositorio de código, así que elija GitHub de la lista de opciones disponibles. Elija un repositorio público o desde su cuenta de GitHub. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Seleccione un repositorio. | Seleccione el repositorio desde el que desea compilar el código. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Seleccione el entorno. | Puede seleccionar una imagen de una lista de imágenes administradas u optar por una imagen personalizada mediante Docker. Este patrón utiliza la siguiente imagen administrada:
| Administrador de sistemas de AWS, desarrollador de aplicaciones |
Elija un rol de servicio. | Puede crear un rol de servicio o seleccionarlo de una lista de roles existentes. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Añada variables de entorno. | En la sección Configuración adicional, configure las siguientes variables de entorno:
Estas variables son marcadores de posición en el archivo | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Cree un archivo buildspec. | Puede crear un archivo | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Configure el proyecto para los artefactos. | (Opcional) Configure el proyecto de compilado de los artefactos, si es necesario. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Configure los Registros de Amazon CloudWatch. | (Opcional) Configure los Registros de Amazon CloudWatch para el proyecto de compilación, si es necesario. Este paso es opcional, pero recomendable. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Configure los registros de Amazon S3. | (Opcional) Configure los registros de Amazon Simple Storage Service (Amazon S3) para el proyecto de compilación, si desea almacenar los registros. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Cree una canalización. | En la consola de AWS CodePipeline | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Seleccione un rol de servicio. | Cree un rol de servicio o selecciónelo de una lista de roles existentes. Si va a crear un rol de servicio, proporcione un nombre para el rol y seleccione la opción para que CodePipeline cree el rol. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Elija una tienda de artefactos. | En la configuración avanzada, si desea que Amazon S3 cree un bucket y almacene los artefactos en él, utilice la ubicación predeterminada para el almacén de artefactos. O bien, seleccione una ubicación personalizada y especifique un bucket existente. También puede optar por cifrar el artefacto mediante una clave de cifrado. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Especificar el proveedor de código fuente. | En Proveedor de código fuente, elija GitHub (Versión 2). | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Seleccione el repositorio y la rama del código. | Si no ha iniciado sesión, proporcione los detalles de conexión para conectarse a GitHub y, a continuación, seleccione el nombre del repositorio y el nombre de la rama. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Opciones de detección de cambios. | Seleccione Iniciar la canalización en el cambio del código fuente y pase a la página siguiente. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Seleccione un proveedor de compilación. | Como proveedor de compilación, elija AWS CodeBuild y, a continuación, proporcione la región de AWS y los detalles del nombre del proyecto de compilación. En Tipo de compilación, elija Compilación única. | Administrador de sistemas de AWS, desarrollador de aplicaciones |
Elija un proveedor de implementación. | En Proveedor de implementación, elija Amazon ECS. Elija el nombre del clúster, el nombre del servicio, el archivo de definiciones de imágenes, si lo hubiera, y un valor de tiempo de espera de implementación, si es necesario. Seleccione Create pipeline. | Administrador de sistemas de AWS, desarrollador de aplicaciones |