Referência de ação do Amazon EC2 - AWS CodePipeline

Referência de ação do Amazon EC2

Você usa uma ação EC2 do Amazon EC2 para implantar o código do aplicativo à frota de implantação. A frota de implantação pode consistir em instâncias do Amazon EC2 Linux ou nós gerenciados pelo Linux SSM. As instâncias devem ter o atendente do SSM instalado.

nota

Esta ação só dá suporte a tipos de instância do Linux. O tamanho máximo da frota compatível é de 500 instâncias.

A ação escolherá várias instâncias com base em um máximo especificado. As instâncias com falha das instâncias anteriores serão escolhidas primeiro. A ação vai ignorar a implantação em determinadas instâncias se a instância já tiver recebido a implantação do mesmo artefato de entrada, como um caso no qual a ação falhou anteriormente.

nota

Essa ação só é compatível para pipelines tipo V2.

Tipo de ação

  • Categoria: Deploy

  • Proprietário: AWS

  • Fornecedor: EC2

  • Versão: 1

Parâmetros de configuração

InstanceTagKey

Obrigatório: Sim

A chave de tag das instâncias criadas por você no Amazon EC2, como Name.

InstanceTagValue

Obrigatório: Não

O valor de tag das instâncias criadas por você no Amazon EC2, como my-instances.

Quando esse valor não for especificado, todas as instâncias com InstanceTagKey serão coincidentes.

InstanceType

Obrigatório: Sim

O tipo de instâncias ou nós SSM criados no Amazon EC2. Os valores válidos são EC2 e SSM_MANAGED_NODE.

Você já deve ter criado, marcado e instalado o atendente SSM em todas as instâncias.

nota

Ao criar a instância, você cria ou usa uma função de instância do EC2 existente. Para evitar erros Access Denied, você deve adicionar permissões de bucket do S3 à função da instância para dar à instância permissões para o bucket de artefato do CodePipeline. Crie uma função padrão ou atualize a função existente com a permissão s3:GetObject limitada ao bucket de artefato da região do pipeline.

TargetDirectory

Obrigatório: sim (se o script for especificado)

O diretório a ser usado na instância do Amazon EC2 para executar scripts.

DeploySpec

Obrigatório: sim (se a especificação da implantação for especificada)

O arquivo a ser usado para configurar eventos de instalação e ciclo de vida da implantação. Para obter descrições do campo de especificação e informações, consulte Implantar referência do arquivo de especificação. Para exibir uma configuração de ação com o arquivo de especificação de implantação especificado, consulte o exemplo em Declaração de ação com exemplo de especificação Implantar.

MaxBatch

Obrigatório: Não

O número máximo de instâncias permitidas para implantação em paralelo.

MaxError

Obrigatório: Não

O número máximo de erros de instância permitidos durante a implantação.

TargetGroupNameList

Obrigatório: Não

A lista de nomes do grupo de destino para implantação. Você já deve ter criado os grupos de destino.

Os grupos de destino oferecem um conjunto de instâncias para processar solicitações específicas. Se o grupo de destino for especificado, as instâncias serão removidas do grupo de destino antes da implantação e readicionadas ao grupo de destino depois da implantação.

PreScript

Obrigatório: Não

O script a ser executado antes da fase Implantar da ação.

PostScript

Obrigatório: Sim

O script a ser executado depois da fase Implantar da ação.

A imagem a seguir mostra um exemplo da página Editar da ação na qual Usar configurações de ação é escolhida.

A página Editar ação de um novo pipeline com a ação EC2Deploy especificando o uso da configuração de ação

A imagem a seguir mostra um exemplo da página Editar da ação na qual Usar um arquivo DeploySpec é escolhida.

A página Editar ação de um novo pipeline com a opção de ação EC2Deploy para usar um arquivo de especificação

Input artifacts (Artefatos de entrada)

  • Número de artefatos: 1

  • Descrição: os arquivos fornecidos, se houver, para dar suporte às ações de script durante a implantação.

Artefatos de saída

  • Número de artefatos: 0

  • Descrição: os artefatos de saída não se aplicam a esse tipo de ação.

