Referencia de acciones de implementación de Amazon Elastic Container Service y CodeDeploy azul-verde - AWS CodePipeline

Referencia de acciones de implementación de Amazon Elastic Container Service y CodeDeploy azul-verde

En este tutorial, se configura una canalización en AWS CodePipeline que implementa aplicaciones de contenedor con una implementación azul/verde. En una implementación azul/verde, puede lanzar una versión nueva de la aplicación junto con la versión antigua y probar la versión nueva antes de redirigir el tráfico a ella. También puede monitorizar el proceso de implementación y revertirlo rápidamente si hay algún problema.

La canalización completa detecta los cambios en las imágenes o en el archivo de definición de tareas y utiliza CodeDeploy para dirigir e implementar el tráfico en un clúster y un equilibrador de carga de Amazon ECS. CodeDeploy crea un nuevo agente de escucha en el equilibrador de carga que puede dirigir la nueva tarea a través de un puerto especial. También puede configurar la canalización para que utilice una ubicación de origen, como un repositorio de CodeCommit, donde se almacene la definición de tareas de Amazon ECS.

Antes de crear la canalización, debe haber creado los recursos de Amazon ECS, los recursos de CodeDeploy y el equilibrador de carga y el grupo de destino. Debe haber etiquetado y almacenado la imagen en su repositorio de imágenes y haber cargado la definición de la tarea y el archivo AppSpec en su repositorio de archivos.

nota

En este tema se describe la acción de implementación azul/verde de Amazon ECS a CodeDeploy para CodePipeline. Para obtener información de referencia sobre las acciones de implementación estándar de Amazon ECS en CodePipeline, consulte Referencia de acción de implementación de Amazon Elastic Container Service.

Tipo de acción

  • Categoría: Deploy

  • Propietario: : AWS

  • Proveedor: CodeDeployToECS

  • Versión: 1

Parámetros de configuración

ApplicationName

Obligatorio: sí

El nombre de la aplicación en CodeDeploy. Antes de crear la canalización, debe haber creado ya la aplicación en CodeDeploy.

DeploymentGroupName

Obligatorio: sí

El grupo de implementación especificado para los conjuntos de tareas de Amazon ECS que creó para la aplicación CodeDeploy. Antes de crear la canalización, debe haber creado ya el grupo de implementación en CodeDeploy.

TaskDefinitionTemplateArtifact

Obligatorio: sí

El nombre del artefacto de entrada que proporciona el archivo de definición de tareas a la acción de implementación. Este es generalmente el nombre del artefacto de salida de la acción de origen. Cuando utiliza la consola, el nombre por defecto del artefacto de salida de la acción de origen es SourceArtifact.

AppSpecTemplateArtifact

Obligatorio: sí

El nombre del artefacto de entrada que proporciona el archivo AppSpec a la acción de implementación. Este valor se actualiza cuando se ejecuta la canalización. Este es generalmente el nombre del artefacto de salida de la acción de origen. Cuando utiliza la consola, el nombre por defecto del artefacto de salida de la acción de origen es SourceArtifact. Para TaskDefinition En el archivo AppSpec, puede conservar el texto del marcador de posición <TASK_DEFINITION> como se muestra aquí.

AppSpecTemplatePath

Obligatorio: no

El nombre del archivo AppSpec almacenado en la ubicación del archivo de origen de la canalización, como el repositorio CodeCommit de la canalización. El nombre del archivo predeterminado es appspec.yaml. Si el archivo AppSpec tiene el mismo nombre y está almacenado en el nivel raíz del repositorio de archivos, no es necesario que proporcione el nombre del archivo. Si la ruta no es la predeterminada, introdúzcala con el nombre del archivo.

TaskDefinitionTemplatePath

Obligatorio: no

El nombre del archivo de la definición de tarea almacenada en la ubicación del archivo de origen de la canalización, como el repositorio CodeCommit de la canalización. El nombre del archivo predeterminado es taskdef.json. Si el archivo de definición de tarea tiene el mismo nombre y está almacenado en el nivel raíz del repositorio de archivos, no es necesario que proporcione el nombre del archivo. Si la ruta no es la predeterminada, introdúzcala con el nombre del archivo.

