インフラ

composer install時にCodeBuildのS3キャッシュを使う

codebuildキャッシュ

こんにちは、ちゃりおです。

今回はCodeBuildのS3キャッシュを試してみます。
S3キャッシュを使用すれば、ビルド時間の短縮ができます。

S3キャッシュとは

Amazon S3 キャッシュでは、複数のビルドホスト間で利用できるキャッシュを Amazon S3 バケットに保存します。これは、ダウンロードするよりも構築にコストがかかる小規模な中間ビルドアーティファクトに適したオプションです。また、ネットワーク経由で転送するには長い時間がかかる場合があるため、大規模なビルドアーティファクトには適していません。ビルドパフォーマンスに影響を及ぼす可能性があります。また、Docker レイヤーを使用する場合、これは最適なオプションではありません。

AWS CodeBuild でのキャッシュのビルド

例えば、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>該当ビルドプロジェクト>編集>アーティファクト

CodeBuild cache設定

確認

成功すると、キャッシュに設定したS3バケットにファイルが作成されます。

s3 キャッシュ出力

codebuildのログを見てみると、キャッシュ有効化後はライブラリのダウンロードが行われていないことがわかります。

キャッシュ有効化前

キャッシュ有効化後

まとめ

CodebuildでS3キャッシュを使用してみました。
有効化はかなり簡単です。

今回のサンプルではライブラリ1つしかインストールしていないのでビルド時間はそこまで短縮できませんでしたが、
業務でキャッシュを入れた際は20秒くらい短縮できたので効果的だと思います。

ローカルキャッシュを使うほど頻繁にビルド処理が行われない環境でも、S3キャッシュは使えると思うので割と採用しやすいと思います。

Amazonで「AWSの本」をみてみる!!

es iamrole
IAMロールでアクセス制限したAmazon ElasticSearchにcurlする方法(aws curl)こんにちは、ちゃりおです。 今回は、アクセスポリシーでIAMロールを制限したElasticSearch(以下 ES)にcurlする方法...
aws dev
業務で開発経験なしでも取れるAWS 認定デベロッパーアソシエイトの勉強法こんにちは、ちゃりおです。 AWS 認定デベロッパー – アソシエイトの勉強法についてまとめてみます。 私は、普段インフラを主にやっ...
実践AWS CDK
CDKの基礎を「実践 AWS CDK – TypeScript でインフラもアプリも!」で学ぼうこんにちは、ちゃりおです。 以前から気になっていた「実践 AWS CDK – TypeScript でインフラもアプリも!」を読みまし...