キャッシュを使用すると、プロジェクトを構築する時間を短縮できます。キャッシュでは、ビルド環境の再利用可能な部分が保存され、複数のビルドでそれらを使用することができます。ビルドプロジェクトでは、Amazon S3 とローカルの 2 種類のキャッシュのうち、いずれかを使用できます。ローカルキャッシュを使用する場合は、3 つのキャッシュモード (ソースキャッシュ、Docker レイヤーキャッシュ、カスタムキャッシュ) のうち 1 つ以上を選択する必要があります。
注記
Docker レイヤーキャッシュモードは Linux 環境でのみ利用可能です。このモードを選択する場合は、権限モードでビルドを実行する必要があります。CodeBuild のプロジェクトでは、権限モードは、ビルドプロジェクトの Docker コンテナにすべてのデバイスへのアクセスを許可します。詳細については、Docker Docs ウェブサイトの「ランタイム特権と Linux 機能
Amazon S3 のキャッシュ
Amazon S3 キャッシュでは、複数のビルドホスト間で利用できるキャッシュを Amazon S3 バケットに保存します。これは、ダウンロードするよりも構築にコストがかかる小規模から中間ビルドアーティファクトに適したオプションです。また、ネットワーク経由で転送するには長い時間がかかる場合があるため、大規模なビルドアーティファクトには適していません。ビルドパフォーマンスに影響を及ぼす可能性があります。また、Docker レイヤーを使用する場合、これは最適なオプションではありません。
ローカルキャッシュ
ローカルキャッシュは、そのビルドホストのみが利用できるキャッシュをそのビルドホストにローカルに保存します。キャッシュはビルドホストですぐに利用できるため、この方法は大規模から中間ビルドアーティファクトに適しています。ビルドの頻度が低い場合、これは最適なオプションではありません。つまり、ビルドパフォーマンスはネットワーク転送時間の影響を受けません。
ローカルキャッシングを選択した場合は、次のキャッシュモードを 1 つ以上選択する必要があります。
-
ソースキャッシュモードは、プライマリソースとセカンダリソースの Git メタデータをキャッシュします。キャッシュ作成後のビルドでは、コミット間の変更のみプルされます。このモードは、クリーンな作業ディレクトリと、大きな Git リポジトリであるソースを持つプロジェクトに適しています。このオプションを選択しても、プロジェクトで Git リポジトリ (AWS CodeCommit、GitHub、GitHub Enterprise Server、または Bitbucket) を使用しない場合、このオプションは無視されます。
-
Docker レイヤーキャッシュモードは、既存の Docker レイヤーをキャッシュします。このモードは、大きな Docker イメージを構築または取得するプロジェクトに適しています。そのため、大きな Docker イメージをネットワークからプルすることによって生じるパフォーマンス上の問題を回避できます。
注記
-
Docker レイヤーキャッシュは Linux 環境でのみ使用できます。
-
プロジェクトに必要な Docker アクセス許可が付与されるように、
privileged
フラグを設定する必要があります 。デフォルトでは、Docker デーモンは非 VPC ビルドで有効になっています。VPC ビルドに Docker コンテナを使用する場合は、Docker Docs ウェブサイトの「Runtime Privilege and Linux Capabilities
」を参照して、特権モードを有効にします。また、Windows は特権モードをサポートしていません。 -
Docker レイヤーキャッシュを使用する前に、セキュリティへの影響を考慮してください。
-
-
カスタムキャッシュモードは buildspec ファイルで指定したディレクトリをキャッシュします。このシナリオは、ビルドシナリオが他の 2 つのローカルキャッシュモードのいずれにも適していない場合に適しています。カスタムキャッシュを使用する場合:
-
キャッシュに指定できるのはディレクトリのみです。個々のファイルを指定することはできません。
-
キャッシュされたディレクトリを参照するには、シンボリックリンクを使用します。
-
キャッシュされたディレクトリは、プロジェクトソースをダウンロードする前にビルドにリンクされます。キャッシュされたアイテムにより、同じ名前のソースアイテムが上書きされます。ディレクトリは buildspec ファイルのキャッシュパスを使って指定されます。詳細については、「buildspec の構文」を参照してください。
-
ソースとキャッシュで同じディレクトリ名は使用しないでください。ローカルにキャッシュされたディレクトリにより、ソースリポジトリ内の同じ名前のディレクトリの内容が上書きまたは削除される場合があります。
-
注記
ローカルキャッシュは、環境タイプ LINUX_GPU_CONTAINER
とコンピューティングタイプ BUILD_GENERAL1_2XLARGE
ではサポートされていません。詳細については、「ビルド環境のコンピューティングモードおよびタイプ」を参照してください。
注記
VPC で動作するように CodeBuild を設定する場合、ローカルキャッシュはサポートされません。CodeBuild で VPC を使用する方法については、「Amazon Virtual Private Cloud での AWS CodeBuild の使用」を参照してください。
ローカルキャッシュを指定
ローカルキャッシュを指定するには、AWS CLI、コンソール、SDK、または AWS CloudFormation を使用できます。ローカルキャッシュの詳細については、「ローカルキャッシュ」を参照してください。
ローカルキャッシュの指定 (CLI)
3 つの各ローカルキャッシュタイプを指定するには、AWS CLI で --cache
パラメータを使用します。
-
ソースキャッシュを指定するには:
--cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
-
Docker レイヤーキャッシュを指定するには:
--cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
-
カスタムキャッシュを指定するには:
--cache type=LOCAL,mode=[LOCAL_CUSTOM_CACHE]
詳細については、「ビルドプロジェクトの作成 (AWS CLI)」を参照してください。
ローカルキャッシュの指定 (コンソール)
キャッシュは、コンソールの [アーティファクト] セクションで指定します。[Cache type] (キャッシュタイプ) で、[Amazon S3] または [Local] (ローカル) を選択します。[ローカル] を選択した場合は、3 つのローカルキャッシュオプションのうち、1 つ以上を選択します。

詳細については、「ビルドプロジェクトの作成 (コンソール)」を参照してください。
ローカルキャッシュの指定 (AWS CloudFormation)
AWS CloudFormation を使用してローカルキャッシュを指定する場合は、Cache
プロパティの Type
で、LOCAL
を指定します。以下の YAML 形式の AWS CloudFormation コード例では、3 つのロールキャッシュタイプをすべて指定しています。任意のタイプの組み合わせを指定できます。Docker レイヤーキャッシュを使用する場合は、Environment
で、PrivilegedMode
を true
、Type
を 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
注記
デフォルトでは、Docker デーモンは非 VPC ビルドで有効になっています。VPC ビルドに Docker コンテナを使用する場合は、Docker Docs ウェブサイトの「Runtime Privilege and Linux Capabilities
詳細については、「ビルドプロジェクトの作成 (AWS CloudFormation)」を参照してください。