

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazioni di cache per migliorare le prestazioni
<a name="build-caching"></a>

Durante la creazione del progetto è possibile risparmiare tempo utilizzando una cache. Una cache memorizza parti riutilizzabili dell'ambiente di compilazione e le utilizza su più compilazioni. Il tuo progetto di build può utilizzare uno dei due tipi di caching: Amazon S3 o locale. Se utilizzi una cache locale, devi scegliere una o più delle tre modalità di cache disponibili: cache delle origini, cache di livello Docker e cache personalizzata. 

**Nota**  
La modalità cache di livello Docker è disponibile solo per l'ambiente Linux. Se scegli questa modalità, devi eseguire la build in modalità privilegiata. CodeBuild ai progetti concessi la modalità privilegiata concede al contenitore l'accesso a tutti i dispositivi. Per ulteriori informazioni, vedere [Privilegi di runtime e funzionalità Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) sul sito Docker Docs.

**Topics**
+ [Memorizzazione nella cache di Amazon S3](caching-s3.md)
+ [Caching locale](caching-local.md)
+ [Specificare una cache locale](specify-caching-local.md)

# Memorizzazione nella cache di Amazon S3
<a name="caching-s3"></a>

Il caching di Amazon S3 archivia la cache in un bucket Amazon S3 disponibile su più host di build. Questa è una buona opzione per artefatti di build di piccole e medie dimensioni che sono più costosi da creare che da scaricare.

Per utilizzare Amazon S3 in una build, puoi specificare i percorsi per i file che desideri memorizzare nella cache. `buildspec.yml` CodeBuild memorizzerà e aggiornerà automaticamente la cache nella posizione Amazon S3 configurata nel progetto. Se non specifichi i percorsi dei file, CodeBuild memorizzerà nella cache al meglio le dipendenze del linguaggio comune per aiutarti a velocizzare le build. Puoi visualizzare i dettagli della cache nei log di compilazione.

Inoltre, se desideri avere più versioni della cache, puoi definire una chiave di cache in. `buildspec.yml` CodeBuild memorizza la cache nel contesto di questa chiave di cache e crea una copia cache unica che non verrà aggiornata una volta creata. Le chiavi della cache possono essere condivise anche tra progetti. Funzionalità come le chiavi dinamiche, il controllo delle versioni della cache e la condivisione della cache tra le build sono disponibili solo quando viene specificata una chiave.

