

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Penyimpanan cache Amazon S3
<a name="caching-s3"></a>

Caching Amazon S3 menyimpan cache dalam bucket Amazon S3 yang tersedia di beberapa host build. Ini adalah pilihan yang baik untuk artefak bangunan berukuran kecil hingga menengah yang lebih mahal untuk dibangun daripada untuk diunduh.

Untuk menggunakan Amazon S3 dalam build, Anda dapat menentukan jalur untuk file yang ingin Anda simpan dalam cache`buildspec.yml`. CodeBuild akan secara otomatis menyimpan dan memperbarui cache ke lokasi Amazon S3 yang dikonfigurasi pada proyek. Jika Anda tidak menentukan jalur file, upaya terbaik CodeBuild akan menyimpan dependensi bahasa umum untuk membantu Anda mempercepat build. Anda dapat melihat detail cache di log build.

Selain itu, jika Anda ingin memiliki beberapa versi cache, Anda dapat menentukan kunci cache di`buildspec.yml`. CodeBuild menyimpan cache di bawah konteks kunci cache ini, dan membuat salinan cache unik yang tidak akan diperbarui setelah dibuat. Kunci cache dapat dibagikan di seluruh proyek juga. Fitur seperti kunci dinamis, versi cache, dan berbagi cache di seluruh build hanya tersedia ketika kunci ditentukan.

Untuk mempelajari lebih lanjut tentang sintaks cache dalam file buildspec, lihat [cache](build-spec-ref.md#build-spec.cache) di referensi buildspec.

**Topics**
+ [Hasilkan kunci dinamis](#caching-s3-dynamic)
+ [kodebuild-hash-file](#caching-s3-dynamic.codebuild-hash-files)
+ [Versi cache](#caching-s3-version)
+ [Berbagi cache antar proyek](#caching-s3-sharing)
+ [Contoh Buildspec](#caching-s3-examples)

## Hasilkan kunci dinamis
<a name="caching-s3-dynamic"></a>

Kunci cache dapat menyertakan perintah shell dan variabel lingkungan untuk membuatnya unik, memungkinkan pembaruan cache otomatis ketika kunci berubah. Misalnya, Anda dapat menentukan kunci menggunakan hash `package-lock.json` file. Ketika dependensi dalam file itu berubah, hash — dan karenanya kunci cache — berubah, memicu pembuatan cache baru secara otomatis.

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

CodeBuild akan mengevaluasi ekspresi `$(codebuild-hash-files package-lock.json)` untuk mendapatkan kunci akhir:

```
npm-key-abc123
```

Anda juga dapat menentukan kunci cache menggunakan variabel lingkungan, seperti`CODEBUILD_RESOLVED_SOURCE_VERSION`. Ini memastikan bahwa setiap kali sumber Anda berubah, kunci baru dihasilkan, menghasilkan cache baru yang disimpan secara otomatis:

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

CodeBuild akan mengevaluasi ekspresi dan mendapatkan kunci akhir:

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

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

`codebuild-hash-files`adalah alat CLI yang menghitung SHA-256 hash untuk satu set file di direktori CodeBuild sumber menggunakan pola glob:

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

Berikut adalah beberapa contoh menggunakan`codebuild-hash-files`:

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

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

Versi cache adalah hash yang dihasilkan dari jalur direktori yang di-cache. Jika dua cache memiliki versi yang berbeda, mereka diperlakukan sebagai cache yang berbeda selama proses pencocokan. Misalnya, dua cache berikut dianggap berbeda karena mereferensikan jalur yang berbeda:

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

## Berbagi cache antar proyek
<a name="caching-s3-sharing"></a>

Anda dapat menggunakan bidang `cacheNamespace` API di bawah `cache` bagian untuk berbagi cache di beberapa proyek. Bidang ini mendefinisikan ruang lingkup cache. Untuk berbagi cache, Anda harus melakukan hal berikut:
+ Gunakan yang sama`cacheNamespace`.
+ Tentukan cache yang sama`key`.
+ Tentukan jalur cache yang identik.
+ Gunakan bucket Amazon S3 yang sama dan `pathPrefix` jika disetel.

Ini memastikan konsistensi dan memungkinkan berbagi cache di seluruh proyek.

### Tentukan namespace cache (konsol)
<a name="caching-s3-sharing.console"></a>

1. Buka AWS CodeBuild konsol di [ https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Pilih **Buat proyek**. Untuk informasi selengkapnya, lihat [Membuat proyek build (konsol)](create-project.md#create-project-console) dan [Jalankan build (konsol)](run-build-console.md).

1. Di ** Artefak**, pilih Konfigurasi ** tambahan**.

1. Untuk jenis ** Cache**, pilih ** Amazon S3**.

1. Untuk ** Cache namespace - opsional**, masukkan nilai namespace.  
![Parameter namespace cache di CodeBuild konsol.](https://docs.aws.amazon.com/id_id/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. Lanjutkan dengan nilai default dan kemudian pilih ** Buat proyek build**.

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

Anda dapat menggunakan `--cache` parameter di AWS CLI untuk menentukan namespace cache.

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

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

Berikut adalah beberapa contoh buildspec untuk bahasa umum:

**Topics**
+ [Keter Node.js gantungan cache](#caching-s3-examples.nodejs)
+ [Dependensi Cache Python](#caching-s3-examples.python)
+ [Dependensi Cache Ruby](#caching-s3-examples.ruby)
+ [Dependensi Cache Go](#caching-s3-examples.go)

### Keter Node.js gantungan cache
<a name="caching-s3-examples.nodejs"></a>

Jika proyek Anda menyertakan `package-lock.json` file dan digunakan `npm` untuk mengelola Node.js dependensi, contoh berikut menunjukkan cara mengatur caching. Secara default, `npm` menginstal dependensi ke `node_modules` direktori.

```
version: 0.2

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

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

Jika proyek Anda menyertakan `requirements.txt` file dan menggunakan pip untuk mengelola dependensi Python, contoh berikut menunjukkan cara mengkonfigurasi caching. Secara default, pip menginstal paket ke `site-packages` direktori sistem.

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

Selain itu, Anda dapat menginstal dependensi ke direktori tertentu dan mengkonfigurasi caching untuk direktori itu.

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

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

Jika proyek Anda menyertakan `Gemfile.lock` file dan digunakan `Bundler` untuk mengelola dependensi permata, contoh berikut menunjukkan cara mengkonfigurasi caching secara efektif.

```
version: 0.2

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

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

Jika proyek Anda menyertakan `go.sum` file dan menggunakan modul Go untuk mengelola dependensi, contoh berikut menunjukkan cara mengkonfigurasi caching. Secara default, modul Go diunduh dan disimpan di `${GOPATH}/pkg/mod` direktori.

```
version: 0.2

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