Permissões de política do perfil de serviço para a ação de implantação do EC2

Quando o CodePipeline executa a ação, o perfil de serviço do CodePipeline exige as permissões a seguir, com escopo indicado para acesso com privilégio mínimo.

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 logs para o pipeline em logs do CloudWatch

Quando o CodePipeline executa a ação, o CodePipeline cria um grupo de logs usando o nome do pipeline conforme mostrado a seguir. Isso permite reduzir as permissões para os recursos de log usando o nome do pipeline.

/aws/codepipeline/MyPipelineName

As permissões a seguir do registro em log estão incluídas nas atualizações acima para o perfil de serviço.

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

Para visualizar logs no console usando a página de diálogo de detalhes da ação, a permissão para visualizar logs deve ser adicionada ao perfil do console. Para ter mais informações, consulte o exemplo de política de permissões do console em Permissões necessárias para visualizar logs de computação no console do CodePipeline.

Permissões do perfil de serviço para logs do CloudWatch

Quando o CodePipeline executa a ação, o CodePipeline cria um grupo de logs usando o nome do pipeline conforme mostrado a seguir. Isso permite reduzir as permissões para os recursos de log usando o nome do pipeline.

/aws/codepipeline/MyPipelineName

Para visualizar logs no console usando a página de diálogo de detalhes da ação, a permissão para visualizar logs deve ser adicionada ao perfil do console. Para ter mais informações, consulte o exemplo de política de permissões do console em Permissões necessárias para visualizar logs de computação no console do CodePipeline.

Implantar referência do arquivo de especificação

Quando o CodePipeline executa a ação, você pode especificar um arquivo de especificação para configurar a implantação nas instâncias. O arquivo de especificação da implantação especifica o que instalar e quais hooks de evento do ciclo de vida executar em resposta a eventos do ciclo de vida da implantação. O arquivo de especificação da implantação é formatado sempre em YAML. O arquivo de especificação da implantação é usado para:

  • Mapear os arquivos de origem na sua revisão de aplicativo para os respectivos destinos na instância.

  • Especificar permissões personalizadas para arquivos implantados.

  • Especificar scripts a serem executados em cada instância, em vários estágios do processo de implantação.

O arquivo de especificação da implantação dá suporte a parâmetros de configuração da implantação específicos compatíveis com o CodeDeploy com o arquivo AppSpec. Você pode usar diretamente o arquivo AppSpec existente, e todos os parâmetros não compatíveis serão ignorados. Para obter mais informações sobre o arquivo AppSpec no CodeDeploy, consulte a referência de arquivo Especificação do aplicativo no Guia do usuário do CodeDeploy.

Os parâmetros de implantação do arquivo são especificados da maneira a seguir.

  • files: o arquivo de especificação da implantação designa source: e destination: para os arquivos de implantação.

  • scripts: os eventos com script para a implantação. Dois eventos são compatíveis: BeforeDeploy e AfterDeploy.

  • hooks: os ganchos do ciclo de vida do evento. Os seguintes hooks são compatíveis: ApplicationStop, BeforeInstall, AfterInstall, ApplicationStart e ValidateService.

    nota

    O parâmetro hooks está disponível para compatibilidade do AppSpec com o CodeDeploy e só está disponível na versão 0.0 (formato AppSpec). Para esse formato, o CodePipeline realizará o melhor mapeamento possível dos eventos.

O espaçamento YAML correto deve ser usado no arquivo de especificação. Do contrário, um erro não será lançado se os locais e o número de espaços em um arquivo de especificação da implantação não estiverem corretos. Para obter mais informações sobre espaçamento, consulte a especificação YAML.

Um arquivo de especificação da implantação de exemplo está abaixo.

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 exibir uma configuração de ação com o arquivo de especificação de implantação especificado, consulte o exemplo em Declaração de ação com exemplo de especificação Implantar.

Declaração de ação

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" } ] },

Declaração de ação com exemplo de especificação Implantar

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" } ] },

Os recursos relacionados a seguir podem ajudar você à medida que trabalha com esta ação.