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

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

Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu y Anand Krishna Varanasi, Amazon Web Services

Resumen

Aviso: AWS CodeCommit ya no está disponible para los nuevos clientes. Los clientes existentes 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 (pull requests, PR). La función de AWS Lambda que se implementa desde esta pila crea una PR desde la rama de desarrollo hacia la rama principal. La fusión de PR hacia la rama principal inicia un proyecto de AWS CodePipeline, que orquesta el flujo de integración y entrega continuas (CI/CD) e implementa las pilas en todas las cuentas.

Este patrón proporciona un ejemplo de configuración de infraestructura como código (IaC) mediante pilas de AWS CloudFormation para demostrar este caso de uso. La implementación azul/verde de los microservicios se lleva a cabo mediante AWS CodeDeploy.

Requisitos previos y limitaciones

Requisitos previos

  • Cuatro cuentas de AWS activas:

    • Una cuenta de herramientas para administrar el proyecto de código y mantener el repositorio de AWS CodeCommit.

    • 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 aplicar las modificaciones adecuadas en las pilas multirregionales de AWS CodeDeploy y AWS KMS.

    • Cuenta (AWS CodeCommit) de herramientas: 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 1 aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1 ##In Test Account 2 aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1 ##In Test Account 3 aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1 #Example ##In Test Account 1 aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1 ##In Test Account 2 aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1 ##In Test Account 3 aws 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

Arquitectura de destino para implementar microservicios en varias cuentas y regiones

Automatizar y escalar

La configuración se automatiza mediante plantillas de pila (de IaC) de AWS CloudFormation. Se puede escalar fácilmente para varios entornos y cuentas.

Herramientas

Servicios de AWS

  • AWS CloudFormation le permite configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y administrarlos durante todo su ciclo de vida en todas las cuentas y regiones 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 CodeCommit es un servicio de control de versiones que permite almacenar y administrar repositorios de Git de forma privada, sin necesidad de administrar su propio sistema de control de origen.

  • AWS CodeDeploy automatiza las implementaciones en instancias de Amazon Elastic Compute Cloud (Amazon EC2) o instancias en las instalaciones, funciones de AWS Lambda o servicios de Amazon Elastic Container Service (Amazon ECS).

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

  • Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.

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

  • AWS Key Management Service (AWS KMS) facilita poder crear y controlar claves criptográficas para proteger los datos.

  • 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 repositorio AWS CodeCommit.

  • 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 facilitan poder revisar las pilas de CloudFormation para detectar errores o problemas de seguridad.

Repositorio de códigos

El código de este patrón está disponible en el repositorio de GitHub Global Blue/Green deployments in multiple regions and accounts (Implementaciones azul/verde globales en varias regiones y cuentas).

Epics

TareaDescripciónHabilidades requeridas

Exporte variables de entorno para la implementación de la pila de CloudFormation.

Defina las variables de entorno que se utilizarán como entrada en las pilas de CloudFormation más adelante en este patrón.

  1. 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:

    export S3BUCKETNAMETESTACCOUNT1=<S3BUCKETACCOUNT1> export S3BUCKETNAMETESTACCOUNT2=<S3BUCKETACCOUNT2> export S3BUCKETNAMETESTACCOUNT3=<S3BUCKETACCOUNT3>
  2. Defina una cadena de asignación al azar para crear buckets de artefactos, ya que los nombres de los buckets deben ser únicos en todo el mundo:

    export BUCKETSTARTNAME=ecs-codepipeline-artifacts-19992
  3. Defina y exporte los ID de las cuentas y las regiones:

    export TOOLSACCOUNT=<TOOLSACCOUNT> export CODECOMMITACCOUNT=<CODECOMMITACCOUNT> export CODECOMMITREGION=ap-south-1 export CODECOMMITREPONAME=Poc export TESTACCOUNT1=<TESTACCOUNT1> export TESTACCOUNT2=<TESTACCOUNT2> export TESTACCOUNT3=<TESTACCOUNT3> export TESTACCOUNT1REGION=ap-south-1 export TESTACCOUNT2REGION=eu-central-1 export TESTACCOUNT3REGION=us-east-1 export TOOLSACCOUNTREGION=ap-south-1 export ECRREPOSITORYNAME=web
DevOps de AWS
TareaDescripciónHabilidades requeridas

Clonar el repositorio.

