As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Tutorial: Implantação ECS padrão da Amazon com CodePipeline
Este tutorial ajuda você a criar um pipeline de implantação (CD) completo e end-to-end contínuo com a Amazon ECS com CodePipeline.
Importante
Como parte da criação de um pipeline no console, um bucket de artefatos S3 será usado CodePipeline por for artefacts. (Isso é diferente do bucket usado para uma ação de origem do S3.) Se o bucket de artefatos do S3 estiver em uma conta diferente da conta do seu pipeline, certifique-se de que o bucket de artefatos do S3 Contas da AWS seja de propriedade de quem é seguro e confiável.
nota
Este tutorial é para a ação de implantação ECS padrão da Amazon para CodePipeline. Para obter um tutorial que usa a ação de implantação Amazon ECS to CodeDeploy blue/green em CodePipeline, consulte. Tutorial: Crie um pipeline com uma ECR fonte da Amazon e ECS para implantação CodeDeploy
Pré-requisitos
Para você usar este tutorial para criar seu pipeline de CD, alguns recursos precisam estar em operação. Veja aqui estão os itens que você precisa para começar:
nota
Todos esses recursos devem ser criados na mesma AWS região.
-
Um repositório de controle de origem (este tutorial usa CodeCommit) com seu Dockerfile e a fonte do aplicativo. Para obter mais informações, consulte Criar um CodeCommit repositório no Guia do AWS CodeCommit usuário.
-
Um repositório de imagens do Docker (este tutorial usa a AmazonECR) que contém uma imagem que você criou a partir do Dockerfile e da fonte do aplicativo. Para obter mais informações, consulte Criação de um repositório e Envio de uma imagem por push no Guia do usuário do Amazon Elastic Container Registry.
-
Uma definição de ECS tarefa da Amazon que faz referência à imagem do Docker hospedada em seu repositório de imagens. Para obter mais informações, consulte Como criar uma definição de tarefa no Guia do desenvolvedor do Amazon Elastic Container Service.
Importante
A ação de implantação ECS padrão da Amazon para CodePipeline cria sua própria revisão da definição da tarefa com base na revisão usada pelo ECS serviço da Amazon. Se você criar novas revisões para a definição da tarefa sem atualizar o ECS serviço da Amazon, a ação de implantação ignorará essas revisões.
Veja a seguir um exemplo de definição de tarefa usado neste tutorial. O valor que você usa em
name
efamily
será usado na próxima etapa do seu arquivo de especificação de compilação.{ "ipcMode": null, "executionRoleArn": "
role_ARN
", "containerDefinitions": [ { "dnsSearchDomains": null, "environmentFiles": null, "logConfiguration": { "logDriver": "awslogs", "secretOptions": null, "options": { "awslogs-group": "/ecs/hello-world
", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "ecs" } }, "entryPoint": null, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": null, "linuxParameters": null, "cpu": 0, "environment": [], "resourceRequirements": null, "ulimits": null, "dnsServers": null, "mountPoints": [], "workingDirectory": null, "secrets": null, "dockerSecurityOptions": null, "memory": null, "memoryReservation": 128, "volumesFrom": [], "stopTimeout": null, "image": "image_name
", "startTimeout": null, "firelensConfiguration": null, "dependsOn": null, "disableNetworking": null, "interactive": null, "healthCheck": null, "essential": true, "links": null, "hostname": null, "extraHosts": null, "pseudoTerminal": null, "user": null, "readonlyRootFilesystem": null, "dockerLabels": null, "systemControls": null, "privileged": null, "name": "hello-world
" } ], "placementConstraints": [], "memory": "2048", "taskRoleArn": null, "compatibilities": [ "EC2", "FARGATE" ], "taskDefinitionArn": "ARN
", "family": "hello-world
", "requiresAttributes": [], "pidMode": null, "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "1024", "revision": 1, "status": "ACTIVE", "inferenceAccelerators": null, "proxyConfiguration": null, "volumes": [] } -
Um ECS cluster da Amazon que está executando um serviço que usa sua definição de tarefa mencionada anteriormente. Para obter mais informações, consulte Criação de um cluster e Criação de um serviço no Guia do desenvolvedor do Amazon Elastic Container Service.
Assim que você atender a esses pré-requisitos, poderá continuar com o tutorial e criar seu pipeline de CD.
Etapa 1: Adicionar um arquivo de especificação de compilação ao repositório de origem
Este tutorial é usado CodeBuild para criar sua imagem do Docker e enviar a imagem para a AmazonECR. Adicione um buildspec.yml
arquivo ao seu repositório de código-fonte para saber CodeBuild como fazer isso. O exemplo de especificação de compilação abaixo faz o seguinte:
-
Estágio pré-compilação:
-
Faça login na AmazonECR.
-
Defina o repositório URI para sua ECR imagem e adicione uma tag de imagem com os primeiros sete caracteres do ID de confirmação do Git da fonte.
-
-
Estágio de compilação:
-
Crie a imagem de docker e marque-a como
latest
e com o ID de confirmação do Git.
-
-
Estágio pós-compilação:
-
Envie a imagem para o seu ECR repositório com as duas tags.
-
Escreva um arquivo chamado
imagedefinitions.json
na raiz de compilação que tenha o nome do contêiner do seu ECS serviço Amazon, a imagem e a tag. O estágio de implantação do pipeline de CD usa essas informações para criar uma nova revisão da definição de tarefa do serviço e, em seguida, atualiza o serviço para usar a nova definição de tarefa. Oimagedefinitions.json
arquivo é obrigatório para ECS o funcionário.
-
Cole este texto de exemplo para criar seu arquivo buildspec.yml
e substitua os valores para definição da imagem e da tarefa. Este texto usa o exemplo de ID de conta 111122223333.
version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws --version - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com - REPOSITORY_URI=012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=${COMMIT_HASH:=latest} build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $REPOSITORY_URI:latest . - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $REPOSITORY_URI:latest - docker push $REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json artifacts: files: imagedefinitions.json
A especificação de compilação foi escrita para a definição de tarefa de amostra fornecida emPré-requisitos, usada pelo ECS serviço da Amazon para este tutorial. O valor REPOSITORY_URI
corresponde ao repositório image
(sem nenhuma tag de imagem) e o valor
próximo do final do arquivo corresponde ao nome do contêiner na definição de tarefa do serviço. hello-world
Para adicionar um arquivo buildspec.yml
ao repositório de origem
-
Abra um editor de texto e, em seguida, copie e cole a especificação de compilação acima em um novo arquivo.
-
Substitua o
REPOSITORY_URI
valor (
) pelo seu ECR repositório Amazon URI (sem nenhuma tag de imagem) para sua imagem do Docker. Substitua012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world
pelo nome do contêiner na definição de tarefa do serviço que se refere à imagem de docker.hello-world
-
Confirme e envie o arquivo
buildspec.yml
para o repositório de origem.-
Adicione o arquivo.
git add .
-
Confirme a alteração.
git commit -m "Adding build specification."
-
Envie a confirmação.
git push
-
Etapa 2: Criar uma pipeline de implantação contínua
Use o CodePipeline assistente para criar seus estágios de funil e conectar seu repositório de origem ao seu ECS serviço.
Para criar o pipeline
Abra o CodePipeline console em https://console.aws.amazon.com/codepipeline/
. -
Na página Bem-vindo, escolha Criar pipeline.
Se for a primeira vez que você usa CodePipeline, uma página introdutória será exibida em vez de Bem-vindo. Escolha Get Started Now (Começar agora).
-
Na página Etapa 1: Nome, em Nome do funil, digite o nome do seu funil. Para este tutorial, o nome do pipeline é hello-world.
-
Em Tipo de pipeline, escolha V2. Para obter mais informações, consulte Tipos de pipeline. Escolha Próximo.
-
Na página Etapa 2: Adicionar estágio de origem, em Provedor de origem, escolha AWS CodeCommit.
-
Em Nome do repositório, escolha o nome do CodeCommit repositório a ser usado como local de origem do seu pipeline.
-
Em Branch name (Nome da ramificação), escolha a ramificação a ser usada e selecione Next (Próximo).
-
-
Na página Etapa 3: Adicionar estágio de compilação em Provedor de compilação, escolha AWS CodeBuild e selecione Criar projeto.
-
Em Project name, escolha um nome exclusivo para seu projeto de compilação. Para este tutorial, o nome do projeto é hello-world.
-
Em Environment image (Imagem do ambiente), escolha Managed image (Imagem gerenciada).
-
Em Operating system (Sistema operacional), escolha Amazon Linux 2.
-
Em Runtime(s) (Tempos de execução), selecione Standard (Padrão).
-
Em Imagem, escolha
aws/codebuild/amazonlinux2-x86_64-standard:3.0
. -
Em Image version (Versão da imagem) e Environment type (Tipo de ambiente), use os valores padrão.
-
Selecione Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Ativar este sinalizador se quiser criar imagens do Docker ou desejar que suas compilações obtenham privilégios elevados).
-
Desmarque os CloudWatch registros. Talvez seja necessário expandir Avançado.
-
Escolha Continuar para CodePipeline.
-
Escolha Próximo.
nota
O assistente cria uma função CodeBuild de serviço para seu projeto de compilação, chamada codebuild-
build-project-name
-função de serviço. Anote o nome dessa função à medida que você adiciona ECR permissões da Amazon a ela posteriormente.
-
-
Na página Etapa 4: Adicionar estágio de implantação, em Provedor de implantação, escolha Amazon ECS.
-
Em Nome do cluster, escolha o ECS cluster da Amazon no qual seu serviço está sendo executado. Para este tutorial, o cluster é default.
-
Em Service name (Nome do serviço), escolha o serviço a ser atualizado e selecione Next (Próximo). Para este tutorial, o nome do serviço é hello-world.
-
-
Na página Step 5: Review (Etapa 5: revisar), revise a configuração do pipeline e escolha Create pipeline (Criar pipeline) para criá-lo.
nota
Agora que o pipeline foi criado, ele tentará passar pelos diferentes estágios de pipeline. No entanto, a CodeBuild função padrão criada pelo assistente não tem permissões para executar todos os comandos contidos no
buildspec.yml
arquivo, portanto, o estágio de criação falha. A próxima seção adiciona as permissões para o estágio de compilação.
Etapa 3: Adicionar ECR permissões da Amazon à CodeBuild função
O CodePipeline assistente criou uma IAM função para o projeto de CodeBuild construção, chamada codebuild-build-project-name
-função de serviço. Para este tutorial, o nome é codebuild-hello-world-service-role. Como o buildspec.yml
arquivo faz chamadas para ECR API as operações da Amazon, a função deve ter uma política que permita permissões para fazer essas ECR chamadas da Amazon. O procedimento a seguir ajuda você a anexar as permissões adequadas à função.
Para adicionar ECR permissões da Amazon à CodeBuild função
Abra o IAM console em https://console.aws.amazon.com/iam/
. -
No painel de navegação à esquerda, escolha Roles.
-
Na caixa de pesquisa, digite codebuild- e escolha a função que foi criada pelo CodePipeline assistente. Neste tutorial, o nome da função é codebuild-hello-world-service-role.
-
Na página Summary (Resumo), escolha Attach policies (Associar políticas).
-
Selecione a caixa à esquerda da EC2ContainerRegistryPowerUser política da Amazon e escolha Anexar política.
Etapa 4: Testar o pipeline
Seu pipeline deve ter tudo para executar uma implantação AWS contínua end-to-end nativa. Agora, teste a funcionalidade enviando uma alteração de código ao repositório de origem.
Para testar o pipeline
-
Faça uma alteração no código no repositório de origem configurado, confirme e envie a alteração.
Abra o CodePipeline console em https://console.aws.amazon.com/codepipeline/
. -
Escolha o pipeline na lista.
-
Observe a evolução do pipeline pelos respectivos estágios. Seu pipeline deve ser concluído e seu ECS serviço da Amazon executa a imagem do Docker que foi criada a partir da alteração do código.