参考記事とメモ
https://masakimisawa.com/reduce_codebuild_build_time/
- CodeBuildの実行時間の短縮はCodeBuild利用料の安さにも貢献する
- BuildKitの有効化
- Dockerfileに定義した依存関係のないレイヤを並列化・キャッシュを利用して短縮
- 環境変数のDOCKER_BUILDKITに1を設定する
- ローカルキャッシュの利用
- DockerイメージのレイヤやGitのメタデータをCodeBuildの実行ホスト環境内にキャッシュする
- マネコンの画面で選択可能
- 前回のビルド実行時から時間を空けずに再度実行すると同じ環境を使いまわすといわれているためキャッシュヒット率が高くなる可能性がある。
- カスタムイメージを使用して、必要な各種ライブラリなどを予め使用可能にしておく
- 使用方法
- カスタムイメージを用意
- ECRにアップロード
- ECRにCodeBuildからのアクセスを許可する
- CodeBuildの環境イメージをカスタムイメージに上書き
- 使用するコンピューティングリソースの増強
- 当然利用料は高くなる
- 無料枠が効かなくなる
- 一番ROIが高い場面が多い
https://qiita.com/ko-shimizu/items/b13311384f6c25d9f44d
- CodeBuildによる
PROVISIONING
に時間がかかる。以下の環境の条件に左右される。
- ビルド用のコンテナ環境イメージ
- ビルド用のコンテナをVPCに置くか否か
- コンテナスペック
https://note.com/deliku0306/n/n300b508fda93
- CodeBuildの課金体系の都合上、ビルド実行時間が半分になるならスペックの分の料金が2倍になっても金額は一緒
- DOCKER_BUILDKIT有効化によって並列処理が行われ、時間が短縮
https://dev.classmethod.jp/articles/codebuild-local-cache/
- ローカルキャッシュ機能
buildspec.yml
内で指定したファイルをキャッシュする機能に加え、DockerのイメージのレイヤのキャッシュやGitのメタデータのキャッシュも行える
- Source cache
- Gitのメタデータをキャッシュし、差分のみをpullするようになります。これにより、巨大なモノリシックなリポジトリ等でのソースコードのpullの高速化
- Custom cache
- **
buildspec.yml
**で指定した特定のディレクトリ以下をキャッシュ
実際に試して検証する
Buildkitの有効化を検証
参考:https://dev.classmethod.jp/articles/codebuild-buildkit/
変更内容:
- buildspec.ymlファイル内でenvを追記した
結果:
3分10秒~3分20秒実行されていたビルド時間が3分程度に。(微短縮)
以前としてPROVISIONINGの時間が長いため、別記事を探す。
CodeBuild実行環境のイメージをAmazonLinuxからUbuntuに変更する
https://tech-blog.tsukaby.com/archives/1531
実行環境のイメージをAmazonLinuxからUbuntuに変更すると大幅に高速化されることが確認されている。
変更内容:
- CodeBuild「編集」→「環境」でOSをUbuntu, ランタイムを「Standard」、イメージを「aws/codebuild/standard:7.0」に変更する
結果:
2分14秒に短縮(約1分短縮)
CodeBuildの実行環境のスペックを1段階上げる
結果:
3 GB メモリ、2 vCPU (Ubuntu) ⇒ 2 分間 14 秒間
7 GB メモリ、4 vCPU (Ubuntu) ⇒ 1 分間 56 秒間
結論
CodeBuildの実行時間に対して効果が大きかった順に並べると、
- CodeBuildの実行環境イメージをAmazonLinuxからUbuntuに変更する
- CodeBuildの実行環境のスペックを上げる
私の環境では上記となりました。