Clone el repositorio de muestras en un nuevo repositorio de su lugar de trabajo:

##In work location git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git
DevOps de AWS

Empaquete los recursos de Cloudformation.

En este paso, se empaquetan los artefactos locales a los que hacen referencia las plantillas de CloudFormation con el fin de crear los recursos de infraestructura necesarios para servicios como Amazon Virtual Private Cloud (Amazon VPC) y equilibrador de carga de aplicación.

Las plantillas están disponibles en la carpeta Infra del repositorio de código.

##In TestAccount1## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \ --s3-prefix infraStack \ --region $TESTACCOUNT1REGION \ --output-template-file infrastructure_${TESTACCOUNT1}.template
##In TestAccount2## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \ --s3-prefix infraStack \ --region $TESTACCOUNT2REGION \ --output-template-file infrastructure_${TESTACCOUNT2}.template
##In TestAccount3## aws cloudformation package \ --template-file mainInfraStack.yaml \ --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \ --s3-prefix infraStack \ --region $TESTACCOUNT3REGION \ --output-template-file infrastructure_${TESTACCOUNT3}.template
DevOps de AWS

Valide las plantillas de paquetes.

Valide las plantillas de paquetes:

aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT1}.template aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT2}.template aws cloudformation validate-template \ --template-body file://infrastructure_${TESTACCOUNT3}.template
DevOps de AWS

Implemente los archivos del paquete en las cuentas de carga de trabajo,

  1. Actualice los valores de los marcadores de posición y los nombres de las cuentas en el script infraParameters.json según su configuración.

  2. Implemente las plantillas de paquetes en sus tres cuentas de carga de trabajo.

    ##In TestAccount1## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT1}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT1REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM ##In TestAccount2## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT2}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT2REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM ##In TestAccount3## aws cloudformation deploy \ --template-file infrastructure_${TESTACCOUNT3}.template \ --stack-name mainInfrastack \ --parameter-overrides file://infraParameters.json \ --region $TESTACCOUNT3REGION \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
DevOps de AWS
TareaDescripciónHabilidades 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.

Los comandos son:

docker pull nginx docker images docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag
DevOps de AWS

Escale Amazon ECS y verifique el acceso.

  1. Escale Amazon ECS para crear dos réplicas:

    aws ecs update-service --cluster QA-Cluster --service Poc-Service --desired-count 2

    donde Poc-Service se refiere a la aplicación de muestra.

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

DevOps de AWS
TareaDescripciónHabilidades requeridas

Cree un repositorio de CodeCommit en la cuenta de herramientas.

Cree un repositorio de CodeCommit en la cuenta de herramientas mediante la plantilla codecommit.yaml, que se encuentra en la carpeta code del repositorio de GitHub. Debe crear este repositorio solo en la única región en la que planea desarrollar el código.

aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides CodeCommitReponame=$CODECOMMITREPONAME \ ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml --region $TOOLSACCOUNTREGION \ --capabilities CAPABILITY_NAMED_IAM
DevOps de AWS

Cree un bucket de S3 para administrar los artefactos generados por CodePipeline.

Cree un bucket de S3 para administrar los artefactos generados por CodePipeline mediante la plantilla pre-reqs-bucket.yaml, que se encuentra en la carpeta code del repositorio de GitHub. Las pilas se deben implementar en las tres regiones y cuentas de carga de trabajo (prueba) y de herramientas.

aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM
DevOps de AWS

