Tutorial: Implantar uma aplicação no Amazon ECS
Neste tutorial, você aprende a implantar uma aplicação sem servidor no Amazon Elastic Container Service (Amazon ECS) usando um fluxo de trabalho, o Amazon ECS e alguns outros serviços da AWS. A aplicação implantada é um site simples do Hello World construído em uma imagem do Docker do servidor da Web Apache. O tutorial explica o trabalho de preparação necessário, como a configuração de um cluster, e descreve como criar um fluxo de trabalho para criar e implantar a aplicação.
dica
Em vez de seguir este tutorial, você pode usar um esquema que faz uma configuração completa do Amazon ECS para você. Você precisará usar o esquema API Node.js com AWS Fargate ou API Java com AWS Fargate. Para ter mais informações, consulte Criar um projeto com um esquema.
Tópicos
- Pré-requisitos
- Etapa 1: configurar um usuário da AWS e AWS CloudShell
- Etapa 2: implantar uma aplicação de espaço reservado no Amazon ECS
- Etapa 3: criar uma imagem de repositório do Amazon ECR
- Etapa 4: criar perfis da AWS
- Etapa 5: adicionar perfis da AWS ao CodeCatalyst
- Etapa 6: criar um repositório de origem
- Etapa 7: adicionar arquivos de origem
- Etapa 8: criar e executar um fluxo de trabalho
- Etapa 9: realizar uma alteração nos arquivos de origem
- Limpeza
Pré-requisitos
Antes de começar
-
Você precisa de um espaço do CodeCatalyst com uma conta da AWS conectada. Para ter mais informações, consulte Criar um espaço.
-
Em seu espaço, você precisa de um projeto vazio chamado:
codecatalyst-ecs-project
Use a opção Começar do zero para criar esse projeto.
Para ter mais informações, consulte Criação de um projeto vazio no Amazon CodeCatalyst.
-
Em seu projeto, você precisa de um ambiente do CodeCatalyst chamado:
codecatalyst-ecs-environment
Configure esse ambiente da seguinte forma:
-
Escolha qualquer tipo, como Não produção.
-
Conecte sua conta da AWS a ele.
-
Para o Perfil do IAM padrão, escolha qualquer perfil. Você especificará um perfil diferente posteriormente.
Para ter mais informações, consulte Implantação em Contas da AWS e VPCs.
-
Etapa 1: configurar um usuário da AWS e AWS CloudShell
A primeira etapa deste tutorial é criar um usuário no AWS IAM Identity Center e executar uma instância do AWS CloudShell como esse usuário. Durante este tutorial, o CloudShell é seu computador de desenvolvimento e é onde você configura recursos e serviços da AWS. Exclua esse usuário depois de concluir o tutorial.
nota
Não use seu usuário-raiz neste tutorial. Você deve criar um usuário separado; caso contrário, poderá ter problemas ao executar ações no AWS Command Line Interface (CLI) posteriormente.
Para ter mais informações sobre os usuários do IAM Identity Center e o CloudShell, consulte o Guia do usuário do AWS IAM Identity Center e o Guia do usuário do AWS CloudShell.
Como criar um usuário do Centro de Identidade do IAM
Faça login no AWS Management Console e abra o console do AWS IAM Identity Center em https://console.aws.amazon.com/singlesignon/
. nota
Faça login usando a Conta da AWS que está conectada ao seu espaço do CodeCatalyst. Você pode verificar qual conta está conectada navegando até seu espaço e escolhendo a guia Contas da AWS. Para ter mais informações, consulte Criar um espaço.
-
No painel de navegação, escolha Usuários e depois Adicionar usuário.
-
Em Nome de usuário, digite:
CodeCatalystECSUser
-
Em Senha, selecione Gerar uma senha de uso único que você possa compartilhar com esse usuário.
-
Em Endereço de e-mail e Confirmar endereço de e-mail, insira um endereço de e-mail que ainda não exista no IAM Identity Center.
-
Em Nome e Sobrenome, digite:
CodeCatalystECSUser
-
Em Nome de exibição, mantenha o nome gerado automaticamente:
CodeCatalystECSUser CodeCatalystECSUser
-
Escolha Próximo.
-
Na página Adicionar usuário a grupos, selecione Avançar.
-
Na página Revisar e adicionar usuário, revise as informações e selecione Adicionar usuário.
Uma caixa de diálogo Senha de uso único é exibida.
-
Selecione Copiar e cole as informações de login, incluindo o URL do portal de acesso da AWS e a senha de uso único.
-
Escolha Fechar.
Para criar um conjunto de permissões
Você atribuirá esse conjunto de permissões a CodeCatalystECSUser
posteriormente.
-
No painel de navegação, escolha Conjuntos de permissões e selecione Criar conjunto de permissões.
-
Selecione Conjunto de permissões predefinido e AdministratorAccess. Esta política fornece permissões totais para todos os Serviços da AWS.
-
Escolha Próximo.
-
Em Nome do conjunto de permissões, digite:
CodeCatalystECSPermissionSet
-
Escolha Próximo.
-
Na página Revisar e criar, revise as informações e selecione Criar.
Para atribuir o conjunto de permissões a CodeCatalystECSUser
-
No painel de navegação, selecione Contas da AWS e marque a caixa de seleção ao lado da Conta da AWS a que você está conectado no momento.
-
Escolha Atribuir usuários ou grupos.
-
Escolha a guia Users.
-
Marque a caixa de seleção ao lado dos logs do
CodeCatalystECSUser
. -
Escolha Próximo.
-
Marque a caixa de seleção ao lado dos logs do
CodeCatalystECSPermissionSet
. -
Escolha Próximo.
-
Revise suas informações e selecione Enviar.
Agora você atribuiu
CodeCatalystECSUser
eCodeCatalystECSPermissionSet
à sua Conta da AWS, vinculando-os.
Para sair e entrar novamente como CodeCatalystECSUser
-
Antes de sair, verifique se você tem o URL do portal de acesso da AWS, o nome de usuário e a senha de uso único do
CodeCatalystECSUser
. Você deveria ter copiado essas informações para um editor de texto anteriormente.nota
Se você não tiver essas informações, acesse a página de detalhes do
CodeCatalystECSUser
no IAM Identity Center, selecione Redefinir senha, Gerar uma senha de uso único [...] e Redefinir senha novamente para exibir as informações na tela. -
Saia da AWS.
-
Cole a URL do portal de acesso da AWS na barra de endereço do seu navegador.
-
Faça login com o nome de usuário e a senha de uso único para
CodeCatalystECSUser
. -
Em Nova senha, insira uma senha e selecione Definir nova senha.
Uma caixa de Conta da AWS aparece na tela.
-
Selecione Conta da AWS e, depois, escolha o nome da Conta da AWS a que você atribuiu o usuário
CodeCatalystECSUser
e o conjunto de permissões. -
Ao lado de
CodeCatalystECSPermissionSet
, selecione Console de gerenciamento.O AWS Management Console aparece. Agora você está conectado como
CodeCatalystECSUser
com as permissões apropriadas.
Para iniciar uma instância do AWS CloudShell
-
Como
CodeCatalystECSUser
, na barra de navegação superior, escolha o ícone AWS ( ).A página principal do AWS Management Console é exibida.
-
Na barra de navegação superior, escolha o ícone AWS CloudShell ( ).
O CloudShell é aberto. Aguarde enquanto o ambiente do CloudShell é criado.
nota
Se você não vê o ícone do CloudShell, verifique se está em uma região compatível com o CloudShell. Este tutorial pressupõe que você esteja na região do Oeste dos EUA (Oregon).
Para verificar se a AWS CLI está instalada
-
No terminal do CloudShell, insira:
aws --version
-
Confira se uma versão é exibida.
A AWS CLI já está configurada para o usuário atual,
CodeCatalystECSUser
, portanto, não há necessidade de configurar chaves e credenciais de AWS CLI, como é normalmente o caso.
Etapa 2: implantar uma aplicação de espaço reservado no Amazon ECS
Nesta seção, você implanta manualmente uma aplicação de espaço reservado no Amazon ECS. Essa aplicação de espaço reservado será substituída pela aplicação Hello World implantada pelo fluxo de trabalho. A aplicação de espaço reservado é o Apache Web Server.
Para ter mais informações sobre o Amazon ECS, consulte o Guia do desenvolvedor do Amazon Elastic Container Service.
Conclua a série de procedimentos a seguir para implantar a aplicação de espaço reservado.
Como criar o perfil de execução de tarefas
Esse perfil concede ao Amazon ECS e AWS Fargate permissão para fazer chamadas de API em seu nome.
-
Crie uma política de confiança:
-
No AWS CloudShell, insira o seguinte comando:
cat > codecatalyst-ecs-trust-policy.json
Um prompt piscando aparece no terminal do CloudShell.
-
No prompt, insira o seguinte código:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Coloque o cursor após o último colchete (
}
). -
Pressione
Enter
e, depois,Ctrl+d
para salvar o arquivo e sair do cat.
-
-
Crie um perfil de execução de tarefas:
aws iam create-role \ --role-name codecatalyst-ecs-task-execution-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
-
Anexe a política
AmazonECSTaskExecutionRolePolicy
gerenciada pela AWS ao perfil:aws iam attach-role-policy \ --role-name codecatalyst-ecs-task-execution-role \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
-
Exiba os detalhes do perfil:
aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
-
Observe o valor
"Arn":
do perfil, por exemplo,arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
. Você precisará desse nome do recurso da Amazon (ARN) posteriormente.
Para criar um cluster do Amazon ECS
Esse cluster conterá a aplicação de espaço reservado Apache e, posteriormente, a aplicação Hello World.
-
Como
CodeCatalystECSUser
, no AWS CloudShell, crie um cluster vazio:aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
-
(Opcional) Verifique se o cluster foi criado:
aws ecs list-clusters
O ARN do cluster
codecatalyst-ecs-cluster
deve aparecer na lista, indicando uma criação bem-sucedida.
Para criar um arquivo de definição de tarefa
O arquivo de definição da tarefa indica a execução da imagem do Docker (httpd:2.4
) do servidor Web Apache 2.4
-
Como
CodeCatalystECSUser
, no AWS CloudShell, crie um arquivo de definição de tarefa:cat > taskdef.json
-
No prompt, cole o seguinte código:
{ "executionRoleArn": "
arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "family": "codecatalyst-ecs-task-def", "memory": "512", "networkMode": "awsvpc" }No código anterior, substitua
arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
pelo ARN do perfil de execução da tarefa que você anotou em Como criar o perfil de execução de tarefas.
-
Coloque o cursor após o último colchete (
}
). -
Pressione
Enter
e, depois,Ctrl+d
para salvar o arquivo e sair do cat.
Para registrar o arquivo definição de tarefa com o Amazon ECS
-
Como
CodeCatalystECSUser
, no AWS CloudShell, registre a definição de tarefa:aws ecs register-task-definition \ --cli-input-json file://taskdef.json
-
(Opcional) Verifique se a definição da tarefa foi registrada:
aws ecs list-task-definitions
A definição da tarefa
codecatalyst-ecs-task-def
deve aparecer na lista.
Para criar o serviço do Amazon ECS
O serviço Amazon ECS executa as tarefas (e os contêineres do Docker associados) da aplicação de espaço reservado Apache e, posteriormente, da aplicação Hello World.
-
Como
CodeCatalystECSUser
, mude para o console do Amazon Elastic Container Service, se você ainda não tiver feito isso. -
Selecione o cluster que você criou antes,
codecatalyst-ecs-cluster
. -
Na guia Serviços, selecione Criar.
-
Na página Criar, faça o seguinte:
-
Mantenha todas as configurações padrão, exceto as listadas a seguir.
-
Para Launch type (Tipo de inicialização), escolha FARGATE.
-
Em Definição de tarefa, na lista suspensa Família, escolha:
codecatalyst-ecs-task-def
-
Em Nome do serviço, digite:
codecatalyst-ecs-service
-
Em Tarefas desejadas, digite:
3
Neste tutorial, cada tarefa inicia um único contêiner do Docker.
-
Expanda a seção Rede.
-
Em VPC, escolha qualquer VPC.
-
Em Sub-redes, escolha qualquer sub-rede.
nota
Especifique somente uma sub-rede. Isso é tudo o que é necessário para este tutorial.
nota
Se você não tiver uma VPC e uma sub-rede, crie-as. Consulte Criar uma VPC e Criar uma sub-rede na VPC no Guia do usuário da Amazon VPC.
-
Em Grupo de segurança, selecione Criar um grupo de segurança e faça o seguinte:
-
Em Nome do grupo de segurança, digite:
codecatalyst-ecs-security-group
-
Em Descrição do grupo de segurança, digite:
CodeCatalyst ECS security group
-
Escolha Adicionar regra. Em Tipo, selecione HTTP e, em Origem, selecione Qualquer lugar.
-
-
Selecione Criar na parte inferior.
-
Aguarde enquanto o serviço é criado. Isso pode levar alguns minutos.
-
-
Escolha a guia Tarefas e escolha o botão de atualização. Verifique se as três tarefas têm a coluna Último status definida como Em execução.
(Opcional) Para verificar se a aplicação de espaço reservado Apache está em execução
-
Na guia Tarefas, escolha qualquer uma das três tarefas.
-
No campo IP público, escolha endereço aberto.
Uma página
It Works!
é exibida. Isso indica que o serviço Amazon ECS iniciou uma tarefa que executou um contêiner do Docker com a imagem do Apache.Neste ponto do tutorial, você implantou manualmente uma definição de cluster, serviço e tarefa do Amazon ECS, bem como uma aplicação de espaço reservado do Apache. Com todos esses itens prontos, agora você já pode criar um fluxo de trabalho que substituirá a aplicação de espaço reservado Apache pela aplicação Hello World do tutorial.
Etapa 3: criar uma imagem de repositório do Amazon ECR
Nesta seção, você cria um repositório de imagens privadas no Amazon Elastic Container Registry (Amazon ECR). Esse repositório armazena a imagem do Docker do tutorial que substituirá a imagem de espaço reservado do Apache que você implantou anteriormente.
Para obter mais informações sobre o Amazon ECR, consulte o Guia do usuário do Amazon Elastic Container Registry.
Para criar um repositório de imagens no Amazon ECR
-
Como
CodeCatalystECSUser
, no AWS CloudShell, crie um repositório vazio no Amazon ECR:aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
-
Exiba os detalhes do repositório do Amazon ECR:
aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
-
Observe o valor
“repositoryUri”:
, por exemplo,111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
.Você precisará dele mais tarde ao adicionar o repositório ao seu fluxo de trabalho.
Etapa 4: criar perfis da AWS
Nesta seção, você cria perfis do AWS IAM de que seu fluxo de trabalho do CodeCatalyst precisará para funcionar. Esses perfis são:
-
Perfil de criação — Concede à ação de criação do CodeCatalyst (no fluxo de trabalho) permissão para acessar sua conta da AWS e gravar no Amazon ECR e no Amazon EC2.
-
Perfil de implantação — Concede à ação Implantar no ECS do CodeCatalyst (no fluxo de trabalho) permissão para acessar sua conta da AWS, o Amazon ECS e alguns outros serviços da AWS.
Para ter informações sobre perfis do IAM, consulte Perfis do IAM no Guia do usuário do AWS Identity and Access Management.
nota
Para economizar tempo, você pode criar um único perfil, chamado CodeCatalystWorkflowDevelopmentRole-
, em vez dos dois perfis listados anteriormente. Para ter mais informações, consulte Criar o perfil CodeCatalystWorkflowDevelopmentRole-spaceName para a conta e o espaço. Entenda que o perfil spaceName
CodeCatalystWorkflowDevelopmentRole-
tem permissões bem amplas, o que pode representar um risco de segurança. Recomendamos que você use esse perfil apenas em tutoriais e em cenários em que a segurança seja menos preocupante. Este tutorial pressupõe que você esteja criando os dois perfis listados anteriormente.spaceName
Para criar os perfis de criação e implantação, você pode usar o AWS Management Console ou a AWS CLI.
Etapa 5: adicionar perfis da AWS ao CodeCatalyst
Nesta etapa, você adiciona o perfil de criação (codecatalyst-ecs-build-role
) e o perfil de implantação (codecatalyst-ecs-deploy-role
) à conexão da conta do CodeCatalyst em seu espaço.
Para adicionar perfis de criação e implantação à conexão da sua conta
-
Navegue até o seu espaço no CodeCatalyst.
-
Selecione Contas da AWS. Uma lista de conexões de conta é exibida.
-
Escolha a conexão de conta que representa a conta da AWS em que você criou os perfis de criação e implantação.
-
Selecione Gerenciar perfis no console de gerenciamento da AWS.
A página Adicionar perfil do IAM ao espaço do Amazon CodeCatalyst é exibida. Talvez seja necessário fazer login para acessá-la.
-
Selecione Adicionar um perfil existente que você criou no IAM.
Uma lista suspensa aparece. A lista exibe todos os perfis do IAM com uma política de confiança que inclui as entidades principais de serviço
codecatalyst-runner.amazonaws.com
ecodecatalyst.amazonaws.com
. -
Na lista suspensa, selecione
codecatalyst-ecs-build-role
e Adicionar perfil.nota
Se você vir
The security token included in the request is invalid
, pode ser porque você não tem as permissões corretas. Para corrigir esse problema, saia e faça login novamente na AWS com a conta da AWS que você usou ao criar seu espaço no CodeCatalyst. -
Escolha Adicionar perfil do IAM, selecione Adicionar um perfil existente que você criou no IAM e, na lista suspensa, escolha
codecatalyst-ecs-deploy-role
. Escolha Add role (adicionar função).Agora você adicionou os perfis de criação e implantação ao seu espaço.
-
Copie o valor do Nome de exibição do Amazon CodeCatalyst. Esse valor será necessário posteriormente, ao criar seu fluxo de trabalho.
Etapa 6: criar um repositório de origem
Nesta etapa, você cria um repositório de origem no CodeCatalyst. Esse repositório armazena os arquivos de origem do tutorial, como o arquivo de definição da tarefa.
Para ter mais informações sobre repositórios de origem, consulte Criar um repositório de origem.
Como criar um repositório de origem
Abra o console do CodeCatalyst em https://codecatalyst.aws/
. -
Navegue até o projeto,
codecatalyst-ecs-project
. -
No painel de navegação, selecione Código e, depois, selecione Repositórios de origem.
-
Escolha Adicionar repositório e selecione Criar repositório.
-
Em Nome do repositório, insira:
codecatalyst-ecs-source-repository
-
Escolha Criar.
Etapa 7: adicionar arquivos de origem
Nesta seção, você adiciona os arquivos de origem do Hello World ao seu repositório do CodeCatalyst, codecatalyst-ecs-source-repository
. Eles consistem em:
-
Um arquivo
index.html
- Exibe uma mensagem do Hello World no navegador. -
Um Dockerfile: descreve a imagem básica a ser usada para sua imagem do Docker e os comandos do Docker a serem aplicados a ela.
-
Um arquivo
taskdef.json
- Define a imagem do Docker a ser usada ao iniciar tarefas em seu cluster.
A estrutura de pastas é esta:
. |— public-html | |— index.html |— Dockerfile |— taskdef.json
nota
As instruções a seguir mostram como adicionar os arquivos usando o console do CodeCatalyst, mas você pode usar o Git se preferir. Para obter detalhes, consulte Clonar um repositório de origem.
index.html
O arquivo index.html
exibe uma mensagem do Hello World no navegador.
Como adicionar o arquivo index.html
-
No console do CodeCatalyst, acesse o repositório de origem,
codecatalyst-ecs-source-repository
. -
Em Arquivos, selecione Criar arquivo.
-
Em Nome do arquivo, insira:
public-html/index.html
Importante
Inclua o prefixo
public-html/
para criar uma pasta com o mesmo nome. Espera-se queindex.html
esteja nessa pasta. -
Na caixa de texto, insira o código a seguir:
<html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello World</h1> </body> </html>
-
Selecione Confirmar e, depois, escolha Confirmar novamente.
O
index.html
é adicionado ao seu repositório em uma pastapublic-html
.
Dockerfile
O Dockerfile descreve a imagem base do Docker a ser usada e os comandos do Docker a serem aplicados a ela. Para ter mais informações sobre o Dockerfile, consulte a Referência de Dockerfile
O Dockerfile especificado aqui indica o uso da imagem base do Apache 2.4 (httpd
). Também inclui instruções para copiar um arquivo fonte chamado index.html
para uma pasta no servidor Apache que serve páginas da Web. A instrução EXPOSE
no Dockerfile diz ao Docker que o contêiner está escutando na porta 80.
Para adicionar o Dockerfile
-
No repositório de origem, selecione Criar arquivo.
-
Em Nome do arquivo, insira:
Dockerfile
Não inclua uma extensão de arquivo.
Importante
O Dockerfile deve residir na pasta raiz do repositório. O comando
Docker build
do fluxo de trabalho espera que ele esteja lá. -
Na caixa de texto, insira o código a seguir:
FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80
-
Selecione Confirmar e, depois, escolha Confirmar novamente.
O Dockerfile é adicionado ao repositório.
taskdef.json
O arquivo taskdef.json
que você adiciona nessa etapa é o mesmo que você já especificou em Etapa 2: implantar uma aplicação de espaço reservado no Amazon ECS com a seguinte diferença:
Em vez de especificar um nome de imagem do Docker codificado no campo image:
(httpd:2.4
), a definição da tarefa aqui usa algumas variáveis para indicar a imagem: $REPOSITORY_URI
e $IMAGE_TAG
. Essas variáveis serão substituídas por valores reais gerados pela ação de criação do fluxo de trabalho quando você executar o fluxo de trabalho em uma etapa posterior.
Para saber detalhes sobre os parâmetros de definição de tarefa, consulte Parâmetros de definição de tarefa no Guia do desenvolvedor do Amazon Elastic Container Service.
Como adicionar o arquivo taskdef.json
-
No repositório de origem, selecione Criar arquivo.
-
Em Nome do arquivo, insira:
taskdef.json
-
Na caixa de texto, insira o código a seguir:
{ "executionRoleArn": "
arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role
", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", # The $REPOSITORY_URI and $IMAGE_TAG variables will be replaced # by the workflow at build time (see the build action in the # workflow) "image": $REPOSITORY_URI:$IMAGE_TAG, "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "codecatalyst-ecs-task-def" }No código anterior, substitua
arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role
pelo ARN do perfil de execução da tarefa que você anotou em Como criar o perfil de execução de tarefas.
-
Selecione Confirmar e, depois, escolha Confirmar novamente.
O arquivo
taskdef.json
é adicionado ao repositório.
Etapa 8: criar e executar um fluxo de trabalho
Nesta etapa, você cria um fluxo de trabalho que pega seus arquivos de origem, os cria em uma imagem do Docker e, depois, implanta a imagem no seu cluster do Amazon ECS. Essa implantação substitui a aplicação de espaço reservado Apache existente.
O fluxo de trabalho consiste nos seguintes blocos de compilação que são executados sequencialmente:
-
Um gatilho – Esse gatilho inicia a execução automática do fluxo de trabalho quando você envia uma alteração ao seu repositório de origem. Para ter mais informações sobre gatilhos, consulte Início da execução automática de um fluxo de trabalho usando gatilhos.
-
Uma ação de criação (
BuildBackend
) – No gatilho, a ação cria a imagem do Docker usando o Dockerfile e envia a imagem para o Amazon ECR. A ação de criação também atualiza otaskdef.json
com o valor de campoimage
correto e, depois, cria um artefato de saída desse arquivo. Esse artefato é usado como entrada para a ação de implantação, que será a seguir.Para ter mais informações sobre a ação de criação, consulte Criação com fluxos de trabalho.
-
Uma ação de implantação (
DeployToECS
): ao concluir a ação de criação, a ação de implantação procura o artefato de saída gerado pela ação de criação (TaskDefArtifact
), encontra otaskdef.json
dentro dele e o registra no seu serviço do Amazon ECS. Em seguida, o serviço segue as instruções no arquivotaskdef.json
para executar três tarefas do Amazon ECS – e os contêineres do Docker do Hello World associados – dentro do seu cluster do Amazon ECS.
Como criar um fluxo de trabalho
-
No console do CodeCatalyst, no painel de navegação, escolha CI/CD e Fluxos de trabalho.
-
Selecione Criar fluxo de trabalho.
-
Em Repositório de origem, selecione
codecatalyst-ecs-source-repository
. -
Em Ramificação, selecione
main
. -
Escolha Criar.
Exclua o código de amostra YAML.
-
Adicione o seguinte código YAML:
nota
No código YAML a seguir, você pode omitir as seções
Connections:
se quiser. Se você omitir essas seções, deverá garantir que o perfil especificado no campo Perfil do IAM padrão em seu ambiente inclua as permissões e as políticas de confiança dos dois perfis descritas em Etapa 5: adicionar perfis da AWS ao CodeCatalyst. Para ter mais informações sobre como configurar um ambiente com um perfil do IAM padrão, consulte Criar um ambiente.Name: codecatalyst-ecs-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name:
codecatalyst-ecs-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-ecs-build-role
Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value:111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
- Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --regionus-west-2
| docker login --username AWS --password-stdin111122223333.dkr.ecr.us-west-2.amazonaws.com
#build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in taskdef.json - Run: find taskdef.json -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find taskdef.json -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat taskdef.json # The output artifact will be a zip file that contains a task definition file. Outputs: Artifacts: - Name: TaskDefArtifact Files: - taskdef.json DeployToECS: DependsOn: - BuildBackend Identifier: aws/ecs-deploy@v1 Environment: Name:codecatalyst-ecs-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-ecs-deploy-role
Inputs: Sources: [] Artifacts: - TaskDefArtifact Configuration: region:us-west-2
cluster: codecatalyst-ecs-cluster service: codecatalyst-ecs-service task-definition: taskdef.jsonNo código anterior, substitua:
-
As duas instâncias do
codecatalyst-ecs-environment
pelo nome do ambiente em que você criou em Pré-requisitos. -
As duas instâncias da
codecatalyst-account-connection
pelo nome de exibição da conexão da sua conta. O nome de exibição pode ser um número. Para ter mais informações, consulte Etapa 5: adicionar perfis da AWS ao CodeCatalyst. -
codecatalyst-ecs-build-role
pelo nome do perfil de criação que você criou em Etapa 4: criar perfis da AWS. -
111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
(na propriedadeValue:
) pelo URI do repositório do Amazon ECR em que você criou em Etapa 3: criar uma imagem de repositório do Amazon ECR. -
111122223333.dkr.ecr.us-west-2.amazonaws.com
(no comandoRun: aws ecr
) pelo URI do repositório do Amazon ECR sem o sufixo da imagem (/codecatalyst-ecs-image-repo
). -
codecatalyst-ecs-deploy-role
pelo nome do perfil de implantação na qual você criou em Etapa 4: criar perfis da AWS. -
As duas instâncias de
us-west-2
pelo código de região da AWS. Para ver uma lista de códigos de região, consulte Endpoints regionais na Referência geral da AWS.
nota
Se você decidiu não criar perfis de criação e implantação, substitua
codecatalyst-ecs-build-role
ecodecatalyst-ecs-deploy-role
pelo nome do perfilCodeCatalystWorkflowDevelopmentRole-
. Para obter mais informações sobre essa função, consulte Etapa 4: criar perfis da AWS.spaceName
dica
Em vez de usar os comandos
find
esed
mostrados no código do fluxo de trabalho anterior para atualizar o nome do repositório e da imagem, você pode usar a ação de definição de tarefas Renderizar Amazon ECS para essa finalidade. Para ter mais informações, consulte Modificação de uma definição de tarefa do Amazon ECS. -
-
(Opcional) Selecione Validar para garantir que o código YAML seja válido antes de confirmar.
-
Escolha Commit (Confirmar).
-
Na caixa de diálogo Confirmar fluxo de trabalho, insira o seguinte:
-
Em Mensagem de confirmação, remova o texto e digite:
Add first workflow
-
Em Repositório, selecione
codecatalyst-ecs-source-repository
. -
Em Nome da ramificação, selecione a principal.
-
Escolha Commit (Confirmar).
Agora você criou um fluxo de trabalho. A execução de um fluxo de trabalho é iniciada automaticamente devido ao gatilho definido na parte superior do fluxo de trabalho. Especificamente, quando você confirmou (e enviou) o arquivo
workflow.yaml
ao repositório de origem, o gatilho iniciou a execução do fluxo de trabalho. -
Para visualizar o andamento da execução do fluxo de trabalho
-
No painel de navegação do console do CodeCatalyst, selecione CI/CD e Fluxos de trabalho.
-
Escolha o fluxo de trabalho que você acabou de criar,
codecatalyst-ecs-workflow
. -
Selecione BuildBackend para ver o andamento da criação.
-
Selecione DeployToECS para ver o andamento da implantação.
Para ter mais informações sobre como visualizar os detalhes da execução, consulte o Visualização do status e detalhes de execução do fluxo de trabalho.
Como verificar a implantação
-
Abra o console clássico do Amazon ECS em https://console.aws.amazon.com/ecs/
. -
Escolha seu cluster,
codecatalyst-ecs-cluster
. -
Escolha a guia Tasks (Tarefas).
-
Escolha qualquer uma das três tarefas.
-
No campo IP público, escolha endereço aberto.
Uma página “Hello World” aparece no navegador, indicando que o serviço Amazon ECS implantou a aplicação.
Etapa 9: realizar uma alteração nos arquivos de origem
Nesta seção, você faz uma alteração no arquivo index.html
no repositório de origem. Essa alteração faz com que o fluxo de trabalho crie uma nova imagem do Docker, a marque com um ID de confirmação, a envie por push ao Amazon ECR e a implante no Amazon ECS.
Para alterar o index.html
-
No console do CodeCatalyst, no painel de navegação, selecione Código e, depois, selecione Repositórios de origem e, depois, escolha seu repositório,
codecatalyst-ecs-source-repository
. -
Escolha
public-html
e, depois, escolhaindex.html
.O conteúdo de
index.html
aparece. -
Selecione a opção Editar.
-
Na linha 14, altere o texto
Hello World
paraTutorial complete!
. -
Selecione Confirmar e, depois, escolha Confirmar novamente.
A confirmação faz com que uma nova execução do fluxo de trabalho seja iniciada.
-
(Opcional) Acesse a página principal do repositório de origem, selecione Exibir confirmações e anote o ID da confirmação da alteração em
index.html
. -
Assista ao andamento da implantação:
-
No painel de navegação, escolha CI/CD e Fluxos de trabalho.
-
Escolha
codecatalyst-ecs-workflow
para ver a última execução. -
Escolha BuildBackend e DeployToECS para ver o andamento da execução do fluxo de trabalho.
-
-
Verifique se a aplicação foi atualizada, da seguinte forma:
-
Abra o console clássico do Amazon ECS em https://console.aws.amazon.com/ecs/
. -
Escolha seu cluster,
codecatalyst-ecs-cluster
. -
Escolha a guia Tasks (Tarefas).
-
Escolha qualquer uma das três tarefas.
-
No campo IP público, escolha endereço aberto.
Uma página
Tutorial complete!
é exibida.
-
-
(Opcional) Na AWS, mude para o console do Amazon ECR e verifique se a nova imagem do Docker foi marcada com o ID de confirmação da etapa 6.
Limpeza
Limpe os arquivos e serviços usados neste tutorial para evitar cobranças por eles.
No AWS Management Console, limpe nesta ordem:
-
No Amazon ECS, faça o seguinte:
-
Exclua
codecatalyst-ecs-service
. -
Exclua
codecatalyst-ecs-cluster
. -
Cancelar registro de
codecatalyst-ecs-task-definition
.
-
-
No Amazon ECR, exclua
codecatalyst-ecs-image-repo
. -
No Amazon EC2, exclua
codecatalyst-ecs-security-group
. -
No IAM Identity Center, exclua:
-
CodeCatalystECSUser
-
CodeCatalystECSPermissionSet
-
No console do CodeCatalyst, limpe da seguinte forma:
-
Exclua
codecatalyst-ecs-workflow
. -
Exclua
codecatalyst-ecs-environment
. -
Exclua
codecatalyst-ecs-source-repository
. -
Exclua
codecatalyst-ecs-project
.
Neste tutorial, você aprendeu como implantar uma aplicação em um serviço do Amazon ECS usando um fluxo de trabalho do CodeCatalyst e uma ação Implantar no Amazon ECS.