Per ulteriori informazioni sulla sintassi della cache nel file buildspec, consulta il riferimento buildspec. [cache](build-spec-ref.md#build-spec.cache)

**Topics**
+ [Genera chiavi dinamiche](#caching-s3-dynamic)
+ [codebuild-hash-files](#caching-s3-dynamic.codebuild-hash-files)
+ [Versione cache](#caching-s3-version)
+ [Condivisione della cache tra progetti](#caching-s3-sharing)
+ [Esempi di Buildspec](#caching-s3-examples)

## Genera chiavi dinamiche
<a name="caching-s3-dynamic"></a>

Una chiave cache può includere comandi di shell e variabili di ambiente per renderla unica, abilitando gli aggiornamenti automatici della cache quando la chiave cambia. Ad esempio, è possibile definire una chiave utilizzando l'hash del `package-lock.json` file. Quando le dipendenze in quel file cambiano, l'hash, e quindi la chiave della cache, cambia, attivando la creazione automatica di una nuova cache.

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

CodeBuild valuterà l'espressione per ottenere la chiave finale`$(codebuild-hash-files package-lock.json)`:

```
npm-key-abc123
```

È inoltre possibile definire una chiave di cache utilizzando variabili di ambiente, ad esempio`CODEBUILD_RESOLVED_SOURCE_VERSION`. Ciò garantisce che ogni volta che la fonte cambia, venga generata una nuova chiave, con conseguente salvataggio automatico di una nuova cache:

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

CodeBuild valuterà l'espressione e otterrà la chiave finale:

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

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

`codebuild-hash-files`è uno strumento CLI che calcola un hash SHA-256 per un insieme di file nella directory di origine utilizzando modelli glob: CodeBuild 

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

Ecco alcuni esempi che utilizzano: `codebuild-hash-files`

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

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

La versione cache è un hash generato dai percorsi delle directory memorizzate nella cache. Se due cache hanno versioni diverse, vengono trattate come cache distinte durante il processo di abbinamento. Ad esempio, le due cache seguenti sono considerate diverse perché fanno riferimento a percorsi diversi:

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

## Condivisione della cache tra progetti
<a name="caching-s3-sharing"></a>

Puoi utilizzare il campo `cacheNamespace` API nella `cache` sezione per condividere una cache tra più progetti. Questo campo definisce l'ambito della cache. Per condividere una cache, devi fare quanto segue:
+ Usa lo stesso`cacheNamespace`.
+ Specificare la stessa cache`key`.
+ Definire percorsi di cache identici.
+ Usa gli stessi bucket Amazon S3 e `pathPrefix` se impostati.

Ciò garantisce la coerenza e consente la condivisione della cache tra i progetti.

### Specificare uno spazio dei nomi della cache (console)
<a name="caching-s3-sharing.console"></a>

1. [Apri la AWS CodeBuild console su codebuild/homehttps://console.aws.amazon.com/codesuite/.](https://console.aws.amazon.com/codesuite/codebuild/home)

1. Seleziona **Crea progetto**. Per informazioni, consulta [Creare un progetto di compilazione (console)](create-project.md#create-project-console) e [Esecuzione di una compilazione (console)](run-build-console.md).

1. **In **Artifacts**, scegli Configurazione aggiuntiva.**

1. Per il **tipo di cache**, scegli **Amazon S3**.

1. Per lo spazio **dei nomi Cache, facoltativo**, inserisci un valore per lo spazio dei nomi.  
![\[Parametro dello spazio dei nomi della cache nella console. CodeBuild\]](http://docs.aws.amazon.com/it_it/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. Continua con i valori predefiniti, quindi scegli **Crea progetto di compilazione**.

### Specificate uno spazio dei nomi della cache ()AWS CLI
<a name="caching-s3-sharing.cli"></a>

È possibile utilizzare il `--cache` parametro in AWS CLI per specificare uno spazio dei nomi della cache.

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

## Esempi di Buildspec
<a name="caching-s3-examples"></a>

Ecco alcuni esempi di buildspec per linguaggi comuni:

**Topics**
+ [Memorizza le dipendenze di Node.js](#caching-s3-examples.nodejs)
+ [Dipendenze da Cache Python](#caching-s3-examples.python)
+ [Cache delle dipendenze di Ruby](#caching-s3-examples.ruby)
+ [Dipendenze Cache Go](#caching-s3-examples.go)

### Memorizza le dipendenze di Node.js
<a name="caching-s3-examples.nodejs"></a>

Se il progetto include un `package-lock.json` file e lo utilizza `npm` per gestire le dipendenze di Node.js, l'esempio seguente mostra come impostare la memorizzazione nella cache. Per impostazione predefinita, `npm` installa le dipendenze nella directory. `node_modules`

```
version: 0.2

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

### Dipendenze da Cache Python
<a name="caching-s3-examples.python"></a>

Se il progetto include un `requirements.txt` file e utilizza pip per gestire le dipendenze di Python, l'esempio seguente dimostra come configurare la memorizzazione nella cache. Per impostazione predefinita, pip installa i pacchetti nella directory del sistema. `site-packages`

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

Inoltre, puoi installare le dipendenze in una directory specifica e configurare la memorizzazione nella cache per quella directory.

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

### Cache delle dipendenze di Ruby
<a name="caching-s3-examples.ruby"></a>

Se il progetto include un `Gemfile.lock` file e lo utilizza `Bundler` per gestire le dipendenze gem, l'esempio seguente dimostra come configurare la memorizzazione nella cache in modo efficace.

```
version: 0.2

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

### Dipendenze Cache Go
<a name="caching-s3-examples.go"></a>

Se il progetto include un `go.sum` file e utilizza i moduli Go per gestire le dipendenze, l'esempio seguente dimostra come configurare la memorizzazione nella cache. Per impostazione predefinita, i moduli Go vengono scaricati e archiviati nella directory. `${GOPATH}/pkg/mod`

```
version: 0.2

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

# Caching locale
<a name="caching-local"></a>

Questa modalità archivia la cache in locale su un host di compilazioni disponibile solo per tale host. Questa è una buona opzione per gli artefatti di build di dimensioni intermedie e grandi perché la cache è immediatamente disponibile sull'host di build. Questa non è l'opzione migliore se le compilazioni avvengono raramente. Ciò significa che il trasferimento su rete non influisce sulle prestazioni delle compilazioni.

Se decidi di optare per il caching locale, devi scegliere una o più delle seguenti modalità cache: 
+ La modalità cache delle origini memorizza i metadati Git per origini primarie e secondarie. Dopo la creazione della cache, le compilazioni successive estraggono solo le modifiche tra i commit. Questa modalità rappresenta una scelta valida per progetti con una directory di lavoro pulita e un'origine costituita da un repository Git di grandi dimensioni. Se scegli questa opzione e il tuo progetto non utilizza un repository Git (AWS CodeCommit, GitHub, GitHub Enterprise Server o Bitbucket), l'opzione viene ignorata. 
+ La modalità cache di livello Docker memorizza i livelli Docker esistenti. Rappresenta la soluzione ideale per progetti che prevedono la creazione o l'estrazione di immagini Docker di grandi dimensioni. Può inoltre prevenire eventuali problemi di prestazioni causati dall'estrazione di immagini Docker di grandi dimensioni dalla rete. 
**Nota**  
La cache di livello Docker può essere utilizzata solo in ambiente Linux. 
È necessario impostare il flag `privileged` in modo che il progetto disponga delle autorizzazioni Docker richieste.   
Per impostazione predefinita, il daemon Docker è abilitato per le build non VPC. Se desideri utilizzare i contenitori Docker per le build VPC, [consulta Runtime Privilege e Linux Capabilities sul sito Web di Docker Docs e](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) abilita la modalità privilegiata. Inoltre, Windows non supporta la modalità privilegiata.
Prima di utilizzare una cache di livello Docker, è consigliabile considerare le implicazioni per la sicurezza. 
+ La modalità cache personalizzata memorizza le directory specificate nel file di specifiche di compilazione. Rappresenta una buona scelta se lo scenario di compilazione non è idoneo per nessuna delle altre due modalità di cache locale. Se utilizzi una cache personalizzata: 
  + Puoi specificare per il caching solo le directory. Non puoi specificare singoli file. 
  + Per fare riferimento alle directory memorizzate nella cache si utilizzano i symlink. 
  + Le directory memorizzate nella cache vengono collegate alla compilazione prima del download delle origini del progetto. Gli elementi memorizzati nella cache sostituiscono gli elementi di origine se hanno lo stesso nome. Le directory vengono specificate utilizzando i percorsi di cache nel file di specifiche di compilazione. Per ulteriori informazioni, consulta [Sintassi buildspec](build-spec-ref.md#build-spec-ref-syntax). 
  + Evitare nomi di directory uguali nell'origine e nella cache. Le directory memorizzate nella cache locale possono sovrascrivere o eliminare il contenuto delle directory nel repository di origine con lo stesso nome.

**Nota**  
La memorizzazione nella cache locale non è supportata con il tipo di `LINUX_GPU_CONTAINER` ambiente e il tipo di `BUILD_GENERAL1_2XLARGE` elaborazione. Per ulteriori informazioni, consulta [Modi e tipi di calcolo dell'ambiente di creazione](build-env-ref-compute-types.md).

**Nota**  
La memorizzazione nella cache locale non è supportata quando si configura CodeBuild per lavorare con un VPC. Per ulteriori informazioni sull'utilizzo VPCs con CodeBuild, consulta. [Utilizzo AWS CodeBuild con Amazon Virtual Private Cloud](vpc-support.md)

# Specificare una cache locale
<a name="specify-caching-local"></a>

È possibile utilizzare la console AWS CLI, l'SDK o CloudFormation specificare una cache locale. Per ulteriori informazioni sulla memorizzazione nella cache locale, consulta. [Caching locale](caching-local.md)

**Topics**
+ [Specifica del caching locale (CLI)](#caching-local-cli)
+ [Specifica del caching locale (console)](#caching-local-console)
+ [Specifica del caching locale (CloudFormation)](#caching-local-cfn)

## Specifica del caching locale (CLI)
<a name="caching-local-cli"></a>

È possibile utilizzare il `--cache` parametro in AWS CLI per specificare ciascuno dei tre tipi di cache locale. 
+ Per specificare una cache delle origini: 

  ```
  --cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
  ```
+ Per specificare una cache di livello Docker: 

  ```
  --cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
  ```
+ Per specificare una cache personalizzata: 

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

Per ulteriori informazioni, consulta [Creazione di un progetto di compilazione (AWS CLI)](create-project.md#create-project-cli).

## Specifica del caching locale (console)
<a name="caching-local-console"></a>

Puoi specificare una cache nella sezione **Artifacts (Artefatti)** della console. **Per il **tipo di cache**, scegli **Amazon S3 o Local**.** Se selezioni **Local (Locale)**, scegli una o più delle tre opzioni di cache locale.

![\[Specificate una cache locale scegliendo una o più delle tre opzioni di cache locale.\]](http://docs.aws.amazon.com/it_it/codebuild/latest/userguide/images/local-cache.png)


Per ulteriori informazioni, consulta [Creare un progetto di compilazione (console)](create-project.md#create-project-console).

## Specifica del caching locale (CloudFormation)
<a name="caching-local-cfn"></a>

Se si utilizza CloudFormation per specificare una cache locale, nella `Cache` proprietà, per`Type`, specificare`LOCAL`. Il seguente CloudFormation codice in formato YAML di esempio specifica tutti e tre i tipi di cache locale. È possibile selezionare i tipi disponibili in qualsiasi combinazione. Se utilizzi una cache di livello Docker, in `Environment` devi impostare `PrivilegedMode` su `true` e `Type` su `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**  
Per impostazione predefinita, il daemon Docker è abilitato per le build non VPC. Se desideri utilizzare i contenitori Docker per le build VPC, [consulta Runtime Privilege e Linux Capabilities sul sito Web di Docker Docs e](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) abilita la modalità privilegiata. Inoltre, Windows non supporta la modalità privilegiata.

Per ulteriori informazioni, consulta [Creazione di un progetto di compilazione (CloudFormation)](create-project.md#create-project-cloud-formation).