

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

# Compilações em cache para melhorar o desempenho
<a name="build-caching"></a>

Você pode economizar tempo quando seu projeto é compilado usando um cache. Um cache pode armazenar partes reutilizáveis do seu ambiente de build e usá-las em vários builds. O projeto de compilação pode usar um dos dois tipos de armazenamento em cache: Amazon S3 ou local. Se usar um cache local, você deverá escolher um ou mais dos três modos de cache: cache de origem, cache de camada do Docker e cache personalizado. 

**nota**  
O modo de cache de camada do Docker está disponível somente para o ambiente Linux. Se você escolher esse modo, deverá executar sua compilação no modo privilegiado. CodeBuild projetos com modo privilegiado concedem ao contêiner acesso a todos os dispositivos. Para obter mais informações, consulte [Runtime privilege and Linux capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site de documentação do Docker.

**Topics**
+ [Armazenamento em cache do Amazon S3](caching-s3.md)
+ [Armazenamento em cache local](caching-local.md)
+ [Especificar um cache local](specify-caching-local.md)

# Armazenamento em cache do Amazon S3
<a name="caching-s3"></a>

O armazenamento em cache do Amazon S3 armazena o cache em um bucket do Amazon S3 que está disponível em vários hosts de compilação. Esta é uma boa opção para artefatos de compilação pequenos a intermediários que são mais caras para criar do que para baixar.

Para usar o Amazon S3 em uma compilação, você pode especificar os caminhos para os arquivos nos quais deseja armazenar em cache. `buildspec.yml` CodeBuild armazenará e atualizará automaticamente o cache na localização do Amazon S3 configurada no projeto. Se você não especificar os caminhos do arquivo, CodeBuild fará o melhor possível para armazenar em cache as dependências de linguagem comum para ajudá-lo a acelerar as compilações. Você pode visualizar os detalhes do cache nos logs da compilação.

Além disso, se quiser ter várias versões de cache, você pode definir uma chave de cache no`buildspec.yml`. CodeBuild armazena o cache no contexto dessa chave de cache e cria uma cópia de cache exclusiva que não será atualizada depois de criada. As chaves de cache também podem ser compartilhadas entre projetos. Recursos como chaves dinâmicas, versionamento de cache e compartilhamento de cache entre compilações só estão disponíveis quando uma chave é especificada.

Para saber mais sobre a sintaxe do cache no arquivo buildspec, consulte [cache](build-spec-ref.md#build-spec.cache) na referência do buildspec.

**Topics**
+ [Gerar chaves dinâmicas](#caching-s3-dynamic)
+ [codebuild-hash-files](#caching-s3-dynamic.codebuild-hash-files)
+ [Versão do cache](#caching-s3-version)
+ [Compartilhamento de cache entre projetos](#caching-s3-sharing)
+ [Exemplo de buildspec](#caching-s3-examples)

## Gerar chaves dinâmicas
<a name="caching-s3-dynamic"></a>

Uma chave de cache pode incluir comandos de shell e variáveis de ambiente para torná-la única, permitindo atualizações automáticas de cache quando a chave é alterada. Por exemplo, é possível definir uma chave usando o hash do arquivo `package-lock.json`. Quando as dependências nesse arquivo mudam, o hash, e, portanto, a chave do cache, muda, acionando a criação automática de um novo cache.

```
cache:
    key: npm-key-$(codebuild-hash-files package-lock.json)
```

CodeBuild avaliará a expressão `$(codebuild-hash-files package-lock.json)` para obter a chave final:

```
npm-key-abc123
```

Você também pode definir uma chave de cache usando variáveis de ambiente, como `CODEBUILD_RESOLVED_SOURCE_VERSION`. Isso garante que sempre que a origem mudar, uma nova chave seja gerada, resultando em um novo cache sendo salvo automaticamente:

```
cache:
   key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION
```

CodeBuild avaliará a expressão e obterá a chave final:

```
npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369
```

## codebuild-hash-files
<a name="caching-s3-dynamic.codebuild-hash-files"></a>

`codebuild-hash-files`é uma ferramenta de CLI que calcula um hash SHA-256 para um conjunto de arquivos no diretório de origem usando padrões globais: CodeBuild 

```
codebuild-hash-files <glob-pattern-1> <glob-pattern-2> ...
```

Veja alguns exemplos usando a `codebuild-hash-files`:

```
codebuild-hash-files package-lock.json
codebuild-hash-files '**/*.md'
```

## Versão do cache
<a name="caching-s3-version"></a>

A versão do cache é um hash gerado a partir dos caminhos dos diretórios que estão sendo armazenados em cache. Se dois caches tiverem versões diferentes, eles serão tratados como caches distintos durante o processo de correspondência. Por exemplo, os dois caches a seguir são considerados diferentes porque fazem referência a caminhos diferentes:

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "pip-dependencies/**/*"
```

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target tmp/pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "tmp/pip-dependencies/**/*"
```

## Compartilhamento de cache entre projetos
<a name="caching-s3-sharing"></a>

É possível usar o campo da API `cacheNamespace` na seção `cache` para compartilhar um cache entre vários projetos. Esse campo define o escopo do cache. Para compartilhar um cache, faça o seguinte:
+ Use o mesmo`cacheNamespace`.
+ Especifique o mesmo cache `key`.
+ Defina caminhos de cache idênticos.
+ Use os mesmos buckets do Amazon S3 e `pathPrefix`, se definido.

Isso garante a consistência e permite o compartilhamento de cache entre projetos.

### Especificar um namespace de cache (console)
<a name="caching-s3-sharing.console"></a>

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

1. Escolha **Criar projeto**. Para obter informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console) e [Executar uma compilação (console)](run-build-console.md).

1. Em **Artefatos**, escolha **Configuração adicional**.

1. Em **Tipo de cache**, selecione **Amazon S3**.

1. Em **Namespace do cache: opcional**, insira um valor de namespace.  
![\[Parâmetro de namespace de cache no CodeBuild console.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. Continue com os valores padrão e escolha **Criar projeto de compilação**.

### Especificar um namespace do cache (AWS CLI)
<a name="caching-s3-sharing.cli"></a>

Você pode usar o `--cache` parâmetro the no AWS CLI para especificar um namespace de cache.

```
--cache '{"type": "S3", "location": "your-s3-bucket", "cacheNamespace": "test-cache-namespace"}'
```

## Exemplo de buildspec
<a name="caching-s3-examples"></a>

Aqui estão vários exemplos de buildspec para linguagens comuns:

**Topics**
+ [Dependências Node.js de cache](#caching-s3-examples.nodejs)
+ [Armazenar em cache as dependências do Python](#caching-s3-examples.python)
+ [Armazenar em cache as dependências do Ruby](#caching-s3-examples.ruby)
+ [Armazenar em cache as dependências do Go](#caching-s3-examples.go)

### Dependências Node.js de cache
<a name="caching-s3-examples.nodejs"></a>

Se o projeto inclui um arquivo `package-lock.json` e usa `npm` para gerenciar dependências do Node.js, o exemplo a seguir mostra como configurar o armazenamento em cache. Por padrão, `npm` instala dependências no diretório `node_modules`.

```
version: 0.2

phases:
  build:
    commands:
      - npm install
cache:
  key: npm-$(codebuild-hash-files package-lock.json)
  paths:
    - "node_modules/**/*"
```

### Armazenar em cache as dependências do Python
<a name="caching-s3-examples.python"></a>

Se o projeto inclui um arquivo `requirements.txt` e usa pip para gerenciar dependências do Python, o exemplo a seguir demonstra como configurar o armazenamento em cache. Por padrão, o pip instala pacotes no diretório `site-packages` do sistema.

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "/root/.pyenv/versions/${python_version}/lib/python${python_major_version}/site-packages/**/*"
```

Além disso, é possível instalar dependências em um diretório específico e configurar o armazenamento em cache para esse diretório.

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt --target python-dependencies
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "python-dependencies/**/*"
```

### Armazenar em cache as dependências do Ruby
<a name="caching-s3-examples.ruby"></a>

Se o projeto inclui um arquivo `Gemfile.lock` e usa `Bundler` para gerenciar dependências de gem, o exemplo a seguir demonstra como configurar o armazenamento em cache com eficácia.

```
version: 0.2

phases:
  build:
    commands:
      - bundle install --path vendor/bundle
cache:
  key: ruby-$(codebuild-hash-files Gemfile.lock)
  paths:
    - "vendor/bundle/**/*"
```

### Armazenar em cache as dependências do Go
<a name="caching-s3-examples.go"></a>

Se o projeto inclui um arquivo `go.sum` e usa módulos do Go para gerenciar dependências, o exemplo a seguir demonstra como configurar o armazenamento em cache. Por padrão, os módulos do Go são baixados e armazenados no diretório `${GOPATH}/pkg/mod`.

```
version: 0.2

phases:
  build:
    commands:
      - go mod download
cache:
  key: go-$(codebuild-hash-files go.sum)
  paths:
    - "/go/pkg/mod/**/*"
```

# Armazenamento em cache local
<a name="caching-local"></a>

O armazenamento em cache local armazena um cache localmente em um host de compilação que está disponível somente para esse host de compilação. Esta é uma boa opção para artefatos de compilação grandes a intermediários porque o cache fica imediatamente disponível no host de compilação. Essa não é a melhor opção se suas compilações são pouco frequentes. Isso significa que o desempenho da compilação não é afetado pelo tempo de transferência na rede.

Se optar por armazenamento em cache local, você deverá escolher um ou mais dos seguintes modos de cache: 
+ O modo de cache de origem armazena em cache os metadados do Git para origens principal e secundária. Depois que o cache é criado, as compilações subsequentes extraem somente a alteração entre as confirmações. Esse modo é uma boa opção para projetos com um diretório de trabalho limpo e uma origem que seja um grande repositório Git. Se você escolher essa opção e seu projeto não usar um repositório Git (AWS CodeCommit, GitHub, GitHub Enterprise Server ou Bitbucket), a opção será ignorada. 
+ O modo de cache da camada do Docker armazena as camadas do Docker existentes. Esse modo é uma boa opção para projetos que compilam ou extraem grandes imagens do Docker. Ele pode impedir os problemas de desempenho causados pela extração de grandes imagens do Docker da rede. 
**nota**  
Só é possível usar um cache de camada do Docker no ambiente Linux. 
O sinalizador `privileged` deve ser definido para que o projeto tenha as permissões necessárias do Docker.   
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.
Você deve considerar as implicações de segurança antes de usar um cache de camada do Docker. 
+ O modo de cache personalizado armazena em cache os diretórios que você especificar no arquivo buildspec. Esse modo é uma boa opção quando o cenário de compilação não é adequado para um dos dois outros modos de cache local. Se você usar um cache personalizado: 
  + Somente diretórios pode ser especificado para o armazenamento em cache. Não é possível especificar arquivos individuais. 
  + Symlinks são usados para fazer referência a diretórios armazenados em cache. 
  + Os diretórios em cache são vinculados à sua compilação antes que ela faça download de suas origens do projeto. Itens armazenados em cache substituem itens de origem se tiverem o mesmo nome. Os diretórios são especificados usando caminhos de cache no arquivo buildspec. Para obter mais informações, consulte [Sintaxe de buildspec](build-spec-ref.md#build-spec-ref-syntax). 
  + Evite nomes de diretório iguais na origem e no cache. Os diretórios armazenados em cache local podem substituir ou excluir o conteúdo de diretórios no repositório de origem que tenham o mesmo nome.

**nota**  
O armazenamento em cache local não é compatível com o tipo de ambiente `LINUX_GPU_CONTAINER` me o tipo de computação `BUILD_GENERAL1_2XLARGE`. Para obter mais informações, consulte [Modos e tipos de computação do ambiente de compilação](build-env-ref-compute-types.md).

**nota**  
O armazenamento em cache local não é suportado quando você configura CodeBuild para trabalhar com uma VPC. Para obter mais informações sobre como usar VPCs com CodeBuild, consulte[Use AWS CodeBuild com a Amazon Virtual Private Cloud](vpc-support.md).

# Especificar um cache local
<a name="specify-caching-local"></a>

Você pode usar o console AWS CLI, o SDK ou CloudFormation especificar um cache local. Para obter mais informações sobre armazenamento em cache local, consulte [Armazenamento em cache local](caching-local.md).

**Topics**
+ [Especificar o armazenamento em cache local (CLI)](#caching-local-cli)
+ [Especificar o armazenamento em cache local (console)](#caching-local-console)
+ [Especificar o armazenamento em cache local (CloudFormation)](#caching-local-cfn)

## Especificar o armazenamento em cache local (CLI)
<a name="caching-local-cli"></a>

Você pode usar o `--cache` parâmetro no AWS CLI para especificar cada um dos três tipos de cache local. 
+ Para especificar um cache de origem: 

  ```
  --cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
  ```
+ Para especificar um cache de camada do Docker: 

  ```
  --cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
  ```
+ Para especificar um cache personalizado: 

  ```
  --cache type=LOCAL,mode=[LOCAL_CUSTOM_CACHE]
  ```

Para obter mais informações, consulte [Crie um projeto de compilação (AWS CLI)](create-project.md#create-project-cli).

## Especificar o armazenamento em cache local (console)
<a name="caching-local-console"></a>

Você especifica um cache na seção **Artifacts (Artefatos)** do console. Em **Tipo de cache**, selecione **Amazon S3** ou **Local**. Se você optar por **Local**, selecione uma ou mais das três opções de cache local.

![\[Especifique um cache local escolhendo uma ou mais das três opções de cache local.\]](http://docs.aws.amazon.com/pt_br/codebuild/latest/userguide/images/local-cache.png)


Para obter mais informações, consulte [Criar um projeto de compilação (console)](create-project.md#create-project-console).

## Especificar o armazenamento em cache local (CloudFormation)
<a name="caching-local-cfn"></a>

Se você usa CloudFormation para especificar um cache local, na `Cache` propriedade, for`Type`, especifique`LOCAL`. O exemplo de CloudFormation código formatado em YAML a seguir especifica todos os três tipos de cache local. Você pode especificar qualquer combinação de tipos. Se você usar um cache de camada do Docker, em `Environment`, defina `PrivilegedMode` como `true` e `Type` como `LINUX_CONTAINER`. 

```
CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Name: MyProject
      ServiceRole: <service-role>
      Artifacts:
        Type: S3
        Location: <bucket-name>
        Name: myArtifact
        EncryptionDisabled: true
        OverrideArtifactName: true
      Environment:
        Type: LINUX_CONTAINER
        ComputeType: BUILD_GENERAL1_SMALL
        Image: aws/codebuild/standard:5.0
        Certificate: <bucket/cert.zip>
        # PrivilegedMode must be true if you specify LOCAL_DOCKER_LAYER_CACHE
        PrivilegedMode: true
      Source:
        Type: GITHUB
        Location: <github-location>
        InsecureSsl: true
        GitCloneDepth: 1
        ReportBuildStatus: false
      TimeoutInMinutes: 10
      Cache:
        Type: LOCAL
        Modes: # You can specify one or more cache mode, 
          - LOCAL_CUSTOM_CACHE
          - LOCAL_DOCKER_LAYER_CACHE
          - LOCAL_SOURCE_CACHE
```

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

Para obter mais informações, consulte [Crie um projeto de compilação (CloudFormation)](create-project.md#create-project-cloud-formation).