

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

# Amostras de serviços cruzados para CodeBuild
<a name="cross-service-samples"></a>

Você pode usar esses exemplos de serviços cruzados para fazer experiências com AWS CodeBuild:

[Exemplo do Amazon ECR](sample-ecr.md)  
Usa uma imagem do Docker em um repositório do Amazon ECR para usar o Apache Maven a fim de produzir um único arquivo JAR. As instruções de exemplo mostrarão como criar e enviar uma imagem do Docker para o Amazon ECR, criar um projeto Go, construir o projeto, executar o projeto e configurar permissões CodeBuild para permitir a conexão com o Amazon ECR.

[Exemplo do Amazon EFS](sample-efs.md)  
Mostra como configurar um arquivo buildspec para que um CodeBuild projeto seja montado e construído em um sistema de arquivos Amazon EFS. As instruções de exemplo mostrarão como criar uma Amazon VPC, um sistema de arquivos na Amazon VPC, criar e compilar um projeto que usa a Amazon VPC e, em seguida, analisar o arquivo e as variáveis do projeto gerados. 

[AWS CodePipeline amostras](sample-codepipeline.md)  
Mostra como usar AWS CodePipeline para criar uma compilação com compilações em lote, bem como várias fontes de entrada e vários artefatos de saída. Incluídos nesta seção estão exemplos de arquivos JSON que mostram estruturas de pipeline que criam compilações em lote com artefatos separados e artefatos combinados. É fornecido um exemplo adicional de JSON que mostra a estrutura do pipeline com várias origens de entrada e vários artefatos de saída.

[AWS Config amostra](how-to-integrate-config.md)  
Mostra como configurar AWS Config. Lista quais CodeBuild recursos são monitorados e descreve como pesquisar CodeBuild projetos em AWS Config. Os exemplos de instruções mostrarão os pré-requisitos para a integração AWS Config, as etapas de configuração AWS Config e as etapas para pesquisar CodeBuild projetos e dados. AWS Config

[Exemplo de notificações de compilação](sample-build-notifications.md)  
Usa o Apache Maven para produzir um único arquivo JAR. Envia uma notificação de compilação aos assinantes de um tópico do Amazon SNS. Os exemplos de instruções mostram como configurar permissões para que eles CodeBuild possam se comunicar com o Amazon SNS e CloudWatch como criar e identificar CodeBuild tópicos no Amazon SNS, como inscrever destinatários no tópico e como configurar regras no. CloudWatch