Image<Number>ArtifactName

Obligatorio: no

El nombre del artefacto de entrada que proporciona la imagen a la acción de implementación. Por lo general, se trata del artefacto de salida del repositorio de imágenes, como el resultado de la acción de origen de Amazon ECR.

Los valores disponibles para <Number> son del 1 al 4.

Image<Number>ContainerName

Obligatorio: no

El nombre de la imagen disponible en el repositorio de imágenes, como el repositorio de origen de Amazon ECR.

Los valores disponibles para <Number> son del 1 al 4.

Artefactos de entrada

  • Número de artefactos: 1 to 5

  • Descripción: la acción CodeDeployToECS busca primero el archivo de definición de tareas y el archivo AppSpec en el repositorio de archivos de origen, luego busca la imagen en el repositorio de imágenes, luego genera dinámicamente una nueva revisión de la definición de tarea y, finalmente, ejecuta los comandos AppSpec para implementar el conjunto de tareas y el contenedor en el clúster.

    La acción CodeDeployToECS busca un archivo imageDetail.json que asigne el URI de la imagen a la imagen. Cuando se confirma un cambio en el repositorio de imágenes de Amazon ECR, la acción de origen de ECR de la canalización crea un archivo imageDetail.json para dicha confirmación. También puede añadir manualmente un archivo imageDetail.json para una canalización en la que la acción no esté automatizada. Para obtener más información sobre el archivo imageDetail.json, consulte Archivo imageDetail.json para las acciones de implementación blue/green de .

    La acción CodeDeployToECS genera de forma dinámica una nueva revisión de la definición de la tarea. En esta fase, esta acción reemplaza los marcadores de posición del archivo de definición de tareas por el URI de imagen obtenido de los archivos ImageDetail.json. Por ejemplo, si establece IMAGE1_NAME como parámetro Image1ContainerName, debe especificar el marcador de posición <IMAGE1_NAME> como el valor del campo de imagen en el archivo de definición de tareas. En este caso, la acción CodeDeployToECS reemplaza el marcador de posición <IMAGE1_NAME> por el URI de imagen real recuperado de ImageDetail.json en el artefacto que especifique como Image1ArtifactName.

    Para las actualizaciones de las definiciones de tareas, el archivo AppSpec.yaml de CodeDeploy contiene la propiedad TaskDefinition.

    TaskDefinition: <TASK_DEFINITION>

    La acción CodeDeployToECS actualizará esta propiedad mediante la acción una vez creada la nueva definición de tarea.

    Para el valor del campo TaskDefinition, el texto del marcador de posición debe ser <TASK_DEFINITION>. La acción CodeDeployToECS reemplaza este marcador de posición por el ARN real de la definición de tarea generada dinámicamente.

Artefactos de salida

  • Número de artefactos: 0

  • Descripción: los artefactos de salida no se aplican a este tipo de acción.

Permisos del rol de servicio: acción de CodeDeployToECS

