Amazon S3 のキャッシュ - AWS CodeBuild

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 のキャッシュ

Amazon S3 キャッシュでは、複数のビルドホスト間で利用できるキャッシュを Amazon S3 バケットに保存します。これは、ダウンロードするよりも構築にコストがかかる小規模から中間ビルドアーティファクトに適したオプションです。

ビルドで Amazon S3 を使用するには、buildspec.yml にキャッシュするファイルのパスを指定できます。CodeBuild は、プロジェクトで設定された Amazon S3 の場所にキャッシュを自動的に保存し、更新します。ファイルパスを指定しない場合、CodeBuild はビルドの高速化に役立つ共通言語の依存関係をベストエフォートでキャッシュします。キャッシュの詳細は、ビルドログで表示できます。

さらに、複数のバージョンのキャッシュが必要な場合は、buildspec.yml でキャッシュキーを定義できます。CodeBuild はこのキャッシュキーのコンテキストにキャッシュを保存し、作成後に更新されない一意のキャッシュコピーを作成します。キャッシュキーはプロジェクト間で共有することもできます。動的キー、キャッシュバージョニング、ビルド間のキャッシュ共有などの機能は、キーが指定されている場合にのみ使用できます。

buildspec ファイルのキャッシュ構文の詳細については、buildspec リファレンスの「キャッシュ」を参照してください。

動的キーを生成する

キャッシュキーは、シェルコマンドと環境変数を含めて一意にし、キーが変更されたときの自動キャッシュ更新を有効にすることができます。たとえば、package-lock.json ファイルのハッシュを使用してキーを定義できます。そのファイルの依存関係が変更されると、ハッシュ、つまりキャッシュキーが変更され、新しいキャッシュの自動作成がトリガーされます。

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

CodeBuild は式 $(codebuild-hash-files package-lock.json) を評価して最終的なキーを取得します。

npm-key-abc123

CODEBUILD_RESOLVED_SOURCE_VERSION などの環境変数を使用してキャッシュキーを定義することもできます。これにより、ソースが変更されるたびに新しいキーが生成され、新しいキャッシュが自動的に保存されます。

cache: key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION

CodeBuild は式を評価して最終的なキーを取得します。

npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369

codebuild-hash-files

codebuild-hash-files は、glob パターンを使用して CodeBuild ソースディレクトリ内の一連のファイルの SHA-256 ハッシュを計算する CLI ツールです。

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

次に codebuild-hash-files の使用例を示します。

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

キャッシュバージョン

キャッシュバージョンは、キャッシュされるディレクトリのパスから生成されるハッシュです。2 つのキャッシュのバージョンが異なる場合、それらはマッチングプロセス中に個別のキャッシュとして扱われます。たとえば、次の 2 つのキャッシュは異なるパスを参照するため、異なると見なされます。

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

プロジェクト間のキャッシュ共有

cache セクションにある cacheNamespace API フィールドを使用して、複数のプロジェクト間でキャッシュを共有できます。このフィールドでは、キャッシュの範囲が定義されます。キャッシュを共有するには、以下を行う必要があります。

  • 同じ cacheNamespace を使用する。

  • 同じキャッシュ key を指定する。

  • 同一のキャッシュパスを定義する。

  • 同じ Amazon S3 バケットを使用し、設定されている場合は pathPrefix を使用する。

これにより、一貫性が確保され、プロジェクト間でキャッシュ共有が可能になります。

キャッシュ名前空間を指定する (コンソール)

  1. https://console.aws.amazon.com/codesuite/codebuild/home で AWS CodeBuild コンソールを開きます。

  2. [プロジェクトを作成] を選択します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。

  3. [アーティファクト] で、[追加設定] を選択します。

  4. [キャッシュタイプ] で、[Amazon S3] を選択します。

  5. [キャッシュ名前空間 - オプション] で、名前空間の値を入力します。

    CodeBuild コンソールで名前空間パラメータをキャッシュします。
  6. デフォルト値のまま続行し、[ビルドプロジェクトを作成する] を選択します。

キャッシュ名前空間を指定する (AWS CLI)

--cacheパラメータを使用して AWS CLI 、キャッシュ名前空間を指定できます。

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

buildspec の例

一般的な言語の buildspec の例を以下に示します。

Node.js の依存関係をキャッシュする

プロジェクトに package-lock.json ファイルが含まれており、npm を使用して Node.js の依存関係を管理する場合、次の例はキャッシュをセットアップする方法を示しています。デフォルトでは、npm は依存関係を node_modules ディレクトリにインストールします。

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

Python の依存関係をキャッシュする

プロジェクトに requirements.txt ファイルが含まれており、pip を使用して Python の依存関係を管理する場合、次の例はキャッシュをセットアップする方法を示しています。デフォルトでは、pip はシステムの 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/**/*"

さらに、依存関係を特定のディレクトリにインストールし、そのディレクトリのキャッシュを設定できます。

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

Ruby の依存関係をキャッシュする

プロジェクトに Gemfile.lock ファイルが含まれており、Bundler を使用して gem の依存関係を管理する場合、次の例はキャッシュを効果的に設定する方法を示しています。

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

Go の依存関係をキャッシュする

プロジェクトに go.sum ファイルが含まれており、Go モジュールを使用して依存関係を管理する場合、次の例はキャッシュを設定する方法を示しています。デフォルトでは、Go モジュールは ${GOPATH}/pkg/mod ディレクトリにダウンロードされて保存されます。

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