AWS CodeBuildのPROVISIONINGフェーズが遅い問題


TL;DR

  • Amazon Linux2ではなくUbuntuを使う
  • instance typeをgeneral1.smallからgeneral1.largeに変えてみる
  • Imageのversionを例えばAmazon Linux 4系から3系に下げる
  • そもそも抜本的な解決にならないのでGitHub Actionsなど別のサービスに乗り換える

背景と問題

仕事でAWSを利用しており、Docker containerのビルドやデプロイにAWS CodeBuildを利用しています。

https://aws.amazon.com/jp/codebuild/

最近ではGitHub Actionsが増えてきており、そちらの方が良い気もします。

極力AWSに統一しておいた方が見通しやメンテナンス性、Image転送のネットワークの近さなど色々と有利だと思いCodeBuildを採用したのですが、どうにもビルドが遅い・・という問題に悩まされていました。

BUILDフェーズ(Docker buildなど)が遅い場合は、CodeBuildのせいではないので別に良いのですが、PROVISIONINGフェーズが遅い事が辛かったです。

PROVISIONINGはおそらくCodeBuildの実行環境であるDocker containerを起動しているのだと思います。181秒は流石に酷い。

解決までの道のり

  1. AWS SAに相談
  2. SA「Instance typeを上げてみては」
  3. SA「サポートチケットで技術サポートに相談推奨」
  4. 3GB, 2cpu => 15GB, 8cpuにスケールアップ 約40秒短縮
  5. AWSサポート「遅い・高速化という声は他にもあり、対応は検討中。お客様の環境では aws/codebuild/amazonlinux2-x86_64-standard:4.0 から aws/codebuild/amazonlinux2-x86_64-standard:3.0 に下げることで早くなることを確認しています」
  6. 理由は不明だが3.0に下げて約40秒短縮
  7. それでもまだPROVISIONINGは40-80秒程度はかかる
  8. そもそも他のビルドプロジェクトはPROVISIONINGが早い(10秒以下)
  9. 違いはAmazon LinuxかUbuntuだったので、Ubuntuに変えたら大幅に高速化された

結論

PROVISONINGの中身はAWSサポートでも詳しくは教えてくれないし、詳しく調査はしてくれない。

Ubuntuで早くなったので、皆さんUbuntuを使いましょう。あるいはGitHub Acitonsを使いましょう。

以上です。

追記1

結局のところ、AWSサポートの方法でも限界はあり、やはりPROVISIONINGが遅い・・・

そもそも起動フェーズは他社サービスだとせいぜい10秒以下であり、また私の知人などでもことごとくAWSのCODE系サービスで良い話を聞かない。

結局GitHub Actionsに乗り換えて快適だったので、無理にAWS統一などは考えずに初めから別のCI/CDサービスを利用するのが良さそうに思う