

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

# Amostra do 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 JSON-formatted entrada para o `create-project` comando poderá ser semelhante a esta. (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 projeto usa uma imagem do Amazon ECR entre contas, para **IDs de conta da AWS **, insira os IDs das contas da AWS à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 IDs de **AWS conta**.

        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 JSON-formatted entrada para o `create-project` comando poderá ser semelhante a esta. (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)
}
```