Tutorial: Implantar uma aplicação no Amazon ECS - Amazon CodeCatalyst

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.

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
  1. 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.

  2. No painel de navegação, escolha Usuários e depois Adicionar usuário.

  3. Em Nome de usuário, digite:

    CodeCatalystECSUser
  4. Em Senha, selecione Gerar uma senha de uso único que você possa compartilhar com esse usuário.

  5. 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.

  6. Em Nome e Sobrenome, digite:

    CodeCatalystECSUser
  7. Em Nome de exibição, mantenha o nome gerado automaticamente:

    CodeCatalystECSUser CodeCatalystECSUser
  8. Escolha Próximo.

  9. Na página Adicionar usuário a grupos, selecione Avançar.

  10. 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.

  11. Selecione Copiar e cole as informações de login, incluindo o URL do portal de acesso da AWS e a senha de uso único.

  12. Escolha Fechar.

Para criar um conjunto de permissões

Você atribuirá esse conjunto de permissões a CodeCatalystECSUser posteriormente.

  1. No painel de navegação, escolha Conjuntos de permissões e selecione Criar conjunto de permissões.

  2. Selecione Conjunto de permissões predefinido e AdministratorAccess. Esta política fornece permissões totais para todos os Serviços da AWS.

  3. Escolha Próximo.

  4. Em Nome do conjunto de permissões, digite:

    CodeCatalystECSPermissionSet
  5. Escolha Próximo.

  6. Na página Revisar e criar, revise as informações e selecione Criar.

Para atribuir o conjunto de permissões a CodeCatalystECSUser
  1. 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.

  2. Escolha Atribuir usuários ou grupos.

  3. Escolha a guia Users.

  4. Marque a caixa de seleção ao lado dos logs do CodeCatalystECSUser.

  5. Escolha Próximo.

  6. Marque a caixa de seleção ao lado dos logs do CodeCatalystECSPermissionSet.

  7. Escolha Próximo.

  8. Revise suas informações e selecione Enviar.

    Agora você atribuiu CodeCatalystECSUser e CodeCatalystECSPermissionSet à sua Conta da AWS, vinculando-os.

