CodeBuildのキャッシュ方法について


はじめに

CodeBuildを使ってビルドシステムを作る際にキャッシュ周りについて調べたのでそれについて記載していきます。

今回調査した時は中間生成データをまるっとキャッシュしたかったのでS3キャッシュとカスタムキャッシュモードの調査をしました。

ちなみに結論としてはS3キャッシュを使う方法が採用されました。

対象読者

CodeBuild使ってみようと思う人。

内容

キャッシュ方法

以下の通り。

S3キャッシュ

  • buildspecに指定した対象をS3にキャッシュする
  • S3との通信が発生するため、中規模以上で低頻度でビルドをするプロジェクト向け
    • キャッシュ対象物がそもそも少ないとキャッシュから復元する方が時間がかかったりする
  • S3にキャッシュするので複数のCodeBuild間で利用できる

ローカルキャッシュ

ソースキャッシュモード
  • Gitのメタデータをキャッシュするモード
  • キャッシュ後はコミット間の変更のみが適用される
Docker レイヤーキャッシュモード
  • Docker Imageのキャッシュをしてくれる
  • Linuxでのみ利用可能
  • privilegedフラグを設定するようにする必要がある
カスタムキャッシュモード
  • S3同様にbuildspecで指定したディレクトリがキャッシュされる
  • キャッシュされたディレクトリはシンボリックリンクでリンクされる
    • ソースのダウンロードよりも先なので同じ名前のものをキャッシュしていると上書きされる
  • 単一のCodeBuild内でのみ利用が可能

使い方

buildspecの参考は以下。

大事な点はパスの指定の仕方。

公式はこっち

version: 0.2

phases:
    install:
        commands:
            - echo test

cache:
    paths:
        - ./example/**/* # recursiveに設定しないとディクレトリだけがキャッシュされる

注意点

S3キャッシュとローカルキャッシュの併用はできないので、キャッシュしたいものについてはしっかり精査する必要がある。

終わりに

ローカルキャッシュも使おうとしたがどうもうまく動作せず。

ドキュメントにも動作する条件が書いてなくて、Stack Overflowに有志が調べた条件的なのがあるけども確認できてない。