

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

# Cache dibangun untuk meningkatkan kinerja
<a name="build-caching"></a>

Anda dapat menghemat waktu ketika proyek Anda dibangun dengan menggunakan cache. Cache dapat menyimpan bagian yang dapat digunakan kembali dari lingkungan build Anda dan menggunakannya di beberapa build. Proyek build Anda dapat menggunakan salah satu dari dua jenis caching: Amazon S3 atau lokal. Jika Anda menggunakan cache lokal, Anda harus memilih satu atau lebih dari tiga mode cache: cache sumber, cache lapisan Docker, dan cache khusus. 

**catatan**  
Mode cache lapisan Docker hanya tersedia untuk lingkungan Linux. Jika Anda memilih mode ini, Anda harus menjalankan build Anda dalam mode istimewa. CodeBuild proyek yang diberikan mode istimewa memberikan akses kontainernya ke semua perangkat. Untuk informasi selengkapnya, lihat [hak istimewa Runtime dan kemampuan Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) di situs web Docker Docs.

**Topics**
+ [Caching Amazon S3](caching-s3.md)
+ [Caching lokal](caching-local.md)
+ [Tentukan cache lokal](specify-caching-local.md)

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

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

Caching lokal menyimpan cache secara lokal pada host build yang hanya tersedia untuk host build tersebut. Ini adalah opsi yang baik untuk artefak build menengah hingga besar karena cache segera tersedia di host build. Ini bukan pilihan terbaik jika build Anda jarang. Ini berarti bahwa kinerja build tidak terpengaruh oleh waktu transfer jaringan.

Jika Anda memilih caching lokal, Anda harus memilih satu atau beberapa mode cache berikut: 
+ Mode cache sumber menyimpan metadata Git untuk sumber primer dan sekunder. Setelah cache dibuat, pembangunan berikutnya menarik perubahan antar pelaksanaan saja. Mode ini merupakan pilihan yang baik untuk proyek dengan direktori yang bersih dan berfungsi serta sumber yang merupakan repositori Git besar. Jika Anda memilih opsi ini dan proyek Anda tidak menggunakan repositori Git (AWS CodeCommit,, Server GitHub Perusahaan GitHub, atau Bitbucket), opsi tersebut diabaikan. 
+ Mode cache lapisan Docker menyimpan lapisan Docker yang ada. Mode ini merupakan pilihan yang baik untuk proyek yang membangun atau menarik gambar Docker yang besar. Ia dapat mencegah masalah performa yang disebabkan oleh penarikan keluar gambar Docker yang besar dari jaringan. 
**catatan**  
Anda dapat menggunakan cache lapisan Docker di lingkungan Linux saja. 
Bendera `privileged` harus diatur agar proyek Anda memiliki izin Docker yang diperlukan.   
Secara default, daemon Docker diaktifkan untuk build non-VPC. Jika Anda ingin menggunakan kontainer Docker untuk build VPC, [lihat Runtime Privilege dan Kemampuan Linux di situs web Docker Docs dan](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) aktifkan mode istimewa. Juga, Windows tidak mendukung mode istimewa.
Anda harus mempertimbangkan implikasi keamanan sebelum Anda menggunakan cache lapisan Docker. 
+ Mode cache kustom menyimpan direktori yang Anda tentukan dalam file buildspec. Mode ini adalah pilihan yang baik jika skenario build Anda tidak cocok dengan salah satu dari dua mode cache lokal lainnya. Jika Anda menggunakan cache kustom: 
  + Hanya direktori yang dapat ditentukan untuk caching. Anda tidak dapat menentukan file individu. 
  + Symlink digunakan untuk mereferensikan direktori cache. 
  + Direktori yang di-cache ditautkan ke pembangunan Anda sebelum mengunduh sumber proyeknya. Item yang di-cache mengganti item sumber jika memiliki nama yang sama. Direktori ditentukan menggunakan jalur cache di file buildspec. Untuk informasi selengkapnya, lihat [Sintaks Buildspec](build-spec-ref.md#build-spec-ref-syntax). 
  + Hindari nama direktori yang sama di sumber dan di cache. Direktori cache lokal dapat mengganti, atau menghapus konten, direktori di repositori sumber yang memiliki nama yang sama.

**catatan**  
Caching lokal tidak didukung dengan jenis `LINUX_GPU_CONTAINER` lingkungan dan tipe `BUILD_GENERAL1_2XLARGE` komputasi. Untuk informasi selengkapnya, lihat [Bangun mode dan tipe komputasi lingkungan](build-env-ref-compute-types.md).

**catatan**  
Caching lokal tidak didukung saat Anda mengonfigurasi CodeBuild untuk bekerja dengan VPC. Untuk informasi lebih lanjut tentang menggunakan VPCs dengan CodeBuild, lihat[Gunakan AWS CodeBuild dengan Amazon Virtual Private Cloud](vpc-support.md).

# Tentukan cache lokal
<a name="specify-caching-local"></a>

Anda dapat menggunakan AWS CLI, konsol, SDK, atau CloudFormation untuk menentukan cache lokal. Untuk informasi selengkapnya tentang caching lokal, lihat[Caching lokal](caching-local.md).

**Topics**
+ [Tentukan caching lokal (CLI)](#caching-local-cli)
+ [Tentukan caching lokal (konsol)](#caching-local-console)
+ [Tentukan caching lokal ()CloudFormation](#caching-local-cfn)

## Tentukan caching lokal (CLI)
<a name="caching-local-cli"></a>

Anda dapat menggunakan `--cache` parameter di AWS CLI untuk menentukan masing-masing dari tiga jenis cache lokal. 
+ Untuk menentukan cache sumber: 

  ```
  --cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
  ```
+ Untuk menentukan cache layer Docker: 

  ```
  --cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
  ```
+ Untuk menentukan cache kustom: 

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

Untuk informasi selengkapnya, lihat [Buat proyek build (AWS CLI)](create-project.md#create-project-cli).

## Tentukan caching lokal (konsol)
<a name="caching-local-console"></a>

Anda menentukan cache di bagian **Artefak** konsol. **Untuk **jenis Cache**, pilih **Amazon S3** atau Lokal.** Jika Anda memilih **Lokal**, pilih satu atau lebih dari tiga opsi cache lokal.

![\[Tentukan cache lokal dengan memilih satu atau lebih dari tiga opsi cache lokal.\]](http://docs.aws.amazon.com/id_id/codebuild/latest/userguide/images/local-cache.png)


Untuk informasi selengkapnya, lihat [Buat proyek build (konsol)](create-project.md#create-project-console).

## Tentukan caching lokal ()CloudFormation
<a name="caching-local-cfn"></a>

Jika Anda gunakan CloudFormation untuk menentukan cache lokal, pada `Cache` properti, untuk`Type`, tentukan`LOCAL`. Contoh CloudFormation kode berformat YAML berikut menentukan ketiga jenis cache lokal. Anda dapat menentukan kombinasi jenis apa pun. Jika Anda menggunakan cache layer Docker, di bawah`Environment`, Anda harus mengatur `PrivilegedMode` ke `true` dan `Type` ke`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
```

**catatan**  
Secara default, daemon Docker diaktifkan untuk build non-VPC. Jika Anda ingin menggunakan kontainer Docker untuk build VPC, [lihat Runtime Privilege dan Kemampuan Linux di situs web Docker Docs dan](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) aktifkan mode istimewa. Juga, Windows tidak mendukung mode istimewa.

Lihat informasi yang lebih lengkap di [Buat proyek build (CloudFormation)](create-project.md#create-project-cloud-formation).