Para sair e entrar novamente como CodeCatalystECSUser
  1. 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.

  2. Saia da AWS.

  3. Cole a URL do portal de acesso da AWS na barra de endereço do seu navegador.

  4. Faça login com o nome de usuário e a senha de uso único para CodeCatalystECSUser.

  5. Em Nova senha, insira uma senha e selecione Definir nova senha.

    Uma caixa de Conta da AWS aparece na tela.

  6. 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.

  7. 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
  1. Como CodeCatalystECSUser, na barra de navegação superior, escolha o ícone AWS ( AWS icon ).

    A página principal do AWS Management Console é exibida.

  2. Na barra de navegação superior, escolha o ícone AWS CloudShell ( CloudShell icon ).

    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
  1. No terminal do CloudShell, insira:

    aws --version
  2. 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.

  1. Crie uma política de confiança:

    1. No AWS CloudShell, insira o seguinte comando:

      cat > codecatalyst-ecs-trust-policy.json

      Um prompt piscando aparece no terminal do CloudShell.

    2. No prompt, insira o seguinte código:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    3. Coloque o cursor após o último colchete (}).

    4. Pressione Enter e, depois, Ctrl+d para salvar o arquivo e sair do cat.

  2. 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
  3. 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
  4. Exiba os detalhes do perfil:

    aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
  5. 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.

  1. Como CodeCatalystECSUser, no AWS CloudShell, crie um cluster vazio:

    aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
  2. (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, que é extraída do DockerHub.

  1. Como CodeCatalystECSUser, no AWS CloudShell, crie um arquivo de definição de tarefa:

    cat > taskdef.json
  2. 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.

  3. Coloque o cursor após o último colchete (}).

  4. 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
  1. Como CodeCatalystECSUser, no AWS CloudShell, registre a definição de tarefa:

    aws ecs register-task-definition \ --cli-input-json file://taskdef.json
  2. (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.

  1. Como CodeCatalystECSUser, mude para o console do Amazon Elastic Container Service, se você ainda não tiver feito isso.

  2. Selecione o cluster que você criou antes, codecatalyst-ecs-cluster.

  3. Na guia Serviços, selecione Criar.

  4. Na página Criar, faça o seguinte:

    1. Mantenha todas as configurações padrão, exceto as listadas a seguir.

    2. Para Launch type (Tipo de inicialização), escolha FARGATE.

    3. Em Definição de tarefa, na lista suspensa Família, escolha:

      codecatalyst-ecs-task-def

    4. Em Nome do serviço, digite:

      codecatalyst-ecs-service
    5. Em Tarefas desejadas, digite:

      3

      Neste tutorial, cada tarefa inicia um único contêiner do Docker.

    6. Expanda a seção Rede.

    7. Em VPC, escolha qualquer VPC.

    8. 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.

    9. Em Grupo de segurança, selecione Criar um grupo de segurança e faça o seguinte:

      1. Em Nome do grupo de segurança, digite:

        codecatalyst-ecs-security-group
      2. Em Descrição do grupo de segurança, digite:

        CodeCatalyst ECS security group
      3. Escolha Adicionar regra. Em Tipo, selecione HTTP e, em Origem, selecione Qualquer lugar.

    10. Selecione Criar na parte inferior.

    11. Aguarde enquanto o serviço é criado. Isso pode levar alguns minutos.

  5. 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
  1. Na guia Tarefas, escolha qualquer uma das três tarefas.

  2. 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
  1. Como CodeCatalystECSUser, no AWS CloudShell, crie um repositório vazio no Amazon ECR:

    aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
  2. Exiba os detalhes do repositório do Amazon ECR:

    aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
  3. 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-spaceName, 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 CodeCatalystWorkflowDevelopmentRole-spaceName 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.

Para criar os perfis de criação e implantação, você pode usar o AWS Management Console ou a AWS CLI.

AWS Management Console

Para criar os perfis de criação e implantação, conclua a série de procedimentos a seguir.

Como criar um perfil de criação
  1. Crie uma política para o perfil da seguinte maneira:

    1. Faça login no AWS.

    2. Abra o console do IAM em https://console.aws.amazon.com/iam/.

    3. No painel de navegação, escolha Policies.

    4. Escolha Criar política.

    5. Escolha a guia JSON.

    6. Exclua o código existente.

    7. Cole o seguinte código:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
      nota

      Na primeira vez em que o perfil for usado para executar ações de fluxo de trabalho, use o caractere curinga na declaração de política de recursos e defina o escopo da política com o nome do recurso depois que ele estiver disponível.

      "Resource": "*"
    8. Escolha Próximo: etiquetas.

    9. Selecione Next: Review (Próximo: revisar).

    10. Em Nome, insira:

      codecatalyst-ecs-build-policy
    11. Escolha Criar política.

      Agora você criou uma política de permissões.

  2. Crie o perfil de criação, da seguinte forma:

    1. No painel de navegação, escolha Perfis e Criar perfil.

    2. Selecione Política de confiança personalizada.

    3. Exclua a política de confiança personalizada existente.

    4. Adicione a política de confiança personalizada a seguir:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Escolha Próximo.

    6. Em Políticas de permissões, procure codecatalyst-ecs-build-policy e marque a caixa de seleção.

    7. Escolha Próximo.

    8. Em Nome do perfil, insira:

      codecatalyst-ecs-build-role
    9. Em Descrição do perfil, insira:

      CodeCatalyst ECS build role
    10. Selecione Criar função.

    Agora você criou um perfil de criação com uma política de permissões e uma política de confiança.

  3. Obtenha o ARN do perfil de criação, da seguinte forma:

    1. No painel de navegação, escolha Perfis.

    2. Na caixa de pesquisa, insira o nome do perfil que você acabou de criar (codecatalyst-ecs-build-role).

    3. Escolha o perfil na lista.

      A página Resumo do perfil é exibida.

    4. Na parte superior, copie o valor do ARN. Você precisará disso mais tarde.

Para criar um perfil de implantação
  1. Crie uma política para o perfil da seguinte maneira:

    1. Faça login no AWS.

    2. Abra o console do IAM em https://console.aws.amazon.com/iam/.

    3. No painel de navegação, escolha Policies.

    4. Escolha Criar política.

    5. Escolha a guia JSON.

    6. Exclua o código existente.

    7. Cole o seguinte código:

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      nota

      Na primeira vez em que o perfil for usado para executar ações de fluxo de trabalho, use o caractere curinga na declaração de política de recursos. Em seguida, você pode definir o escopo da política com o nome do recurso depois que ele estiver disponível.

      "Resource": "*"
    8. Escolha Próximo: etiquetas.

    9. Selecione Next: Review (Próximo: revisar).

    10. Em Nome, insira:

      codecatalyst-ecs-deploy-policy
    11. Escolha Criar política.

      Agora você criou uma política de permissões.

  2. Crie o perfil de implantação, da seguinte forma:

    1. No painel de navegação, escolha Perfis e Criar perfil.

    2. Selecione Política de confiança personalizada.

    3. Exclua a política de confiança personalizada existente.

    4. Adicione a política de confiança personalizada a seguir:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Escolha Próximo.

    6. Em Políticas de permissões, procure codecatalyst-ecs-deploy-policy e marque a caixa de seleção.

    7. Escolha Próximo.

    8. Em Nome do perfil, insira:

      codecatalyst-ecs-deploy-role
    9. Em Descrição do perfil, insira:

      CodeCatalyst ECS deploy role
    10. Selecione Criar função.

    Agora você criou um perfil de implantação com uma política de confiança.

  3. Obtenha o ARN do perfil de implantação, da seguinte forma:

    1. No painel de navegação, escolha Perfis.

    2. Na caixa de pesquisa, insira o nome do perfil que você acabou de criar (codecatalyst-ecs-deploy-role).

    3. Escolha o perfil na lista.

      A página Resumo do perfil é exibida.

    4. Na parte superior, copie o valor do ARN. Você precisará disso mais tarde.

AWS CLI

Para criar os perfis de criação e implantação, conclua a série de procedimentos a seguir.

Para criar uma política de confiança para os dois perfis

Como CodeCatalystECSUser, no AWS CloudShell, crie um arquivo de política de confiança:

  1. Crie o arquivo:

    cat > codecatalyst-ecs-trust-policy.json
  2. No prompt do terminal, cole o seguinte código:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  3. Coloque o cursor após o último colchete (}).

  4. Pressione Enter e, depois, Ctrl+d para salvar o arquivo e sair do cat.