Para la acción CodeDeployToECS (implementaciones azul/verde), se muestran los permisos mínimos necesarios para crear canalizaciones con una acción de implementación azul/verde de Amazon ECS.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCodeDeployDeploymentActions", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment" ], "Resource": [ "arn:aws:codedeploy:*:111122223333:deploymentgroup:[[ApplicationName]]/*" ], "Effect": "Allow" }, { "Sid": "AllowCodeDeployApplicationActions", "Action": [ "codedeploy:GetApplication", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": [ "arn:aws:codedeploy:*:111122223333:application:[[ApplicationName]]", "arn:aws:codedeploy:*:111122223333:application:[[ApplicationName]]/*" ], "Effect": "Allow" }, { "Sid": "AllowCodeDeployDeploymentConfigAccess", "Action": [ "codedeploy:GetDeploymentConfig" ], "Resource": [ "arn:aws:codedeploy:*:111122223333:deploymentconfig:*" ], "Effect": "Allow" }, { "Sid": "AllowECSRegisterTaskDefinition", "Action": [ "ecs:RegisterTaskDefinition" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Sid": "AllowPassRoleToECS", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::111122223333:role/[[PassRoles]]" ], "Condition": { "StringEquals": { "iam:PassedToService": [ "ecs.amazonaws.com", "ecs-tasks.amazonaws.com" ] } } } ] }

Puede optar por utilizar la autorización de etiquetado en Amazon ECS. Al suscribirse, debe otorgar los siguientes permisos: ecs:TagResource. Para obtener más información sobre cómo suscribirse y determinar si el permiso es obligatorio y si se aplica la autorización de etiquetas, consulte el Plazos de la autorización de etiquetado en la Guía para desarrolladores de Amazon Elastic Container Service.

También debe añadir los permisos iam:PassRole para utilizar los rones de IAM en las tareas. Para obtener más información, consulte Rol de ejecución de tareas de Amazon ECS y Roles de IAM para tareas.

También puede añadir ecs-tasks.amazonaws.com a la lista de servicios con la condición iam:PassedToService, como se muestra en el ejemplo anterior.

Declaración de acciones

YAML
Name: Deploy Actions: - Name: Deploy ActionTypeId: Category: Deploy Owner: AWS Provider: CodeDeployToECS Version: '1' RunOrder: 1 Configuration: AppSpecTemplateArtifact: SourceArtifact ApplicationName: ecs-cd-application DeploymentGroupName: ecs-deployment-group Image1ArtifactName: MyImage Image1ContainerName: IMAGE1_NAME TaskDefinitionTemplatePath: taskdef.json AppSpecTemplatePath: appspec.yaml TaskDefinitionTemplateArtifact: SourceArtifact OutputArtifacts: [] InputArtifacts: - Name: SourceArtifact - Name: MyImage Region: us-west-2 Namespace: DeployVariables
JSON
{ "Name": "Deploy", "Actions": [ { "Name": "Deploy", "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeployToECS", "Version": "1" }, "RunOrder": 1, "Configuration": { "AppSpecTemplateArtifact": "SourceArtifact", "ApplicationName": "ecs-cd-application", "DeploymentGroupName": "ecs-deployment-group", "Image1ArtifactName": "MyImage", "Image1ContainerName": "IMAGE1_NAME", "TaskDefinitionTemplatePath": "taskdef.json", "AppSpecTemplatePath": "appspec.yaml", "TaskDefinitionTemplateArtifact": "SourceArtifact" }, "OutputArtifacts": [], "InputArtifacts": [ { "Name": "SourceArtifact" }, { "Name": "MyImage" } ], "Region": "us-west-2", "Namespace": "DeployVariables" } ] }

Los recursos relacionados siguientes pueden serle de ayuda cuando trabaje con esta acción.

  • Tutorial: Crear una canalización con un origen de Amazon ECR y una implementación de ECS-to-CodeDeploy: este tutorial le guía a través de la creación de los recursos de CodeDeploy y Amazon ECS que necesita para una implementación azul/verde. El tutorial muestra cómo insertar una imagen de Docker en Amazon ECR y cómo crear una definición de tarea de Amazon ECS que incluya el nombre de la imagen de Docker, el nombre del contenedor, el nombre del servicio de Amazon ECS y la configuración del equilibrador de carga. A continuación, el tutorial explica cómo crear el archivo AppSpec y la canalización para su implementación.

    nota

    En este tema y en el tutorial se describe la acción azul/verde de CodeDeploy/ECS para CodePipeline. Para obtener información sobre las acciones estándar de ECS en CodePipeline, consulte el Tutorial: Implementación continua con CodePipeline.

  • Guía del usuario de AWS CodeDeploy: para obtener información sobre cómo utilizar el equilibrador de carga, el oyente de producción, los grupos de destino y su aplicación Amazon ECS en una implementación azul/verde, consulte Tutorial: Implementación de un Amazon ECS Service. Esta información de referencia de la Guía del usuario de AWS CodeDeploy proporciona una descripción general de las implementaciones azul/verde con Amazon ECS y AWS CodeDeploy.

  • Guía para desarrolladores de Amazon Elastic Container Service: para obtener información sobre cómo trabajar con imágenes y contenedores de Docker, servicios y clústeres de ECS y conjuntos de tareas de ECS, consulte ¿Qué es Amazon ECS?