

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

# 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/**/*"
```