

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

# Exemplo de Amazon ECR para CodeBuild
<a name="sample-ecr"></a>

Este exemplo usa uma imagem do Docker em um repositório de imagens do Amazon Elastic Container Registry (Amazon ECR) para compilar um exemplo do projeto Go.

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por AWS CodeBuild AWS recursos e ações relacionados ao Amazon S3 AWS KMS, CloudWatch Logs e Amazon ECR. Para obter mais informações, consulte [CodeBuild preços, preços](https://aws.amazon.com/codebuild/pricing) do [Amazon S3, preços, preços](https://aws.amazon.com/s3/pricing) da Amazon e [AWS Key Management Service preços](https://aws.amazon.com/kms/pricing) do [Amazon CloudWatch ](https://aws.amazon.com/cloudwatch/pricing) [Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Execute o exemplo do Amazon ECR](#sample-ecr-running)

## Execute o exemplo do Amazon ECR
<a name="sample-ecr-running"></a>

Use as instruções a seguir para executar a amostra do Amazon ECR para CodeBuild.

**Como executar este exemplo**

1. Para criar e enviar por push uma imagem do Docker para o repositório de imagens no Amazon ECR, siga as etapas na seção [Execute o exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md#sample-docker-running) do [Exemplo “Publicar imagem do Docker no Amazon ECR”](sample-docker.md).

1. Criar um projeto Go 

   1. Crie os arquivos conforme descrito nas [Arquivos do projeto Go](#sample-ecr-go-project-files) seções [Estrutura do projeto Go](#ecr-sample-go-project-file-structure) e deste tópico e, em seguida, carregue-os em um bucket de entrada do S3 ou em um AWS CodeCommit repositório do Bitbucket. GitHub 
**Importante**  
Não faça upload de `(root directory name)`, apenas dos arquivos dentro de `(root directory name)`.   
Se você estiver usando um bucket de entrada do S3, crie um arquivo ZIP que contenha os arquivos e envie-o para o bucket de entrada. Não adicione `(root directory name)` ao arquivo ZIP, apenas aos arquivos dentro de `(root directory name)`.

   1. Crie um projeto de compilação, execute a compilação e exiba as respectivas informações.

      Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

      ```
      {
        "name": "sample-go-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
        },
        "artifacts": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-output-bucket",
          "packaging": "ZIP",
          "name": "GoOutputArtifact.zip"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/standard:5.0",
          "computeType": "BUILD_GENERAL1_SMALL"
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name",
        "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
      }
      ```

   1. Para obter o artefato de saída de compilação, abra seu bucket de saída do S3.

   1. Faça o download do arquivo `GoOutputArtifact.zip` para seu computador ou instância local. Extraia o conteúdo do arquivo . Nesse conteúdo, procure o arquivo `hello`. 

1.  Se uma das afirmações a seguir for verdadeira, você deverá adicionar permissões ao seu repositório de imagens no Amazon ECR para que ele AWS CodeBuild possa inserir sua imagem do Docker no ambiente de criação. 
   +  Seu projeto usa CodeBuild credenciais para extrair imagens do Amazon ECR. Isso é indicado por um valor de `CODEBUILD` no atributo `imagePullCredentialsType` de seu `ProjectEnvironment`. 
   +  O projeto usa uma imagem do Amazon ECR entre contas. Nesse caso, o projeto deverá usar o perfil de serviço para extrair imagens do Amazon ECR. Para habilitar esse comportamento, defina o atributo `imagePullCredentialsType` de seu `ProjectEnvironment` como `SERVICE_ROLE`. 

   1. Abra o console do Amazon ECR em [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Na lista de nomes de repositório, escolha o nome do repositório que você criou ou selecionou.

   1. No painel de navegação, selecione **Permissions (Permissões)**, **Edit (Editar)** e **Add statement (Adicionar instrução)**.

   1. Em **Statement name (Nome da instrução)**, digite um identificador (por exemplo, **CodeBuildAccess**).

   1. Em **Effect (Efeito)**, deixe a opção **Allow (Permitir)** selecionada. Isso indica que você deseja permitir o acesso a outra conta da AWS .

   1. Em **Principal**, siga um dos seguintes procedimentos:
      + Se seu projeto usa CodeBuild credenciais para extrair uma imagem do Amazon ECR, em **Service principal**, insira. **codebuild.amazonaws.com** 
      + Se o seu projeto usa uma imagem do Amazon ECR entre contas, como **AWS conta IDs**, insira IDs as AWS contas às quais você deseja conceder acesso.

   1. Ignore a lista **All IAM entities**.

   1. **Em **Ação**, selecione as ações somente de extração: ecr:GetDownloadUrlForLayer, **ecr:** e **ecr:BatchGetImage.** BatchCheckLayerAvailability**

   1. Em **Condições**, adicione o seguinte:

      ```
      {
         "StringEquals":{
            "aws:SourceAccount":"<AWS-account-ID>",
            "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>"
         }
      }
      ```

   1. Escolha **Salvar**.

      Essa política é exibida em **Permissions (Permissões)**. O principal é a informação inserida em **Principal** na etapa 3 deste procedimento:
      + Se seu projeto usa CodeBuild credenciais para extrair uma imagem do Amazon ECR, `"codebuild.amazonaws.com"` aparece em Princípios de **serviço**.
      + **Se o seu projeto usa uma imagem do Amazon ECR entre contas, o ID da AWS conta à qual você deseja conceder acesso aparecerá em Conta AWS . IDs**

        O exemplo de política a seguir usa CodeBuild credenciais e uma imagem do Amazon ECR entre contas.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject",
                          "aws:SourceAccount": "111122223333"
                      }
                  }
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
      + Se seus projetos usam CodeBuild credenciais e você gostaria que eles tivessem acesso aberto ao repositório Amazon ECR, você pode omitir `Condition` as chaves e adicionar o seguinte exemplo de política. CodeBuild 

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              }
          ]
      }
      ```

------

1. Crie um projeto de compilação, execute a compilação e exiba suas informações.

   Se você usar o AWS CLI para criar o projeto de construção, a entrada formatada em JSON para o `create-project` comando poderá ser semelhante a essa. (Substitua os espaços reservados com seus próprios valores.)

   ```
   {
     "name": "amazon-ecr-sample-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
     },
     "artifacts": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-output-bucket",
       "packaging": "ZIP",
       "name": "GoOutputArtifact.zip"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Para obter o artefato de saída de compilação, abra seu bucket de saída do S3.

1. Faça o download do arquivo `GoOutputArtifact.zip` para seu computador ou instância local. Extraia o conteúdo do arquivo `GoOutputArtifact.zip`. Nesse conteúdo, procure o arquivo `hello`.

### Estrutura do projeto Go
<a name="ecr-sample-go-project-file-structure"></a>

Essa amostra pressupõe esta estrutura de diretório.

```
(root directory name)
├── buildspec.yml
└── hello.go
```

### Arquivos do projeto Go
<a name="sample-ecr-go-project-files"></a>

Esta amostra usa estes arquivos.

`buildspec.yml` (em `(root directory name)`)

```
version: 0.2

phases:
  install: 
   runtime-versions: 
     golang: 1.13 
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Go code
      - go build hello.go 
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - hello
```

`hello.go` (em `(root directory name)`)

```
package main
import "fmt"

func main() {
  fmt.Println("hello world")
  fmt.Println("1+1 =", 1+1)
  fmt.Println("7.0/3.0 =", 7.0/3.0)
  fmt.Println(true && false)
  fmt.Println(true || false)
  fmt.Println(!true)
}
```