Referencia de la acción de Amazon EC2 - AWS CodePipeline

Referencia de la acción de Amazon EC2

Una acción EC2 de Amazon EC2 se utiliza para implementar el código de aplicación en su flota de implementación. Su flota de implementación puede estar formada por instancias Linux de Amazon EC2 o nodos Linux administrados en SSM. Las instancias deben tener instalado SSM Agent.

nota

Esta acción admite solo tipos de instancias de Linux. El tamaño de flota máximo admitido son 500 instancias.

La acción seleccionará un número de instancias en función de un número máximo especificado. Se elegirán primero las instancias anteriores que hayan fallado. La acción omitirá la implementación en determinadas instancias en caso de que la instancia ya haya recibido la implementación del mismo artefacto de entrada, como en el caso de que la acción hubiese fallado anteriormente.

nota

Esta acción solo se admite para canalizaciones de tipo V2.

Tipo de acción

  • Categoría: Deploy

  • Propietario: : AWS

  • Proveedor: EC2

  • Versión: 1

Parámetros de configuración

InstanceTagKey

Obligatorio: sí

La clave de etiqueta de las instancias que creó en Amazon EC2, como Name.

InstanceTagValue

Obligatorio: no

El valor de etiqueta de las instancias que creó en Amazon EC2, como my-instances.

Si no se especifica este valor, se buscarán todas las instancias con InstanceTagKey.

InstanceType

Obligatorio: sí

El tipo de instancias o nodos de SSM creados en Amazon EC2. Los valores válidos son EC2 y SSM_MANAGED_NODE.

Debe haber creado, etiquetado e instalado SSM Agent en todas las instancias.

nota

Al crear la instancia, se crea o se utiliza un rol de instancia de EC2 existente. Para evitar errores de tipo Access Denied, debe añadir permisos de bucket de S3 al rol de instancia para conceder a la instancia permisos para el bucket de artefactos de CodePipeline. Cree un rol predeterminado o actualice el rol actual con el permiso s3:GetObject limitado al bucket de artefactos correspondiente a la región de su canalización.

TargetDirectory

Obligatorio: sí (en caso de que se especifique script)

El directorio que se debe usar en la instancia de Amazon EC2 para ejecutar scripts.

DeploySpec

Obligatorio: sí (en caso de que se definan especificaciones de implementación)

El archivo que se utilizará para configurar los eventos de instalación y ciclo de vida de la implementación. Para obtener información y las descripciones de los campos de especificaciones de implementación, consulte Referencia del archivo de especificaciones de implementación. Para ver la configuración de una acción con el archivo de especificaciones de implementación indicado, consulte el ejemplo de Ejemplo de declaración de acción con especificaciones de implementación.

MaxBatch

Obligatorio: no

El número máximo de instancias que se permite implementar en paralelo.

MaxError

Obligatorio: no

El número máximo de errores de instancia permitidos durante la implementación.

TargetGroupNameList

Obligatorio: no

La lista de nombres de grupos de destino para la implementación. Los grupos de destino deben estar ya creados.

Los grupos de destino proporcionan un conjunto de instancias para procesar solicitudes específicas. Si se especifica el grupo de destino, las instancias se eliminarán del grupo de destino antes de la implementación y se volverán a agregar al grupo de destino después de la implementación.

PreScript

Obligatorio: no

El script que se ejecutará antes de la fase de implementación de la acción.

PostScript

Obligatorio: sí

El script que se ejecutará después de la fase de implementación de la acción.

La siguiente imagen muestra un ejemplo de la página Editar de la acción en la que se elige Usar la configuración de la acción.

Página Editar acción de una nueva canalización con la acción EC2Deploy donde se especifica el uso de la configuración de la acción

La siguiente imagen muestra un ejemplo de la página Editar de la acción en la que se elige Usar un archivo DeploySpec.

Página Editar acción de una nueva canalización con la opción de la acción EC2Deploy para utilizar un archivo de especificaciones

Artefactos de entrada

  • Número de artefactos: 1

  • Descripción: los archivos proporcionados (en caso de haberlos) para respaldar las acciones del script durante la implementación.

Artefactos de salida

  • Número de artefactos: 0

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

Permisos de la política de rol de servicio para la acción de implementación de EC2

Cuando CodePipeline ejecuta la acción, el rol de servicio de CodePipeline requiere los siguientes permisos, limitados según corresponde para el acceso de privilegio minimo.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "StatementWithAllResource", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "elasticloadbalancing:DescribeTargetGroupAttributes", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetHealth", "ssm:CancelCommand", "ssm:DescribeInstanceInformation", "ssm:ListCommandInvocations" ], "Resource": [ "*" ] }, { "Sid": "StatementForLogs", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/codepipeline/{{pipelineName}}:*" ] }, { "Sid": "StatementForElasticloadbalancing", "Effect": "Allow", "Action": [ "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:RegisterTargets" ], "Resource": [ "arn:aws:elasticloadbalancing:us-east-1:111122223333:targetgroup/[[targetGroupName]]/*" ] }, { "Sid": "StatementForSsmOnTaggedInstances", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:us-east-1:111122223333:instance/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/{{tagKey}}": "{{tagValue}}" } } }, { "Sid": "StatementForSsmApprovedDocuments", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ssm:us-east-1::document/AWS-RunPowerShellScript", "arn:aws:ssm:us-east-1::document/AWS-RunShellScript" ] } ] }

