

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Mise en cache d'Amazon S3
<a name="caching-s3"></a>

La mise en cache Amazon S3 stocke le cache dans un compartiment Amazon S3 disponible sur plusieurs hôtes de build. C'est une bonne option pour les artefacts de construction de petite ou moyenne taille qui sont plus coûteux à créer qu'à télécharger.

Pour utiliser Amazon S3 dans une version, vous pouvez spécifier les chemins des fichiers que vous souhaitez mettre en cache`buildspec.yml`. CodeBuild stockera et mettra automatiquement à jour le cache à l'emplacement Amazon S3 configuré sur le projet. Si vous ne spécifiez pas les chemins des fichiers, CodeBuild nous ferons de notre mieux pour mettre en cache les dépendances linguistiques courantes afin d'accélérer les compilations. Vous pouvez consulter les détails du cache dans les journaux de compilation.

En outre, si vous souhaitez disposer de plusieurs versions du cache, vous pouvez définir une clé de cache dans le`buildspec.yml`. CodeBuild stocke le cache dans le contexte de cette clé de cache et crée une copie de cache unique qui ne sera pas mise à jour une fois créée. Les clés de cache peuvent également être partagées entre les projets. Les fonctionnalités telles que les clés dynamiques, le versionnement du cache et le partage du cache entre les versions ne sont disponibles que lorsqu'une clé est spécifiée.

Pour en savoir plus sur la syntaxe du cache dans le fichier buildspec, consultez [cache](build-spec-ref.md#build-spec.cache) la référence buildspec.

**Topics**
+ [Génération de clés dynamiques](#caching-s3-dynamic)
+ [codebuild-hash-files](#caching-s3-dynamic.codebuild-hash-files)
+ [Version du cache](#caching-s3-version)
+ [Partage du cache entre projets](#caching-s3-sharing)
+ [Exemples de spécifications de construction](#caching-s3-examples)

## Génération de clés dynamiques
<a name="caching-s3-dynamic"></a>

Une clé de cache peut inclure des commandes shell et des variables d'environnement pour la rendre unique, ce qui permet des mises à jour automatiques du cache en cas de modification de clé. Par exemple, vous pouvez définir une clé en utilisant le hachage du `package-lock.json` fichier. Lorsque les dépendances de ce fichier changent, le hachage, et donc la clé de cache, change, ce qui déclenche la création automatique d'un nouveau cache.

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

CodeBuild évaluera l'expression `$(codebuild-hash-files package-lock.json)` pour obtenir la clé finale :

```
npm-key-abc123
```

Vous pouvez également définir une clé de cache à l'aide de variables d'environnement, telles que`CODEBUILD_RESOLVED_SOURCE_VERSION`. Cela garantit que chaque fois que votre source change, une nouvelle clé est générée, ce qui entraîne l'enregistrement automatique d'un nouveau cache :

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

CodeBuild évaluera l'expression et obtiendra la clé finale :

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

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

`codebuild-hash-files`est un outil CLI qui calcule un hachage SHA-256 pour un ensemble de fichiers du répertoire CodeBuild source à l'aide de modèles globaux :

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

Voici quelques exemples d'utilisation de `codebuild-hash-files` :

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

## Version du cache
<a name="caching-s3-version"></a>

La version du cache est un hachage généré à partir des chemins des répertoires mis en cache. Si deux caches ont des versions différentes, ils sont traités comme des caches distincts pendant le processus de mise en correspondance. Par exemple, les deux caches suivants sont considérés comme différents car ils font référence à des chemins différents :

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

## Partage du cache entre projets
<a name="caching-s3-sharing"></a>

Vous pouvez utiliser le champ `cacheNamespace` API situé sous la `cache` section pour partager un cache entre plusieurs projets. Ce champ définit l'étendue du cache. Pour partager un cache, vous devez effectuer les opérations suivantes :
+ Utilise le même`cacheNamespace`.
+ Spécifiez le même cache`key`.
+ Définissez des chemins de cache identiques.
+ Utilisez les mêmes compartiments Amazon S3 et `pathPrefix` s'ils sont définis.

Cela garantit la cohérence et permet le partage du cache entre les projets.

### Spécifier un espace de noms de cache (console)
<a name="caching-s3-sharing.console"></a>

1. Ouvrez la AWS CodeBuild console sur [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Sélectionnez **Create a project (Créer un projet)**. Pour plus d’informations, consultez [Création d'un projet de génération (console)](create-project.md#create-project-console) et [Exécution d'une génération (console)](run-build-console.md).

1. Dans **Artefacts**, sélectionnez **Configuration supplémentaire**.

1. Pour **le type de cache**, choisissez **Amazon S3**.

1. Pour **Espace de noms du cache - facultatif**, entrez une valeur d'espace de noms.  
![\[Paramètre d'espace de noms du cache dans la CodeBuild console.\]](http://docs.aws.amazon.com/fr_fr/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. Continuez avec les valeurs par défaut, puis choisissez **Create build project**.

### Spécifiez un espace de noms de cache ()AWS CLI
<a name="caching-s3-sharing.cli"></a>

Vous pouvez utiliser le `--cache` paramètre dans le AWS CLI pour spécifier un espace de noms de cache.

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

## Exemples de spécifications de construction
<a name="caching-s3-examples"></a>

Voici plusieurs exemples de spécifications de construction pour les langages courants :

**Topics**
+ [Cache les dépendances de Node.js](#caching-s3-examples.nodejs)
+ [Dépendances du cache en Python](#caching-s3-examples.python)
+ [Dépendances du cache Ruby](#caching-s3-examples.ruby)
+ [Dépendances de Cache Go](#caching-s3-examples.go)

### Cache les dépendances de Node.js
<a name="caching-s3-examples.nodejs"></a>

Si votre projet inclut un `package-lock.json` fichier et l'utilise `npm` pour gérer les dépendances de Node.js, l'exemple suivant montre comment configurer la mise en cache. Par défaut, `npm` installe les dépendances dans le `node_modules` répertoire.

```
version: 0.2

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

### Dépendances du cache en Python
<a name="caching-s3-examples.python"></a>

Si votre projet inclut un `requirements.txt` fichier et utilise pip pour gérer les dépendances Python, l'exemple suivant montre comment configurer la mise en cache. Par défaut, pip installe les packages dans le répertoire du `site-packages` système.

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

En outre, vous pouvez installer des dépendances dans un répertoire spécifique et configurer la mise en cache pour ce répertoire.

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

### Dépendances du cache Ruby
<a name="caching-s3-examples.ruby"></a>

Si votre projet inclut un `Gemfile.lock` fichier et l'utilise `Bundler` pour gérer les dépendances des gemmes, l'exemple suivant montre comment configurer efficacement la mise en cache.

```
version: 0.2

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

### Dépendances de Cache Go
<a name="caching-s3-examples.go"></a>

Si votre projet inclut un `go.sum` fichier et utilise des modules Go pour gérer les dépendances, l'exemple suivant montre comment configurer la mise en cache. Par défaut, les modules Go sont téléchargés et stockés dans le `${GOPATH}/pkg/mod` répertoire.

```
version: 0.2

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