Para criar a política de criação e o perfil de criação
  1. Crie a política de criação:

    1. Como CodeCatalystECSUser, no AWS CloudShell, crie um arquivo de política de criação:

      cat > codecatalyst-ecs-build-policy.json
    2. No prompt, insira o seguinte código:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
    3. Coloque o cursor após o último colchete (}).

    4. Pressione Enter e, depois, Ctrl+d para salvar o arquivo e sair do cat.

  2. Adicione a política de criação à AWS:

    aws iam create-policy \ --policy-name codecatalyst-ecs-build-policy \ --policy-document file://codecatalyst-ecs-build-policy.json
  3. Na saída do comando, observe o valor "arn":, por exemplo, arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy. Esse ARN será necessário posteriormente.

  4. Crie o perfil de criação e anexe a política de confiança a ele:

    aws iam create-role \ --role-name codecatalyst-ecs-build-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. Anexe a política de criação à função de criação:

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-build-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy

    Onde arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy é substituído pelo ARN da política de criação que você observou anteriormente.

  6. Exiba os detalhes do perfil de criação:

    aws iam get-role \ --role-name codecatalyst-ecs-build-role
  7. Observe o valor "Arn": do perfil, por exemplo, arn:aws:iam::111122223333:role/codecatalyst-ecs-build-role. Esse ARN será necessário posteriormente.