# 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)
}
```

# Exemplo do Amazon Elastic File System para AWS CodeBuild
<a name="sample-efs"></a>

 Talvez você queira criar suas AWS CodeBuild versões no Amazon Elastic File System, um serviço de arquivos compartilhado e escalável para instâncias do Amazon EC2. A capacidade de armazenamento com o Amazon EFS é elástica, portanto, aumenta ou diminui à medida que arquivos são adicionados e removidos. Ela tem uma interface simples de serviços da Web que pode ser usada para criar e configurar sistemas de arquivos. Ela também gerencia toda a infraestrutura de armazenamento de arquivos para você, para que você não precise se preocupar com a implantação, atualização nem com a manutenção das configurações do sistema de arquivos. Para obter mais informações, consulte [What is Amazon Elastic File System?](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) no *Guia do usuário do Amazon Elastic File System*. 

 Este exemplo mostra como configurar um CodeBuild projeto para que ele monte e, em seguida, crie um aplicativo Java em um sistema de arquivos Amazon EFS. Antes de começar, você deve ter um aplicativo Java pronto para ser construído e carregado em um bucket de entrada do S3 ou em um repositório AWS CodeCommit GitHub,, GitHub Enterprise Server ou Bitbucket. 

Os dados em trânsito para o sistema de arquivos estão criptografados. Para criptografar os dados em trânsito usando uma imagem diferente, consulte [Criptografar dados em trânsito](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html). 

**Topics**
+ [Use AWS CodeBuild com o Amazon Elastic File System](#sample-efs-high-level-steps)
+ [Solucionar problemas de integração do Amazon EFS](sample-efs-troubleshooting.md)

## Use AWS CodeBuild com o Amazon Elastic File System
<a name="sample-efs-high-level-steps"></a>

A amostra abrange as quatro etapas de alto nível necessárias para usar o Amazon EFS com AWS CodeBuild. Eles são: 

1. Crie uma nuvem privada virtual (VPC) em sua AWS conta. 

1. Crie um sistema de arquivos que usa essa VPC. 

1. Crie e construa um CodeBuild projeto que use a VPC. O CodeBuild projeto usa o seguinte para identificar o sistema de arquivos:
   +  Um identificador de sistema de arquivos exclusivo. Você escolhe o identificador ao especificar o sistema de arquivos no projeto de compilação.
   + O ID do sistema de arquivos. O ID é exibido quando você visualiza o sistema de arquivos no console do Amazon EFS.
   +  Um ponto de montagem. Este é um diretório no contêiner do Docker que monta o sistema de arquivos. 
   + Opções de montagem. Elas incluem os detalhes sobre como montar o sistema de arquivos.

1. Revise o projeto de compilação para garantir que os arquivos e variáveis corretos do projeto foram gerados.

**nota**  
 Um sistema de arquivos criado no Amazon EFS é compatível somente com as plataformas Linux. 

 

**Topics**
+ [Etapa 1: criar uma VPC usando CloudFormation](#sample-efs-create-vpc)
+ [Etapa 2: criar um sistema de arquivos do Amazon Elastic File System com a VPC](#sample-efs-create-efs)
+ [Etapa 3: criar um CodeBuild projeto para usar com o Amazon EFS](#sample-efs-create-acb)
+ [Etapa 4: revisar o projeto de compilação](#sample-efs-summary)

### Etapa 1: criar uma VPC usando CloudFormation
<a name="sample-efs-create-vpc"></a>

 Crie sua VPC com um CloudFormation modelo. 

1.  Siga as instruções de uso [CloudFormationModelo da VPC do](cloudformation-vpc-template.md) CloudFormation para criar uma VPC. 
**nota**  
 A VPC criada por esse CloudFormation modelo tem duas sub-redes privadas e duas sub-redes públicas. Use somente as sub-redes privadas quando usar o AWS CodeBuild para montar o sistema de arquivos criado no Amazon EFS. Se você usar uma das sub-redes públicas, a compilação falhará. 

1. Faça login no Console de gerenciamento da AWS e abra o console da Amazon VPC em. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1.  Escolha a VPC com a qual você criou. CloudFormation

1. Na guia **Description (Descrição)** anote o nome da sua VPC e do ID. Os dois serão necessários quando você criar o projeto do AWS CodeBuild posteriormente neste exemplo. 

### Etapa 2: criar um sistema de arquivos do Amazon Elastic File System com a VPC
<a name="sample-efs-create-efs"></a>

 Crie um sistema de arquivos Amazon EFS simples para esse exemplo usando a VPC criada anteriormente. 

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EFS em [ https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/).

1.  Escolha **Create file system (Criar sistema de arquivos)**. 

1.  Em **VPC**, escolha o nome da VPC que você anotou anteriormente neste exemplo. 

1.  Deixe as zonas de disponibilidade associadas às suas sub-redes selecionadas. 

1.  Escolha **Próxima etapa**. 

1.  Em **Adicionar tags**, para a chave **Nome**, em **Valor**, insira o nome do sistema de arquivos Amazon EFS. 

1.  Mantenha **Bursting** e **General Purpose (Uso geral)** selecionados como modos padrão de desempenho e de taxa de transferência e selecione **Next Step (Próxima etapa)**. 

1. Para **Configure client access (Configurar acesso de cliente)**, escolha **Next Step (Próxima etapa)**.

1.  Escolha **Criar sistema de arquivos**. 

1.  (Opcional) Recomendamos adicionar uma política ao sistema de arquivos Amazon EFS que imponha a criptografia de dados em trânsito. No console do Amazon EFS, escolha **Política do sistema de arquivos**, escolha **Editar**, selecione a caixa **Aplicar criptografia em trânsito para todos os clientes** e escolha **Salvar**.

### Etapa 3: criar um CodeBuild projeto para usar com o Amazon EFS
<a name="sample-efs-create-acb"></a>

 Crie um AWS CodeBuild projeto que use a VPC que você criou anteriormente neste exemplo. Quando a compilação for executada, ela montará o sistema de arquivos do Amazon EFS criado anteriormente. Depois, armazenará o arquivo .jar criado pelo aplicativo Java no diretório do ponto de montagem do sistema de arquivos.

1. Abra o AWS CodeBuild console em [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  No painel de navegação, escolha **Projetos de compilação** e, depois, **Criar projeto de compilação**. 

1.  Em **Nome do projeto**, digite um nome para o seu projeto. 

1.  Em **Provedor de origem**, escolha o repositório que contém o aplicativo Java que você deseja criar. 

1.  Insira informações, como uma URL do repositório, que CodeBuild usa para localizar seu aplicativo. As opções são diferentes para cada provedor de origem. Para obter mais informações, consulte [Choose source provider](create-project.md#create-project-source-provider). 

1.  Em **Environment image (Imagem do ambiente)**, escolha **Managed image (Imagem gerenciada)**. 

1.  Em **Operating system (Sistema operacional)**, escolha **Amazon Linux 2**. 

1. Em **Runtime(s) (Tempo(s) de execução)**, selecione **Standard (Padrão)**. 

1.  Em **Imagem**, escolha **aws/codebuild/amazonlinux-x86\$164-standard:4.0**. 

1.  Em **Environment type (Tipo de ambiente)**, escolha **Linux**. 

1.  Em **Função do serviço**, selecione **Nova função de serviço**. Em **Nome da função**, insira um nome para a função CodeBuild criada para você. 

1. Expanda **Configuração Adicional**.

1.  Selecione **Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Ativar este sinalizador se quiser criar imagens do Docker ou desejar que suas compilações obtenham privilégios elevados)**.
**nota**  
Por padrão, o daemon do Docker está habilitado para compilações não VPC. Se você quiser usar contêineres do Docker para compilações da VPC, consulte [Privilégio de tempo de execução e funcionalidades do Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site do Docker Docs e ative o modo privilegiado. Além disso, o Windows não é compatível com o modo privilegiado.

1.  Em **VPC**, escolha o ID do VPC. 

1.  Em **Sub-redes**, escolha uma ou mais sub-redes privadas associadas à VPC. É necessário usar sub-redes privadas em uma compilação que monta um sistema de arquivos Amazon EFS. Se você usar uma sub-rede pública, a compilação falhará. 

1.  Em **Security groups (Grupos de segurança)**, escolha o grupo de segurança padrão.

1.  Em **File systems (Sistemas de arquivo)**, insira as seguintes informações:
   + Em **Identifer (Identificador)**, insira um identificador exclusivo do sistema de arquivos. Deve ter menos de 129 caracteres e conter apenas caracteres alfanuméricos e sublinhados. O CodeBuild usa esse identificador para criar uma variável de ambiente que identifica o sistema de arquivos elástico. O formato da variável de ambiente é `CODEBUILD_<file_system_identifier>` em letras maiúsculas. Por exemplo, se você inserir `my_efs`, a variável de ambiente será `CODEBUILD_MY_EFS`. 
   + Para **ID**, escolha o ID do sistema de arquivos. 
   + (Opcional) Insira um diretório no sistema de arquivos. CodeBuild monta esse diretório. Se você deixar o **Directory path (Caminho do diretório)** em branco, o CodeBuild monta todo o sistema de arquivos. O caminho é relativo à raiz do sistema de arquivos. 
   + Em **Ponto de montagem**, digite o caminho absoluto do diretório no contêiner de compilação onde o sistema de arquivos é montado. Se esse diretório não existir, CodeBuild cria-o durante a compilação. 
   + (Opcional) Insira as opções de montagem. Se você deixar **as opções de montagem** em branco, CodeBuild usa suas opções de montagem padrão:

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     Para obter mais informações, consulte [Recommended NFS Mount Options](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html) no *Guia do usuário do Amazon Elastic File System*. 

1.  Em **Build specification (Criar especificação)**, escolha **Insert build commands (Inserir comandos de compilação)** e escolha **Switch to editor (Alternar para editor)**. 

1.  Insira os comandos buildspec a seguir no editor. Substitua `<file_system_identifier>` pelo identificador inserido na etapa 17. Use letras maiúsculas (por exemplo, `CODEBUILD_MY_EFS`).

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  Use os valores padrão para todas as outras configurações e, em seguida, escolha **Criar projeto de compilação**. Quando a compilação estiver concluída, a página do console para o projeto será exibida. 

1.  Selecione **Iniciar compilação**. 

### Etapa 4: revisar o projeto de compilação
<a name="sample-efs-summary"></a>



 Depois que seu AWS CodeBuild projeto for construído: 
+  Você terá um arquivo .jar criado pela aplicação Java criada para o sistema de arquivos Amazon EFS no diretório do ponto de montagem. 
+  Uma variável de ambiente que identifica o sistema de arquivos é criada usando o identificador de sistema de arquivos inserido quando o projeto foi criado. 

 Para obter mais informações, consulte [Mounting file systems](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html) no *Guia do usuário do Amazon Elastic File System*. 

# Solucionar problemas de integração do Amazon EFS
<a name="sample-efs-troubleshooting"></a>

A seguir estão os erros que você pode encontrar ao configurar o Amazon EFS com CodeBuild.

**Topics**
+ [CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Permissão negada](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Conexão redefinida pelo par](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR: erro inesperado do EC2: UnauthorizedOperation](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Permissão negada
<a name="sample-efs-troubleshooting.permission-denied"></a>

A autorização do IAM não é suportada para montar o Amazon EFS com CodeBuild. Se você estiver usando uma política personalizada do sistema de arquivos do Amazon EFS, precisará conceder acesso de leitura e gravação a todas as entidades principais do IAM. Por exemplo:

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR: falha na montagem de “127.0.0.1: /”. Conexão redefinida pelo par
<a name="sample-efs-troubleshooting.connection-reset"></a>

Há duas causas possíveis para esse erro:
+ A sub-rede CodeBuild VPC está em uma zona de disponibilidade diferente do destino de montagem do Amazon EFS. É possível resolver isso incluindo uma sub-rede da VPC na mesma zona de disponibilidade do destino de montagem do Amazon EFS.
+ O grupo de segurança não tem permissões para se comunicar com o Amazon EFS. É possível resolver isso adicionando uma regra de entrada para viabilizar todo o tráfego da VPC (adicione o bloco CIDR primário da VPC) ou do próprio grupo de segurança.

## VPC\$1CLIENT\$1ERROR: erro inesperado do EC2: UnauthorizedOperation
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

Esse erro ocorre quando todas as sub-redes em sua configuração de VPC para o CodeBuild projeto são sub-redes públicas. É necessário ter, pelo menos, uma sub-rede privada na VPC para garantir a conectividade de rede. 

# AWS CodePipeline amostras para CodeBuild
<a name="sample-codepipeline"></a>

Esta seção descreve exemplos de integrações entre CodePipeline e. CodeBuild


| Amostra | Description | 
| --- | --- | 
|  [Amostras de CodePipeline/CodeBuild integrações e compilações em lote](#sample-pipeline-batch)  |  Esses exemplos demonstram como usar AWS CodePipeline para criar um projeto de compilação que usa compilações em lote.  | 
|  [Amostra de uma CodePipeline/CodeBuild integração com várias fontes de entrada e artefatos de saída](#sample-pipeline-multi-input-output)  |  Este exemplo demonstra como usar AWS CodePipeline para criar um projeto de construção que usa várias fontes de entrada para criar vários artefatos de saída.  | 

## Amostras de CodePipeline/CodeBuild integrações e compilações em lote
<a name="sample-pipeline-batch"></a>

AWS CodeBuild suporta compilações em lote. Os exemplos a seguir demonstram como usar AWS CodePipeline para criar um projeto de compilação que usa compilações em lote.

Você pode usar um arquivo formatado em JSON que define a estrutura do seu pipeline e, em seguida, usá-lo com o AWS CLI para criar o pipeline. Para obter mais informações, consulte [AWS CodePipeline Pipeline structure reference](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) no *Guia do usuário do AWS CodePipeline *.

### Compilação em lote com artefatos individuais
<a name="sample-pipeline-batch.separate-artifacts"></a>

Use o arquivo JSON a seguir como exemplo de uma estrutura de pipeline que cria uma compilação em lote com artefatos separados. Para habilitar a criação em lote CodePipeline, defina o `BatchEnabled` parâmetro do `configuration` objeto como`true`.

```
{
  "pipeline": {
    "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
    "stages": [
      {
        "name": "Source",
        "actions": [
          {
            "inputArtifacts": [],
            "name": "Source1",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source1"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-input-bucket-name>",
              "S3ObjectKey": "my-source-code-file-name.zip"
            },
            "runOrder": 1
          },
          {
            "inputArtifacts": [],
            "name": "Source2",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source2"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-other-input-bucket-name>",
              "S3ObjectKey": "my-other-source-code-file-name.zip"
            },
            "runOrder": 1
          }
        ]
      },
      {
        "name": "Build",
        "actions": [
          {
            "inputArtifacts": [
              {
                "name": "source1"
              },
              {
                "name": "source2"
              }
            ],
            "name": "Build",
            "actionTypeId": {
              "category": "Build",
              "owner": "AWS",
              "version": "1",
              "provider": "CodeBuild"
            },
            "outputArtifacts": [
              {
                "name": "build1"
              },
              {
                "name": "build1_artifact1"
              },
              {
                "name": "build1_artifact2"
              },
              {
                "name": "build2_artifact1"
              },
              {
                "name": "build2_artifact2"
              }
            ],
            "configuration": {
              "ProjectName": "my-build-project-name",
              "PrimarySource": "source1",
              "BatchEnabled": "true"
            },
            "runOrder": 1
          }
        ]
      }
    ],
    "artifactStore": {
      "type": "S3",
      "location": "<AWS-CodePipeline-internal-bucket-name>"
    },
    "name": "my-pipeline-name",
    "version": 1
  }
}
```

Veja a seguir um exemplo de um arquivo CodeBuild buildspec que funcionará com essa configuração de pipeline.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
  secondary-artifacts:
    artifact1:
      files:
        - output_file
    artifact2:
      files:
        - output_file
```

