

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

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

Caching Amazon S3 menyimpan cache di 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 diunduh.

Untuk menggunakan Amazon S3 dalam build, Anda dapat menentukan jalur untuk file yang ingin Anda 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 file`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 tombol dinamis, pembuatan versi cache, dan berbagi cache di seluruh build hanya tersedia saat kunci ditentukan.

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

**Topics**
+ [Hasilkan kunci dinamis](#caching-s3-dynamic)
+ [codebuild-hash-files](#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 saat kunci berubah. Misalnya, Anda dapat menentukan kunci menggunakan hash `package-lock.json` file. Ketika dependensi dalam file itu berubah, hash—dan karena itu 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, sehingga cache baru disimpan secara otomatis:

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

CodeBuild akan mengevaluasi ekspresi dan mendapatkan kunci akhir:

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

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

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

```
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 merujuk pada 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, 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 [Buat 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 **namespace Cache - opsional**, masukkan nilai namespace.  
![\[Parameter namespace cache di konsol. CodeBuild\]](http://docs.aws.amazon.com/id_id/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. Lanjutkan dengan nilai default dan kemudian pilih **Create build project**.

### 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**
+ [Dependensi cache Node.js](#caching-s3-examples.nodejs)
+ [Dependensi Python cache](#caching-s3-examples.python)
+ [Dependensi Cache Ruby](#caching-s3-examples.ruby)
+ [Dependensi Cache Go](#caching-s3-examples.go)

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

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

```
version: 0.2

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

### Dependensi Python cache
<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 direktori sistem. `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/**/*"
```

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