こんにちは、ちゃりおです。
今回はCodeBuildのS3キャッシュを試してみます。
S3キャッシュを使用すれば、ビルド時間の短縮ができます。
S3キャッシュとは
Amazon S3 キャッシュでは、複数のビルドホスト間で利用できるキャッシュを Amazon S3 バケットに保存します。これは、ダウンロードするよりも構築にコストがかかる小規模な中間ビルドアーティファクトに適したオプションです。また、ネットワーク経由で転送するには長い時間がかかる場合があるため、大規模なビルドアーティファクトには適していません。ビルドパフォーマンスに影響を及ぼす可能性があります。また、Docker レイヤーを使用する場合、これは最適なオプションではありません。
例えば、phpだったら「composer install」する際に、「vendor」ディレクトリ配下にライブラリがインストールされます。
Codebuildは、ビルドごとにコンテナが作成されます。そのため、「vendor」配下のディレクトリは、githubにない限り毎回ダウンロードします。
「vendor」配下をキャッシュしておけば、ダウンロード時間分ビルドを短縮できます。
また、リポジトリ側のスロットリング対策にもなります。
S3キャッシュを試してみる
基本的には、こちらの手順です。
今回は「composer install」時に作成される「vendor」を、S3に保存してキャッシュとして使います。
事前設定
ビルド環境は、AmazonマネージドのDockerイメージを使います。
カスタムイメージでも、composerが入っていれば大丈夫です。
以下のファイルを使います。
– composer.json
– buildspec.yml
composer.json
{
"require": {
"monolog/monolog": ">=1.0.0"
}
}
buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
docker: 18
build:
commands:
- composer install
artifacts:
files:
- ./**/*
# キャッシュの設定
cache:
paths:
- 'vendor/**/*'
キャッシュの設定
CodeBuild>該当ビルドプロジェクト>編集>アーティファクト
確認
成功すると、キャッシュに設定したS3バケットにファイルが作成されます。
codebuildのログを見てみると、キャッシュ有効化後はライブラリのダウンロードが行われていないことがわかります。
キャッシュ有効化前
キャッシュ有効化後
まとめ
CodebuildでS3キャッシュを使用してみました。
有効化はかなり簡単です。
今回のサンプルではライブラリ1つしかインストールしていないのでビルド時間はそこまで短縮できませんでしたが、
業務でキャッシュを入れた際は20秒くらい短縮できたので効果的だと思います。
ローカルキャッシュを使うほど頻繁にビルド処理が行われない環境でも、S3キャッシュは使えると思うので割と採用しやすいと思います。