Os nomes dos artefatos de saída especificados no arquivo JSON do pipeline devem coincidir com o identificador das compilações e dos artefatos definidos no arquivo buildspec. A sintaxe é *buildIdentifier* para os artefatos primários e *buildIdentifier* \$1 *artifactIdentifier* para os artefatos secundários.

Por exemplo, para o nome do artefato de saída`build1`, CodeBuild fará o upload do artefato primário de `build1` para o local de. `build1` Para o nome de saída`build1_artifact1`, CodeBuild fará o upload do artefato secundário `artifact1` de `build1` para o local de`build1_artifact1`, e assim por diante. Se somente um local de saída for especificado, o nome deverá ser *buildIdentifier* somente.

Depois que você criar o arquivo JSON, poderá criar o pipeline. Use o AWS CLI para executar o comando **create-pipeline** e passar o arquivo para o parâmetro. `--cli-input-json` Para obter mais informações, consulte [Create a pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) no *Guia do usuário do AWS CodePipeline *. 

### Compilação em lote com artefatos combinados
<a name="sample-pipeline-batch.combined-artifacts"></a>

Use o arquivo JSON a seguir como exemplo de uma estrutura de pipeline que cria uma compilação em lote com artefatos combinados. Para habilitar a criação em lote CodePipeline, defina o `BatchEnabled` parâmetro do `configuration` objeto como`true`. Para combinar os artefatos de compilação no mesmo local, defina o parâmetro `CombineArtifacts` do objeto `configuration` como `true`.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-input-bucket-name>",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-other-input-bucket-name>",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "output1 "
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1",
             "BatchEnabled": "true",
             "CombineArtifacts": "true"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "<AWS-CodePipeline-internal-bucket-name>"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