Para criar a política e o perfil de implantação
  1. Crie uma política de implantação:

    1. No AWS CloudShell, crie um arquivo de política de implantação:

      cat > codecatalyst-ecs-deploy-policy.json
    2. No prompt, insira o seguinte código:

      { "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
      nota

      Na primeira vez em que o perfil for usado para executar ações de fluxo de trabalho, use o caractere curinga na declaração de política de recursos e defina o escopo da política com o nome do recurso depois que ele estiver disponível.

      "Resource": "*"
    3. Coloque o cursor após o último colchete (}).

    4. Pressione Enter e, depois, Ctrl+d para salvar o arquivo e sair do cat.

  2. Adicione a política de implantação à AWS:

    aws iam create-policy \ --policy-name codecatalyst-ecs-deploy-policy \ --policy-document file://codecatalyst-ecs-deploy-policy.json
  3. Na saída do comando, observe o valor "arn": da política de implantação, por exemplo, arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy. Esse ARN será necessário posteriormente.

  4. Crie o perfil de implantação e anexe a política de confiança a ele:

    aws iam create-role \ --role-name codecatalyst-ecs-deploy-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
  5. Anexe a política de implantação ao perfil de implantação, em que arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy é substituído pelo ARN da política de implantação que você observou anteriormente.

    aws iam attach-role-policy \ --role-name codecatalyst-ecs-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy
  6. Exiba os detalhes do perfil de implantação:

    aws iam get-role \ --role-name codecatalyst-ecs-deploy-role
  7. Observe o valor "Arn": do perfil, por exemplo, arn:aws:iam::111122223333:role/codecatalyst-ecs-deploy-role. Esse ARN será necessário posteriormente.

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
  1. Navegue até o seu espaço no CodeCatalyst.

  2. Selecione Contas da AWS. Uma lista de conexões de conta é exibida.

  3. Escolha a conexão de conta que representa a conta da AWS em que você criou os perfis de criação e implantação.

  4. 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.

  5. 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 e codecatalyst.amazonaws.com.

  6. 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.

  7. 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.

  8. 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
  1. Abra o console do CodeCatalyst em https://codecatalyst.aws/.

  2. Navegue até o projeto, codecatalyst-ecs-project.

  3. No painel de navegação, selecione Código e, depois, selecione Repositórios de origem.

  4. Escolha Adicionar repositório e selecione Criar repositório.

  5. Em Nome do repositório, insira:

    codecatalyst-ecs-source-repository
  6. 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
  1. No console do CodeCatalyst, acesse o repositório de origem, codecatalyst-ecs-source-repository.

  2. Em Arquivos, selecione Criar arquivo.

  3. 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 que index.html esteja nessa pasta.

  4. 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>
  5. Selecione Confirmar e, depois, escolha Confirmar novamente.

    O index.html é adicionado ao seu repositório em uma pasta public-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
  1. No repositório de origem, selecione Criar arquivo.

  2. 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á.

  3. 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
  4. 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
  1. No repositório de origem, selecione Criar arquivo.

  2. Em Nome do arquivo, insira:

    taskdef.json
  3. 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.

  4. 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 o taskdef.json com o valor de campo image 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 o taskdef.json dentro dele e o registra no seu serviço do Amazon ECS. Em seguida, o serviço segue as instruções no arquivo taskdef.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
  1. No console do CodeCatalyst, no painel de navegação, escolha CI/CD e Fluxos de trabalho.

  2. Selecione Criar fluxo de trabalho.

  3. Em Repositório de origem, selecione codecatalyst-ecs-source-repository.

  4. Em Ramificação, selecione main.

  5. Escolha Criar.

  6. Exclua o código de amostra YAML.

  7. 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 --region us-west-2 | docker login --username AWS --password-stdin 111122223333.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.json

    No 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 propriedade Value:) 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 comando Run: 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 e codecatalyst-ecs-deploy-role pelo nome do perfil CodeCatalystWorkflowDevelopmentRole-spaceName. Para obter mais informações sobre essa função, consulte Etapa 4: criar perfis da AWS.

    dica

    Em vez de usar os comandos find e sed 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.

  8. (Opcional) Selecione Validar para garantir que o código YAML seja válido antes de confirmar.

  9. Escolha Commit (Confirmar).

  10. Na caixa de diálogo Confirmar fluxo de trabalho, insira o seguinte:

    1. Em Mensagem de confirmação, remova o texto e digite:

      Add first workflow
    2. Em Repositório, selecione codecatalyst-ecs-source-repository.

    3. Em Nome da ramificação, selecione a principal.

    4. 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
  1. No painel de navegação do console do CodeCatalyst, selecione CI/CD e Fluxos de trabalho.

  2. Escolha o fluxo de trabalho que você acabou de criar, codecatalyst-ecs-workflow.

  3. Selecione BuildBackend para ver o andamento da criação.

  4. 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
  1. Abra o console clássico do Amazon ECS em https://console.aws.amazon.com/ecs/.

  2. Escolha seu cluster, codecatalyst-ecs-cluster.

  3. Escolha a guia Tasks (Tarefas).

  4. Escolha qualquer uma das três tarefas.

  5. 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
  1. 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.

  2. Escolha public-html e, depois, escolha index.html.

    O conteúdo de index.html aparece.

  3. Selecione a opção Editar.

  4. Na linha 14, altere o texto Hello World para Tutorial complete!.

  5. Selecione Confirmar e, depois, escolha Confirmar novamente.

    A confirmação faz com que uma nova execução do fluxo de trabalho seja iniciada.

  6. (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.

  7. Assista ao andamento da implantação:

    1. No painel de navegação, escolha CI/CD e Fluxos de trabalho.

    2. Escolha codecatalyst-ecs-workflow para ver a última execução.

    3. Escolha BuildBackend e DeployToECS para ver o andamento da execução do fluxo de trabalho.

  8. Verifique se a aplicação foi atualizada, da seguinte forma:

    1. Abra o console clássico do Amazon ECS em https://console.aws.amazon.com/ecs/.

    2. Escolha seu cluster, codecatalyst-ecs-cluster.

    3. Escolha a guia Tasks (Tarefas).

    4. Escolha qualquer uma das três tarefas.

    5. No campo IP público, escolha endereço aberto.

      Uma página Tutorial complete! é exibida.

  9. (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:

  1. No Amazon ECS, faça o seguinte:

    1. Exclua codecatalyst-ecs-service.

    2. Exclua codecatalyst-ecs-cluster.

    3. Cancelar registro de codecatalyst-ecs-task-definition.

  2. No Amazon ECR, exclua codecatalyst-ecs-image-repo.

  3. No Amazon EC2, exclua codecatalyst-ecs-security-group.

  4. No IAM Identity Center, exclua:

    1. CodeCatalystECSUser

    2. CodeCatalystECSPermissionSet

No console do CodeCatalyst, limpe da seguinte forma:

  1. Exclua codecatalyst-ecs-workflow.

  2. Exclua codecatalyst-ecs-environment.

  3. Exclua codecatalyst-ecs-source-repository.

  4. 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.