Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.
Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.
Personalizar preferencias de cookies
Utilizamos cookies y herramientas similares (de forma conjunta, “cookies”) para los siguientes fines.
Esenciales
Estas cookies son necesarias para poder ofrecer nuestro sitio y nuestros servicios, y no se pueden desactivar. Por lo general, solo se emplean en respuesta a las acciones que lleve a cabo en el sitio, por ejemplo, al configurar sus preferencias de privacidad, al iniciar sesión o al completar formularios.
De rendimiento
Las cookies de rendimiento proporcionan estadísticas anónimas sobre la forma en que los clientes navegan por nuestro sitio para que podamos mejorar la experiencia y el rendimiento del sitio. Los terceros aprobados pueden realizar análisis en nuestro nombre, pero no pueden utilizar los datos para sus propios fines.
Permitidas
Funcionales
Las cookies funcionales nos ayudan a proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante. Es posible que algunos terceros aprobados empleen estas cookies para proporcionar determinadas características del sitio. Si no permite estas cookies, es posible que algunos de estos servicios (o todos ellos) no funcionen correctamente.
Permitidas
De publicidad
AWS o nuestros socios publicitarios podemos emplear cookies de publicidad en el sitio para ayudarnos a ofrecer contenido de marketing personalizado. Si no habilita estas cookies, verá publicidad menos relevante.
Permitidas
El bloqueo de algunos tipos de cookies puede afectar a su experiencia al navegar por nuestros sitios. Puede cambiar las preferencias de cookies en cualquier momento haciendo clic en Preferencias de cookies en el pie de página de este sitio. Para obtener más información sobre la forma en que nosotros y algunos terceros aprobados usamos las cookies en nuestros sitios, lea el Aviso de AWS sobre cookies.
No se pueden guardar las preferencias de cookies
En este momento, solo almacenaremos las cookies esenciales, ya que no hemos podido guardar sus preferencias de cookies.
Si desea cambiar sus preferencias de cookies, inténtelo de nuevo más tarde a través del enlace del pie de página de la Consola de AWS o póngase en contacto con el servicio de asistencia si el problema persiste.
Gestione las implementaciones azul/verde de microservicios en varias cuentas y regiones mediante los servicios de código de AWS y las claves multirregionales de AWS KMS - 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.
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.
Gestione las implementaciones azul/verde de microservicios en varias cuentas y regiones mediante los servicios de código de AWS y las claves multirregionales de AWS KMS
Aviso: ya no AWS CodeCommit está disponible para nuevos clientes. Los clientes actuales de AWS CodeCommit pueden seguir utilizando el servicio con normalidad. Más información
En este patrón se describe cómo implementar una aplicación de microservicios global desde una cuenta central de AWS en varias cuentas de carga de trabajo y regiones de acuerdo con una estrategia de implementación azul/verde. El patrón es compatible con lo siguiente:
El software se desarrolla en una cuenta central, mientras que las cargas de trabajo y las aplicaciones se distribuyen en varias cuentas y regiones de AWS.
Se utiliza una única clave multirregional del Sistema de administración de claves de AWS (AWS KMS) para el cifrado y el descifrado a fin de permitir la recuperación de desastres.
La clave KMS es específica de cada región y debe mantenerse o crearse en tres regiones diferentes para los artefactos del proyecto. Una clave KMS multirregional facilita poder conservar el mismo ID de clave en todas las regiones.
El modelo de ramificación del flujo de trabajo de Git se implementa con dos ramas (de desarrollo y principal) y el código se fusiona mediante solicitudes de extracción (PRs). La función de Lambda de AWS que se implementa desde esta pila crea una PR desde la rama de desarrollo hacia la rama principal. La fusión de PR con la rama principal inicia una CodePipeline canalización de AWS, que organiza el flujo de integración y entrega continuas (CI/CD) y despliega las pilas en todas las cuentas.
Este patrón proporciona un ejemplo de configuración de infraestructura como código (IaC) mediante CloudFormation pilas de AWS para demostrar este caso de uso. La implementación azul/verde de los microservicios se implementa mediante AWS. CodeDeploy
Requisitos previos y limitaciones
Requisitos previos
Cuatro cuentas de AWS activas:
Una cuenta de herramientas para administrar la canalización de código y mantener el CodeCommit repositorio de AWS.
Tres cuentas de carga de trabajo (de prueba) para implementar la carga de trabajo de los microservicios.
Este patrón utiliza las siguientes regiones. Si desea utilizar otras regiones, debe realizar las modificaciones adecuadas en las pilas multirregionales de AWS CodeDeploy y AWS KMS.
Cuenta Tools (AWS CodeCommit): ap-south-1
Cuenta de carga de trabajo (de prueba) 1: ap-south-1
Cuenta de carga de trabajo (de prueba) 2: eu-central-1
Cuenta de carga de trabajo (de prueba) 3: us-east-1
Tres buckets de Amazon Simple Storage Service (Amazon S3) para las regiones de implementación de cada cuenta de carga de trabajo. (Se denominan S3BUCKETNAMETESTACCOUNT1, S3BUCKETNAMETESTACCOUNT2 y S3BUCKETNAMETESTACCOUNT3 más adelante en este patrón).
A modo de ejemplo, se pueden crear estos buckets en cuentas y regiones específicas con nombres de bucket únicos de la siguiente manera (reemplazar xxxx por un número aleatorio):
##In Test Account 1aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1##In Test Account 2aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1##In Test Account 3aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1#Example##In Test Account 1aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1##In Test Account 2aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1##In Test Account 3aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
Limitaciones
El patrón utiliza AWS CodeBuild y otros archivos de configuración para implementar un microservicio de muestra. Si tiene un tipo de carga de trabajo diferente (por ejemplo, sin servidor), debe actualizar todas las configuraciones pertinentes.
Arquitectura
Pila de tecnología de destino
AWS CloudFormation
AWS CodeCommit
AWS CodeBuild
AWS CodeDeploy
AWS CodePipeline
Arquitectura de destino
Automatizar y escalar
La configuración se automatiza mediante plantillas de CloudFormation pila de AWS (IaC). Se puede escalar fácilmente para varios entornos y cuentas.
Herramientas
Servicios de AWS
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.
AWS CodeBuild es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
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 CodeDeploy automatiza las implementaciones en Amazon Elastic Compute Cloud EC2 (Amazon) o en instancias locales, funciones de AWS Lambda o servicios de Amazon Elastic Container Service (Amazon ECS).
AWS le CodePipeline 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.
Amazon Elastic Container Service (Amazon ECS) es un servicio de administración de contenedores escalable y rápido que ayuda a ejecutar, detener y administrar contenedores en un clúster.
Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
Herramientas adicionales
Git es un sistema de control de versiones distribuido y de código abierto que funciona con el CodeCommit repositorio de AWS.
Docker es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores. Este patrón utiliza Docker para crear y probar imágenes de contenedores de forma local.
cfn-lint y cfn-nag son herramientas de código abierto que le ayudan a revisar CloudFormation las pilas para detectar cualquier error o problema de seguridad.
Repositorio de código
El código de este patrón está disponible en el repositorio GitHub Global Blue/Green de múltiples regiones y cuentas.
Epics
Tarea
Descripción
Habilidades requeridas
Exporte las variables de entorno para CloudFormation el despliegue de pilas.
Defina las variables de entorno que se utilizarán como entrada en las CloudFormation pilas más adelante en este patrón.
Actualice los nombres de los buckets que creó en las tres cuentas y regiones, tal y como se explicó anteriormente en la sección Requisitos previos:
##In work location
git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git
AWS DevOps
Empaquete los recursos de Cloudformation.
En este paso, empaqueta los artefactos locales a los que hacen referencia las CloudFormation plantillas para crear los recursos de infraestructura necesarios para servicios como Amazon Virtual Private Cloud (Amazon VPC) y Application Load Balancer.
Las plantillas están disponibles en la carpeta Infra del repositorio de código.
##In work location
git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git
AWS DevOps
Empaquete los recursos de Cloudformation.
En este paso, empaqueta los artefactos locales a los que hacen referencia las CloudFormation plantillas para crear los recursos de infraestructura necesarios para servicios como Amazon Virtual Private Cloud (Amazon VPC) y Application Load Balancer.
Las plantillas están disponibles en la carpeta Infra del repositorio de código.
Pase una imagen de muestra a un repositorio de Amazon ECR.
Pase una imagen de muestra (NGINX) al repositorio Amazon Elastic Container Registry (Amazon ECR) denominado web (tal y como se establece en los parámetros). Puede personalizar la imagen según sea necesario.
Para iniciar sesión y configurar las credenciales para enviar una imagen a Amazon ECR, siga las instrucciones de la documentación de Amazon ECR.
donde Poc-Service se refiere a la aplicación de muestra.
Compruebe que se pueda acceder a los servicios desde el equilibrador de carga de aplicación mediante un nombre de dominio completo (FQDN) o un DNS desde un navegador o mediante el comando curl.
AWS DevOps
Insertar una imagen de muestra y escalar Amazon ECS
Tarea
Descripción
Habilidades requeridas
Pase una imagen de muestra a un repositorio de Amazon ECR.
Pase una imagen de muestra (NGINX) al repositorio Amazon Elastic Container Registry (Amazon ECR) denominado web (tal y como se establece en los parámetros). Puede personalizar la imagen según sea necesario.
Para iniciar sesión y configurar las credenciales para enviar una imagen a Amazon ECR, siga las instrucciones de la documentación de Amazon ECR.
donde Poc-Service se refiere a la aplicación de muestra.
Compruebe que se pueda acceder a los servicios desde el equilibrador de carga de aplicación mediante un nombre de dominio completo (FQDN) o un DNS desde un navegador o mediante el comando curl.
AWS DevOps
Tarea
Descripción
Habilidades requeridas
Cree un CodeCommit repositorio en la cuenta de herramientas.
Cree un CodeCommit repositorio en la cuenta de herramientas mediante la codecommit.yaml plantilla, que se encuentra en la code carpeta del GitHub repositorio. Debe crear este repositorio solo en la única región en la que planea desarrollar el código.
Cree un bucket de S3 para gestionar los artefactos generados por CodePipeline.
Cree un depósito de S3 para gestionar los artefactos generados CodePipeline mediante la pre-reqs-bucket.yaml plantilla, que se encuentra en la code carpeta del GitHub repositorio. Las pilas se deben implementar en las tres regiones y cuentas de carga de trabajo (prueba) y de herramientas.
Cree una clave KMS multirregional con las claves principales y de réplica que CodePipeline utilizará. En nuestro ejemplo, ToolsAccount1region - ap-south-1 será la región principal.
Configure las variables CMKARN para pasarlas a los proyectos. CodeBuild Los valores están disponibles en la salida de la pila de plantillas ecs-codepipeline-pre-reqs -KMS (el ID de clave será el mismo en todas las regiones y empezará por). mrk- Alternativamente, puede obtener los valores de CMKARN de la cuenta de herramientas. Expórtelos en todas las sesiones de la cuenta:
Configure el CodeBuild proyecto en la cuenta de herramientas.
Utilice la codebuild_IAM.yaml plantilla de la code carpeta del GitHub repositorio para configurar AWS Identity and Access Management (IAM) para AWS CodeBuild en una sola región de la cuenta de herramientas:
Utilice la codebuild.yaml plantilla CodeBuild para configurar su proyecto de compilación. Implemente esta plantilla en las tres regiones de la manera siguiente:
Configúrelo CodeDeploy en cuentas de carga de trabajo.
Utilice la codedeploy.yaml plantilla de la code carpeta del GitHub repositorio para configurar las tres cuentas CodeDeploy de carga de trabajo. El resultado de mainInfraStack incluye los nombres de recursos de Amazon (ARNs) del clúster de Amazon ECS y el listener Application Load Balancer.
nota
Los valores de las pilas de infraestructura ya se han exportado, por lo que las plantillas de pila los CodeDeploy importan.
Cree un CodeCommit repositorio en la cuenta de herramientas.
Cree un CodeCommit repositorio en la cuenta de herramientas mediante la codecommit.yaml plantilla, que se encuentra en la code carpeta del GitHub repositorio. Debe crear este repositorio solo en la única región en la que planea desarrollar el código.
Cree un bucket de S3 para gestionar los artefactos generados por CodePipeline.
Cree un depósito de S3 para gestionar los artefactos generados CodePipeline mediante la pre-reqs-bucket.yaml plantilla, que se encuentra en la code carpeta del GitHub repositorio. Las pilas se deben implementar en las tres regiones y cuentas de carga de trabajo (prueba) y de herramientas.
Cree una clave KMS multirregional con las claves principales y de réplica que CodePipeline utilizará. En nuestro ejemplo, ToolsAccount1region - ap-south-1 será la región principal.
Configure las variables CMKARN para pasarlas a los proyectos. CodeBuild Los valores están disponibles en la salida de la pila de plantillas ecs-codepipeline-pre-reqs -KMS (el ID de clave será el mismo en todas las regiones y empezará por). mrk- Alternativamente, puede obtener los valores de CMKARN de la cuenta de herramientas. Expórtelos en todas las sesiones de la cuenta:
Configure el CodeBuild proyecto en la cuenta de herramientas.
Utilice la codebuild_IAM.yaml plantilla de la code carpeta del GitHub repositorio para configurar AWS Identity and Access Management (IAM) para AWS CodeBuild en una sola región de la cuenta de herramientas:
Utilice la codebuild.yaml plantilla CodeBuild para configurar su proyecto de compilación. Implemente esta plantilla en las tres regiones de la manera siguiente:
Configúrelo CodeDeploy en cuentas de carga de trabajo.
Utilice la codedeploy.yaml plantilla de la code carpeta del GitHub repositorio para configurar las tres cuentas CodeDeploy de carga de trabajo. El resultado de mainInfraStack incluye los nombres de recursos de Amazon (ARNs) del clúster de Amazon ECS y el listener Application Load Balancer.
nota
Los valores de las pilas de infraestructura ya se han exportado, por lo que las plantillas de pila los CodeDeploy importan.
Clone el CodeCommit repositorio que se creó en el codecommitrepoStack mediante el git clone comando, tal y como se describe en la CodeCommit documentación de AWS.
Actualice los artefactos de entrada con los detalles necesarios:
Archivo JSON: actualice AccountID en el archivo en tres lugares de este archivo. Cambie el nombre de los tres archivos para incluir la cuenta IDs.
Archivos YAML: actualiza el ARN y la versión de la definición de la tarea. Cambie el nombre de los tres archivos para incluir la cuenta. IDs
Modifique el archivo index.html para realizar algunos cambios menores en la página de inicio.
Copie los siguientes archivos en el repositorio y confirme:
Inicie o reinicie el proyecto y verifique los resultados.
Acceda al servicio desde el equilibrador de carga de aplicación mediante un FQDN o un DNS y compruebe que se hayan implementado las actualizaciones.
Llamar y probar el proyecto
Tarea
Descripción
Habilidades requeridas
Envía los cambios al CodeCommit repositorio.
Clone el CodeCommit repositorio que se creó en el codecommitrepoStack mediante el git clone comando, tal y como se describe en la CodeCommit documentación de AWS.
Actualice los artefactos de entrada con los detalles necesarios:
Archivo JSON: actualice AccountID en el archivo en tres lugares de este archivo. Cambie el nombre de los tres archivos para incluir la cuenta IDs.
Archivos YAML: actualiza el ARN y la versión de la definición de la tarea. Cambie el nombre de los tres archivos para incluir la cuenta. IDs
Modifique el archivo index.html para realizar algunos cambios menores en la página de inicio.
Copie los siguientes archivos en el repositorio y confirme:
Elimine las CloudFormation pilas de cada cuenta y región:
##In Tools Account##
aws cloudformation delete-stack --stack-name ecscodepipelinestack --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT1REGION
aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT2REGION
aws cloudformation delete-stack --stack-name ecscodebuildstack --region $TESTACCOUNT3REGION
aws cloudformation delete-stack --stack-name ecs-codepipeline-pre-reqs-KMS --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name codecommitrepoStack --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT1REGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT2REGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TESTACCOUNT3REGION
aws cloudformation delete-stack --stack-name pre-reqs-artifacts-bucket --region $TOOLSACCOUNTREGION
aws cloudformation delete-stack --stack-name ecs-codebuild-iam --region $TOOLSACCOUNTREGION
##NOTE: Artifact buckets will not get deleted if there are artifacts so it has to be emptied manually before deleting.##
##In Workload / Test Accounts####Account:1##
aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT1REGION
aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT1REGION
##Account:2##
aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT2REGION
aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT2REGION
##Account:3##
aws cloudformation delete-stack --stack-name ecscodedeploystack --region $TESTACCOUNT3REGION
aws cloudformation delete-stack --stack-name mainInfrastack --region $TESTACCOUNT3REGION
##NOTE: Amazon ECR (web) will not get deleted if the registry still includes images. It can be manually cleaned up if not required.
Solución de problemas
Problema
Solución
Los cambios realizados en el repositorio no se están implementando.
Comprueba los CodeBuild registros para ver si hay errores en la acción de compilación de Docker. Para obtener más información, consulte la Documentación de CodeBuild .
Compruebe la CodeDeploy implementación para ver si hay algún problema de implementación de Amazon ECS.