Grupos de registro para la canalización en los registros de CloudWatch

Cuando CodePipeline ejecuta la acción, CodePipeline crea un grupo de registro con el nombre de la canalización de la siguiente manera. Esto permite reducir los permisos para registrar los recursos mediante el nombre de la canalización.

/aws/codepipeline/MyPipelineName

Los siguientes permisos de registro se incluyen en las actualizaciones anteriores para el rol de servicio.

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

Para ver los registros en la consola mediante la página del cuadro de diálogo de detalles de la acción, se debe agregar el permiso para ver los registros al rol de la consola. Para obtener más información, consulte el ejemplo de política de permisos para consolas en Permisos necesarios para ver los registros de computación en la consola de CodePipeline.

Permisos de la política de rol de servicio para los registros de CloudWatch

Cuando CodePipeline ejecuta la acción, CodePipeline crea un grupo de registro con el nombre de la canalización de la siguiente manera. Esto permite reducir los permisos para registrar los recursos mediante el nombre de la canalización.

/aws/codepipeline/MyPipelineName

Para ver los registros en la consola mediante la página del cuadro de diálogo de detalles de la acción, se debe agregar el permiso para ver los registros al rol de la consola. Para obtener más información, consulte el ejemplo de política de permisos para consolas en Permisos necesarios para ver los registros de computación en la consola de CodePipeline.

Referencia del archivo de especificaciones de implementación

Puede indicar un archivo de especificaciones para configurar la implementación en sus instancias cuando CodePipeline ejecute la acción. El archivo de especificaciones de implementación especifica qué se debe instalar y qué enlaces de eventos del ciclo de vida se deben ejecutar como respuesta a los eventos del ciclo de vida de implementación. El archivo de especificaciones de implementación siempre tiene formato YAML. El archivo de especificaciones de implementación se utiliza para:

  • Asignar los archivos de origen de la revisión de la aplicación a sus destinos en la instancia.

  • Especificar permisos personalizados para los archivos implementados.

  • Especificar los scripts que se van a ejecutar en cada instancia en las distintas fases del proceso de implementación.

El archivo de especificaciones de implementación admite parámetros de configuración de implementación específicos que admite CodeDeploy con el archivo AppSpec. Puede usar su archivo AppSpec directamente y se omitirán los parámetros no admitidos. Para obtener más información acerca del archivo AppSpec en CodeDeploy, consulte la referencia del archivo de especificación de aplicación en la Guía del usuario de CodeDeploy.

Los parámetros de implementación del archivo se especifican como se indica a continuación.

  • files: el archivo de especificaciones de implementación designa los valores de source: y destination: para los archivos de implementación.

  • scripts: los eventos incluidos en los scripts para la implementación. Se admiten dos eventos: BeforeDeploy y AfterDeploy.

  • hooks: los enlaces de ciclo de vida del evento. Se admiten los siguientes enlaces: ApplicationStop, BeforeInstall, AfterInstall, ApplicationStart y ValidateService.

    nota

    El parámetro hooks está disponible para garantizar la compatibilidad de AppSpec con CodeDeploy y solo está disponible en la versión 0.0 (formato de AppSpec). Para este formato, CodePipeline realizará la mejor asignación posible de los eventos.

El archivo de especificaciones debe emplear los espacios como requiere YAML. Se producirá un error si las posiciones y el número de los espacios del archivo de especificaciones de implementación no son correctos. Para obtener más información acerca del espaciado, consulte la especificación de YAML.

A continuación, se muestra un ejemplo de archivo de especificaciones de implementación.

version: 0.1 files: - source: /index.html destination: /var/www/html/ scripts: BeforeDeploy: - location: scripts/install_dependencies timeout: 300 runas: myuser AfterDeploy: - location: scripts/start_server timeout: 300 runas: myuser

Para ver la configuración de una acción con el archivo de especificaciones de implementación indicado, consulte el ejemplo de Ejemplo de declaración de acción con especificaciones de implementación.

Declaración de acciones

YAML
name: DeployEC2 actions: - name: EC2 actionTypeId: category: Deploy owner: AWS provider: EC2 version: '1' runOrder: 1 configuration: InstanceTagKey: Name InstanceTagValue: my-instances InstanceType: EC2 PostScript: "test/script.sh", TargetDirectory: "/home/ec2-user/deploy" outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1
JSON
{ "name": "DeployEC2", "actions": [ { "name": "EC2Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "EC2", "version": "1" }, "runOrder": 1, "configuration": { "InstanceTagKey": "Name", "InstanceTagValue": "my-instances", "InstanceType": "EC2", "PostScript": "test/script.sh", "TargetDirectory": "/home/ec2-user/deploy" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] },

Ejemplo de declaración de acción con especificaciones de implementación

YAML
name: DeployEC2 actions: - name: EC2 actionTypeId: category: Deploy owner: AWS provider: EC2 version: '1' runOrder: 1 configuration: DeploySpec: "deployspec.yaml" InstanceTagKey: Name InstanceTagValue: my-instances InstanceType: EC2 outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1
JSON
{ "name": "DeployEC2", "actions": [ { "name": "EC2Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "EC2", "version": "1" }, "runOrder": 1, "configuration": { "DeploySpec": "deployspec.yaml", "InstanceTagKey": "Name", "InstanceTagValue": "my-instances", "InstanceType": "EC2" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] },

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