

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

# Crie e envie imagens do Docker para o Amazon ECR usando GitHub Actions e Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Resumo
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Esse padrão explica como você pode criar GitHub fluxos de trabalho reutilizáveis para criar seu Dockerfile e enviar a imagem resultante para o Amazon Elastic Container Registry (Amazon ECR). O padrão automatiza o processo de criação de seus Dockerfiles usando o Terraform e o Actions. GitHub Isso minimiza a possibilidade de erros humanos e reduz consideravelmente o tempo de implantação.

Uma ação GitHub push para a ramificação principal do seu GitHub repositório inicia a implantação dos recursos. O fluxo de trabalho cria um repositório Amazon ECR exclusivo com base na combinação da GitHub organização e do nome do repositório. Em seguida, o fluxo envia a imagem do Dockerfile para o repositório do Amazon ECR.

## Pré-requisitos e limitações
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma GitHub conta ativa.
+ Um [GitHub repositório.](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ O Terraform, na versão 1 ou em versões posteriores, [instalado e configurado](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Um bucket do Amazon Simple Storage Service (Amazon S3) para o [backend do Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3).
+ Uma tabela do [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) para controle de bloqueio e consistência do estado do Terraform. A tabela deve ter uma chave de partição chamada `LockID`, do tipo `String`. Se isso não for configurado, o bloqueio de estado será desabilitado.
+ Um perfil do AWS Identity and Access Management (IAM) com permissões para configurar o backend do Amazon S3 para o Terraform. Para obter instruções de configuração, consulte a [documentação do Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Limitações**

Esse código reutilizável foi testado somente com GitHub Actions.

## Arquitetura
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Pilha de tecnologias de destino**
+ Repositório do Amazon ECR
+ GitHub Ações
+ Terraform

**Arquitetura de destino**

![\[Fluxo de trabalho para criar GitHub fluxos de trabalho reutilizáveis para criar Dockerfile e enviar imagens para o Amazon ECR.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


O diagrama ilustra o seguinte:

1. Um usuário adiciona modelos do Dockerfile e do Terraform ao repositório. GitHub 

2. Essas adições iniciam um fluxo de trabalho de GitHub ações.

3. O fluxo de trabalho verifica a existência de um repositório do Amazon ECR. Caso contrário, ele cria o repositório com base na GitHub organização e no nome do repositório.

4. O fluxo de trabalho cria o Dockerfile e envia a imagem para o repositório do Amazon ECR.

## Ferramentas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Serviço da Amazon**
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de contêiner, que é seguro, escalável e confiável.

**Outras ferramentas**
+ GitHub O [Actions](https://docs.github.com/en/actions) é integrado à GitHub plataforma para ajudar você a criar, compartilhar e executar fluxos de trabalho em seus GitHub repositórios. Você pode usar o GitHub Actions para automatizar tarefas como criar, testar e implantar seu código.
+ [O Terraform](https://developer.hashicorp.com/terraform/intro) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar a infraestrutura na nuvem e no local.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow).
+ Quando você cria GitHub ações, os arquivos do fluxo de trabalho do Docker são salvos na `/.github/workflows/` pasta desse repositório. O fluxo de trabalho desta solução encontra-se no arquivo [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ A pasta `e2e-test` disponibiliza um Dockerfile de amostra para referência e testes.

## Práticas recomendadas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Para obter as práticas recomendadas para a escrita de Dockerfiles, consulte a [documentação do Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Use um [endpoint da VPC para o Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). Os VPC endpoints são desenvolvidos pela AWS PrivateLink, uma tecnologia que permite que você acesse o Amazon APIs ECR de forma privada por meio de endereços IP privados. Para as tarefas do Amazon ECS que usam o tipo de execução do Fargate, o endpoint da VPC permite que a tarefa realize a extração de imagens privadas do Amazon ECR sem atribuir um endereço IP público à tarefa.

## Épicos
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Configurar o provedor e o repositório do OIDC GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o OpenID Connect. | Crie um provedor de OpenID Connect (OIDC) Você usará o provedor na política de confiança para o perfil do IAM usado nesta ação. Para obter instruções, consulte [Configuração do OpenID Connect na Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub na documentação. | Administrador da AWS, AWS DevOps, AWS geral | 
| Clone o GitHub repositório. | Clone o repositório GitHub [Docker ECR Actions Workflow](https://github.com/aws-samples/docker-ecr-actions-workflow) em sua pasta local:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps engenheiro | 

### Personalize o fluxo de trabalho GitHub reutilizável e implante a imagem do Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Personalize o evento que inicia o fluxo de trabalho do Docker. | O fluxo de trabalho desta solução encontra-se em [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). No momento, este script está configurado para implantar recursos quando recebe o evento `workflow_dispatch`. É possível personalizar esta configuração alterando o evento para `workflow_call` e chamando o fluxo de trabalho usando outro fluxo de trabalho principal. | DevOps engenheiro | 
| Personalize o fluxo de trabalho. | O arquivo [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) está configurado para criar um fluxo de trabalho dinâmico e reutilizável. GitHub Você pode editar esse arquivo para personalizar a configuração padrão ou pode passar os valores de entrada do console GitHub Actions se estiver usando o `workflow_dispatch` evento para iniciar a implantação manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps engenheiro | 
| Implante os modelos do Terraform. | O fluxo de trabalho implanta automaticamente os modelos do Terraform que criam o repositório Amazon ECR, com base no evento que você configurou. GitHub Estes modelos estão disponíveis como arquivos `.tf` no [diretório raiz do repositório do GitHub](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps engenheiro | 

## Solução de problemas
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Problemas ou erros ao configurar o Amazon S3 e o DynamoDB como o backend remoto do Terraform. | Siga as instruções apresentadas na [documentação do Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) para configurar as permissões necessárias nos recursos do Amazon S3 e do DynamoDB para a configuração do backend remoto. | 
| Não é possível executar ou iniciar o fluxo de trabalho com o evento `workflow_dispatch`. | O fluxo de trabalho que está configurado para realizar a implantação usando o evento `workflow_dispatch` funcionará apenas se o fluxo de trabalho também estiver configurado na ramificação principal. | 

## Recursos relacionados
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Reutilização de fluxos de trabalho (documentação](https://docs.github.com/en/actions/using-workflows/reusing-workflows)) GitHub 
+ [Acionando um fluxo de trabalho (documentação](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow)) GitHub 