Veja a seguir um exemplo de um arquivo CodeBuild buildspec que funcionará com essa configuração de pipeline.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
```

Se os artefatos combinados estiverem habilitados para a construção em lote, haverá somente uma saída permitida. CodeBuild combinará os artefatos primários de todas as compilações em um único arquivo ZIP.

Depois que você criar o arquivo JSON, poderá criar o pipeline. Use o AWS CLI para executar o comando **create-pipeline** e passar o arquivo para o parâmetro. `--cli-input-json` Para obter mais informações, consulte [Criar um pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) no *Guia do usuário do AWS CodePipeline *. 

## Amostra de uma CodePipeline/CodeBuild integração com várias fontes de entrada e artefatos de saída
<a name="sample-pipeline-multi-input-output"></a>

Um AWS CodeBuild projeto pode usar mais de uma fonte de entrada. Ele também pode criar mais de um artefato de saída. Este exemplo demonstra como usar AWS CodePipeline para criar um projeto de construção que usa várias fontes de entrada para criar vários artefatos de saída. Para obter mais informações, consulte [Várias fontes de entrada e exemplos de artefatos de saída](sample-multi-in-out.md).

Você pode usar um arquivo formatado em JSON que define a estrutura do seu pipeline e, em seguida, usá-lo com o AWS CLI para criar o pipeline. Use o seguinte arquivo JSON como um exemplo de estrutura de pipeline que cria uma compilação com mais de uma origem de entrada e mais de um artefato de saída. Mais adiante neste exemplo, você verá como este arquivo especifica as várias entradas e saídas. Para obter mais informações, consulte a [referência da estrutura do CodePipeline pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) no *Guia AWS CodePipeline do usuário*.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "my-input-bucket-name",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "my-other-input-bucket-name",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "AWS CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "artifact1"
            },
            {
              "name": "artifact2"
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "AWS-CodePipeline-internal-bucket-name"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

 Neste arquivo JSON: 
+ Uma das suas origens de entrada deve ser designada como `PrimarySource`. Essa fonte é o diretório em que CodeBuild procura e executa seu arquivo buildspec. A palavra-chave `PrimarySource` é usada para especificar a fonte primária na `configuration` seção do CodeBuild estágio no arquivo JSON. 
+ Cada origem de entrada é instalada em seu próprio diretório. Esse diretório é armazenado na variável de ambiente interna `$CODEBUILD_SRC_DIR` para a origem principal e `$CODEBUILD_SRC_DIR_yourInputArtifactName` para todas as outras origens. Para o pipeline neste exemplo, os dois diretórios da origem de entrada são `$CODEBUILD_SRC_DIR` e `$CODEBUILD_SRC_DIR_source2`. Para obter mais informações, consulte [Variáveis de ambiente em ambientes de compilação](build-env-ref-env-vars.md). 
+ Os nomes dos artefatos de saída especificados no arquivo JSON do pipeline devem coincidir com os nomes dos artefatos secundários definidos no arquivo buildspec. Esse pipeline usa o arquivo buildspec a seguir: Para obter mais informações, consulte [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax). 

  ```
  version: 0.2
  
  phases:
    build:
      commands:
        - touch source1_file
        - cd $CODEBUILD_SRC_DIR_source2
        - touch source2_file
  
  artifacts:
    files:
      - '**/*'
    secondary-artifacts:
      artifact1:
        base-directory: $CODEBUILD_SRC_DIR
        files:
          - source1_file
      artifact2:
        base-directory: $CODEBUILD_SRC_DIR_source2
        files:
          - source2_file
  ```

 Depois que você criar o arquivo JSON, poderá criar o pipeline. Use o AWS CLI para executar o comando **create-pipeline** e passar o arquivo para o parâmetro. `--cli-input-json` Para obter mais informações, consulte [Criar um pipeline (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) no *Guia do usuário do AWS CodePipeline *. 

# AWS Config amostra com CodeBuild
<a name="how-to-integrate-config"></a>

AWS Config fornece um inventário de seus AWS recursos e um histórico das alterações de configuração desses recursos. AWS Config agora oferece suporte AWS CodeBuild como um AWS recurso, o que significa que o serviço pode rastrear seus CodeBuild projetos. Para obter mais informações sobre AWS Config, consulte [O que é AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) no *Guia do AWS Config desenvolvedor*.

Você pode ver as seguintes informações sobre CodeBuild recursos na página **Inventário de Recursos** no AWS Config console:
+ Uma linha do tempo de suas alterações de CodeBuild configuração.
+ Detalhes de configuração para cada CodeBuild projeto.
+ Relacionamentos com outros AWS recursos.
+ Uma lista de mudanças em seus CodeBuild projetos.

**Topics**
+ [Use CodeBuild com AWS Config](#how-to-integrate-config-run)
+ [Etapa 3: Exibir AWS CodeBuild dados no AWS Config console](#viewing-config-details)

## Use CodeBuild com AWS Config
<a name="how-to-integrate-config-run"></a>

Os procedimentos deste tópico mostram como configurar AWS Config e pesquisar CodeBuild projetos.

**Topics**
+ [Pré-requisitos](#how-to-create-a-build-project)
+ [Etapa 1: configurar AWS Config](#setup-config)
+ [Etapa 2: pesquisar AWS CodeBuild projetos](#lookup-projects)

### Pré-requisitos
<a name="how-to-create-a-build-project"></a>

Crie seu AWS CodeBuild projeto. Para instruções, consulte [Criar um projeto de compilação](create-project.md).

### Etapa 1: configurar AWS Config
<a name="setup-config"></a>
+ [Configuração do AWS Config (console)](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [Configuração do AWS Config (AWS CLI)](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

**nota**  
Depois de concluir a configuração, pode levar até 10 minutos para que você possa ver os AWS CodeBuild projetos no AWS Config console.

### Etapa 2: pesquisar AWS CodeBuild projetos
<a name="lookup-projects"></a>

1. Faça login no AWS Management Console e abra o AWS Config console em [https://console.aws.amazon.com/config.](https://console.aws.amazon.com/config) 

1. Na página **Inventário de recursos**, selecione **AWS CodeBuild Projeto** em **Tipo de recurso**. Role para baixo e marque a caixa de seleção **CodeBuilddo projeto**.

1. Escolha **Look up**.

1. Depois que a lista de CodeBuild projetos for adicionada, escolha o link do nome do CodeBuild projeto na coluna **Config timeline**.

## Etapa 3: Exibir AWS CodeBuild dados no AWS Config console
<a name="viewing-config-details"></a>

Ao pesquisar recursos na página **Inventário de recursos**, você pode escolher o AWS Config cronograma para ver detalhes sobre seu CodeBuild projeto. A página de detalhes de um recurso fornece informações sobre a configuração, os relacionamentos e o número de alterações feitas nesse recurso. 

Os blocos na parte superior da página são coletivamente chamados de cronograma. A linha do tempo mostra a data e a hora em que o registro foi feito.

Para obter mais informações, consulte [Visualização dos detalhes da configuração no AWS Config console](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource-console.html) no *Guia do AWS Config desenvolvedor*.

# Crie uma amostra de notificações para CodeBuild
<a name="sample-build-notifications"></a>

O Amazon CloudWatch Events tem suporte integrado para AWS CodeBuild. CloudWatch Eventos é um fluxo de eventos do sistema que descreve as mudanças em seus AWS recursos. Com CloudWatch os Eventos, você escreve regras declarativas para associar eventos de interesse às ações automatizadas a serem tomadas. Este exemplo usa o Amazon CloudWatch Events e o Amazon Simple Notification Service (Amazon SNS) para enviar notificações de compilação aos assinantes sempre que as compilações forem bem-sucedidas, falharem, passarem de uma fase de construção para outra ou qualquer combinação desses eventos.

**Importante**  
A execução dessa amostra pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças por CodeBuild e por AWS recursos e ações relacionados à Amazon CloudWatch e ao Amazon SNS. Para obter mais informações, consulte [CodeBuild preços, CloudWatch preços](https://aws.amazon.com/codebuild/pricing) [da Amazon](https://aws.amazon.com/cloudwatch/pricing) e preços do [Amazon SNS](https://aws.amazon.com/sns/pricing).

**Topics**
+ [Execute o exemplo de notificações de compilação](#sample-build-notifications-running)
+ [Referência do formato de entrada das notificações de compilação](sample-build-notifications-ref.md)

## Execute o exemplo de notificações de compilação
<a name="sample-build-notifications-running"></a>

Use o procedimento a seguir para executar o exemplo de notificações de compilação.

**Como executar este exemplo**

1. Se você já tem uma configuração de tópicos e assinou o Amazon SNS que deseja usar para este exemplo, vá para a etapa 4. Caso contrário, se você estiver usando um usuário do IAM em vez de uma conta AWS raiz ou um usuário administrador para trabalhar com o Amazon SNS, adicione a seguinte declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ao usuário (ou grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta AWS root. Essa declaração permite a visualização, a criação, a assinatura e o teste do envio de notificações a tópicos no Amazon SNS. As elipses (`...`) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses na política existente.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:CreateTopic",
                   "sns:GetTopicAttributes",
                   "sns:List*",
                   "sns:Publish",
                   "sns:SetTopicAttributes",
                   "sns:Subscribe"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.  
Para obter mais informações, consulte [Editing customer managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) ou a seção “To edit or delete an inline policy for a group, user, or role” em [Working with inline policies (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) no *Guia do usuário do IAM*.

1. Crie ou identifique um tópico no Amazon SNS. AWS CodeBuild usa CloudWatch Eventos para enviar notificações de criação para esse tópico por meio do Amazon SNS. 

   Para criar um tópico:

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

   1. Escolha **Criar tópico**. 

   1. Em **Create new topic (Criar novo tópico)**, em **Topic name (Nome do tópico)**, insira um nome para o tópico (por exemplo, **CodeBuildDemoTopic**). (Se escolher um nome diferente, substitua-o ao longo desse exemplo.) 

   1. Escolha **Criar tópico**.

   1. Na CodeBuildDemoTopic página **Detalhes do tópico:**, copie o valor do **ARN do tópico**. Você precisa desse valor na próxima etapa. 

        
![\[O valor do ARN do tópico.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/topic-arn.png)

      

   Para obter mais informações, consulte [Create a topic](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) no *Guia do desenvolvedor do SNS*.

1. Faça a assinatura de um ou mais destinatários para o tópico para que recebam notificações por e-mail. 

   Para fazer a assinatura de um destinatário para um tópico:

   1. Com o console do Amazon SNS aberto na etapa anterior, no painel de navegação, selecione **Assinaturas** e **Criar assinatura**.

   1. Em **Create subscription (Criar assinatura)**, em **Topic ARN (Tópico ARN)**, cole o ARN do tópico que você copiou da etapa anterior.

   1. Em **Protocolo**, escolha **E-mail**.

   1. Em **Endpoint**, insira o endereço de e-mail completo do destinatário. 

        
![\[A configuração da assinatura.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/create-subscription.png)

      

   1. Escolha **Criar assinatura**.

   1. O Amazon SNS envia um e-mail de confirmação de assinatura ao destinatário. Para começar a receber notificações por e-mail, o destinatário deve escolher o link **Confirm subscription** no e-mail de confirmação da assinatura. Assim que o destinatário clicar no link, se assinado com êxito, o Amazon SNS exibirá uma mensagem de confirmação no navegador web do destinatário.

   Para obter mais informações, consulte [Subscribe to a topic](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) no *Guia do desenvolvedor do Amazon SNS*.

1. Se você estiver usando um usuário em vez de uma conta AWS raiz ou um usuário administrador para trabalhar com CloudWatch Eventos, adicione a seguinte declaração (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* e*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) ao usuário (ou grupo do IAM ao qual o usuário está associado). Não é recomendável usar uma conta AWS root. Essa declaração é usada para permitir que o usuário trabalhe com CloudWatch Eventos. As elipses (`...`) são usadas para agilizar e para ajudá-lo a encontrar onde adicionar a declaração. Não remova nenhuma declaração e não digite essas elipses na política existente.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "events:*",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::*:role/Service*"
           }
       ]
   }
   ```