Configure una clave KMS multirregional.

  1. Cree una clave KMS de varias regiones, con claves principales y de réplica, para que la utilice CodePipeline. En nuestro ejemplo, ToolsAccount1region - ap-south-1 será la región principal.

    aws cloudformation deploy --stack-name ecs-codepipeline-pre-reqs-KMS \ --template-file pre-reqs_KMS.yaml --parameter-overrides \ TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT --region $TOOLSACCOUNTREGION
  2. Configure las variables CMKARN para pasarlas a los proyectos de CodeBuild. Los valores están disponibles en la salida de la pila de plantillas ECS-CodePipeline-pre-Reqs-KMS (el identificador 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: 

    export CMKARN1=arn:aws:kms:ap-south-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMKARN2=arn:aws:kms:eu-central-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMKARN3=arn:aws:kms:us-east-1:<TOOLSACCOUNTID>:key/mrk-xxx export CMARNTOOLS=arn:aws:kms:ap-south-1:<TOOLSACCOUNTID>:key/mrk-xxx
DevOps de AWS

Configure el proyecto CodeBuild en la cuenta de herramientas.

  1. Use la plantilla codebuild_IAM.yaml de la carpeta code del repositorio de GitHub para configurar AWS Identity and Access Management (IAM) para AWS CodeBuild en una sola región de la cuenta de herramientas:

    #In ToolsAccount aws cloudformation deploy --stack-name ecs-codebuild-iam \ --template-file codebuild_IAM.yaml --region $TOOLSACCOUNTREGION \ --capabilities CAPABILITY_NAMED_IAM
  2. Use la plantilla codebuild.yaml para configurar CodeBuild para su proyecto de compilación. Implemente esta plantilla en las tres regiones de la manera siguiente:

    aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT1 \ TestAccount3=$TESTACCOUNT3 CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN1 \ --template-file codebuild.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN2 \ --template-file codebuild.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name ecscodebuildstack --parameter-overrides ToolsAccount=$TOOLSACCOUNT \ CodeCommitRepoName=$CODECOMMITREPONAME ECRRepositoryName=$ECRREPOSITORYNAME APPACCOUNTID=$TESTACCOUNT3 \ CodeCommitRegion=$CODECOMMITREGION CMKARN=$CMKARN3 \ --template-file codebuild.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM
DevOps de AWS

Configure CodeDeploy en las cuentas de carga de trabajo.

Use la plantilla codedeploy.yaml de la carpeta code del repositorio de GitHub para configurar CodeDeploy en las tres cuentas de carga de trabajo. La salida de mainInfraStack incluye los nombres de recursos de Amazon (ARN) del clúster Amazon ECS y el oyente del equilibrador de carga de aplicación.

nota

Los valores de las pilas de infraestructura ya se han exportado, por lo que las plantillas de pila de CodeDeploy los importan.

##WorkloadAccount1## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM ##WorkloadAccount2## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM ##WorkloadAccount3## aws cloudformation deploy --stack-name ecscodedeploystack \ --parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \ --template-file codedeploy.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM
DevOps de AWS
TareaDescripciónHabilidades requeridas

Cree un proyecto de código en la cuenta de herramientas.

En la cuenta de herramientas, ejecute el comando:

aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides \ TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \ TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \ TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \ CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \ CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \ --template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM
DevOps de AWS

Proporcione acceso a los roles de CodePipeline y CodeBuild en la política de claves de AWS KMS y en la política de bucket de S3.

  1. Proporcione acceso a los roles de CodePipeline y CodeBuild en la política de claves de AWS KMS:

    aws cloudformation deploy --stack-name ecs-codepipeline-pre-reqs-KMS \ --template-file pre-reqs_KMS.yaml --parameter-overrides \ CodeBuildCondition=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT --region $TOOLSACCOUNTREGION
  2. Actualice la política de bucket de S3 para permitir el acceso a los roles de CodePipeline y CodeDeploy:

    aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \ PutS3BucketPolicy=true TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \ TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \ --template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM
DevOps de AWS
TareaDescripciónHabilidades requeridas

Pase los cambios al repositorio de CodeCommit.

  1. Clone el repositorio de CodeCommit que se creó en codecommitrepoStack mediante el comando git clone, tal y como se describe en la documentación de AWS CodeCommit.

  2. 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 los ID de las cuentas.

    • 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 los ID de las cuentas.

  3. Modifique el archivo index.html para realizar algunos cambios menores en la página de inicio.

  4. Copie los siguientes archivos en el repositorio y confirme:

    index.html Dockerfile buildspec.yaml appspec_<accountid>.yaml (3 files - one per account ) taskdef<accountid>.json (3 files - one per account)
  5. Inicie o reinicie el proyecto y verifique los resultados.

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

TareaDescripciónHabilidades requeridas

Limpie todos los recursos implementados.

  1. Reduzca verticalmente Amazon ECS a cero instancias:

    aws ecs update-service --cluster QA-Cluster --service Poc-Service --desired-count 0
  2. Elimine las pilas de CloudFormation en 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

ProblemaSolución

Los cambios realizados en el repositorio no se están implementando.

  • Comprueba los registros de CodeBuild 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 implementación de CodeDeploy para ver si hay algún problema en la implementación de Amazon ECS.

Recursos relacionados