------
**nota**  
A entidade do IAM que modifica essa política deve ter permissão no IAM para alterar políticas.  
Para obter mais informações, consulte [Editing customer managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) ou a seção “To edit or delete an inline policy for a group, user, or role” em [Working with inline policies (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) no *Guia do usuário do IAM*.

1. Crie uma regra em CloudWatch Eventos. Para fazer isso, abra o CloudWatch console em [https://console.aws.amazon.com/cloudwatch](https://console.aws.amazon.com/cloudwatch).

1. No painel de navegação, em **Events**, escolha **Rules** e **Create rule**. 

1. Na **Step 1: Create rule page (página Etapa 1: criar regra)**, **Event Pattern (Padrão de evento)** e **Build event pattern to match events by service (Criar padrão de eventos para corresponder a eventos por serviço)** já devem estar selecionados. 

1. Em **Nome do serviço**, escolha **CodeBuild**. Em **Event Type (Tipo de evento)**, **All Events (Todos os eventos)** já deve estar selecionado.

1. O código a seguir deve ser exibido na **Event Pattern Preview (Visualização do padrão de evento)**:

   ```
   {
     "source": [ 
       "aws.codebuild"
     ]
   }
   ```

1. Escolha **Edit (Editar)** e substitua o código na **Event Pattern Preview (Visualização do padrão de evento)** por um dos dois padrões de regra a seguir.

   Esse primeiro padrão de regra aciona um evento quando uma compilação é iniciada ou concluída, para os projetos de compilação especificados no AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build State Change"
     ],
     "detail": {
       "build-status": [
         "IN_PROGRESS",
         "SUCCEEDED", 
         "FAILED",
         "STOPPED" 
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   Na regra anterior, faça as alterações no código a seguir conforme necessário.
   + Para acionar um evento quando uma compilação é iniciada ou concluída, deixe todos os valores conforme mostrado na matriz `build-status` ou remova a matriz `build-status` junto. 
   + Para acionar um evento somente quando uma compilação for concluída, remova `IN_PROGRESS` da matriz `build-status`. 
   + Para acionar um evento somente quando uma compilação é iniciada, remova todos os valores, exceto `IN_PROGRESS` da matriz `build-status`.
   + Para acionar eventos para todos os projetos de compilação, remova a matriz `project-name` junto.
   + Para acionar eventos apenas para projetos de compilação individuais, especifique o nome de cada projeto de compilação na matriz `project-name`. 

   Esse segundo padrão de regra aciona um evento sempre que uma compilação passa de uma fase de compilação para outra, para os projetos de compilação especificados no AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build Phase Change" 
     ],
     "detail": {
       "completed-phase": [
         "SUBMITTED",
         "PROVISIONING",
         "DOWNLOAD_SOURCE",
         "INSTALL",
         "PRE_BUILD",
         "BUILD",
         "POST_BUILD",
         "UPLOAD_ARTIFACTS",
         "FINALIZING"
       ],
       "completed-phase-status": [
         "TIMED_OUT",
         "STOPPED",
         "FAILED", 
         "SUCCEEDED",
         "FAULT",
         "CLIENT_ERROR"
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   Na regra anterior, faça as alterações no código a seguir conforme necessário.
   + Para acionar um evento para cada alteração na fase de compilação (que pode enviar até nove notificações para cada compilação), deixe todos os valores conforme mostrado na matriz `completed-phase` ou remova a matriz `completed-phase` junto.
   + Para acionar eventos apenas para alterações feitas na fase de compilação individuais, remova o nome de cada fase de compilação na matriz `completed-phase` para a qual você não deseja acionar um evento.
   + Para acionar um evento para cada alteração feita no status da fase de compilação, deixe todos os valores conforme mostrado na matriz `completed-phase-status` ou remova a matriz `completed-phase-status` junto.
   + Para acionar eventos apenas para alterações feitas no status da fase de compilação individuais, remova o nome de cada status da fase de compilação na matriz `completed-phase-status` para a qual você não deseja acionar um evento.
   + Para acionar eventos para todos os projetos de compilação, remova a matriz `project-name`.
   + Para acionar eventos para projetos de compilação individuais, especifique o nome de cada projeto de compilação na matriz `project-name`. 

   Para obter mais informações sobre padrões de eventos, consulte [Padrões de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html) no Guia EventBridge do usuário da Amazon.

   Para obter mais informações sobre a filtragem com padrões de eventos, consulte [Filtragem baseada em conteúdo com padrões de eventos no Guia](https://docs.aws.amazon.com/eventbridge/latest/userguide/content-filtering-with-event-patterns.html) do usuário da Amazon EventBridge .
**nota**  
Se quiser acionar eventos para alterações feitas no estado de compilação e alterações na fase de compilação, é necessário criar duas regras à parte: uma para alterações feitas no estado da compilação e outra para alterações feitas na fase de compilação. Se você tentar integrar ambas as regras em uma única, a regra combinada poderá produzir resultados inesperados ou deixar de funcionar em conjunto.

   Quando você tiver concluído a substituição do código, escolha **Save**.

1. Em **Targets**, escolha **Add target**. 

1. Na lista de destinos, escolha **SNS topic**. 

1. Em **Topic**, escolha o tópico que você identificou ou criou anteriormente. 

1. Expanda **Configure input** e escolha **Input Transformer**. 

1. Na caixa **Input Path (Caminho de entrada)**, digite um dos caminhos de entrada a seguir.

   Para uma regra com um valor `detail-type` de `CodeBuild Build State Change`, insira o seguinte.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
   ```

   Para uma regra com um valor `detail-type` de `CodeBuild Build Phase Change`, insira o seguinte.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
   ```

   Para obter outros tipos de informações, consulte [Referência do formato de entrada das notificações de compilação](sample-build-notifications-ref.md).

1. Na caixa **Input Template (Modelo de entrada)**, insira um dos modelos de entrada.

   Para uma regra com um valor `detail-type` de `CodeBuild Build State Change`, insira o seguinte.

   ```
   "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
   ```

   Para uma regra com um valor `detail-type` de `CodeBuild Build Phase Change`, insira o seguinte.

   ```
   "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
   ```

1. Escolha **Configure details (Configurar detalhes)**.

1. Na página **Step 2: Configure rule details (Etapa 2: configurar detalhes da regra)** insira um nome e uma descrição opcional. Em **State (Estado)**, deixe **Enabled (Habilitado)** selecionado.

1. Escolha **Criar regra**. 

1. Crie projetos de compilação, execute as compilações e exiba as informações de compilação.

1. Confirme se agora CodeBuild está enviando notificações de compilação com sucesso. Por exemplo, verifique se agora os e-mails de notificação de compilação estão em sua caixa de entrada.

Para alterar o comportamento de uma regra, no CloudWatch console, escolha a regra que você deseja alterar, escolha **Ações** e, em seguida, escolha **Editar**. Faça alterações na regra e escolha **Configure details (Configurar detalhes)** e **Update rule (Atualizar regra)**.

Para parar de usar uma regra para enviar notificações de compilação, no CloudWatch console, escolha a regra que você deseja parar de usar, escolha **Ações** e, em seguida, escolha **Desativar**.

Para excluir completamente uma regra, no CloudWatch console, escolha a regra que você deseja excluir, escolha **Ações** e, em seguida, escolha **Excluir**.

# Referência do formato de entrada das notificações de compilação
<a name="sample-build-notifications-ref"></a>

CloudWatch entrega notificações no formato JSON.

As notificações de alteração feita no estado da compilação usam o seguinte formato:

```
{
  "version": "0",
  "id": "c030038d-8c4d-6141-9545-00ff7b7153EX",
  "detail-type": "CodeBuild Build State Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:28Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "build-status": "SUCCEEDED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
         {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]
    },
    "current-phase": "COMPLETED",
    "current-phase-context": "[]",
    "version": "1"
  }
}
```

As notificações de alteração feita na fase de compilação usam o seguinte formato:

```
{
  "version": "0",
  "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX",
  "detail-type": "CodeBuild Build Phase Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:21Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "completed-phase": "COMPLETED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "completed-phase-context": "[]",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]  
    },
    "completed-phase-status": "SUCCEEDED",
    "completed-phase-duration-seconds": 4,
    "version": "1",
    "completed-phase-start": "Sep 1, 2017 4:14:21 PM",
    "completed-phase-end": "Sep 1, 2017 4:14:26 PM"
  }
}
```