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秒は流石に酷い。
解決までの道のり
- AWS SAに相談
- SA「Instance typeを上げてみては」
- SA「サポートチケットで技術サポートに相談推奨」
- 3GB, 2cpu => 15GB, 8cpuにスケールアップ 約40秒短縮
- AWSサポート「遅い・高速化という声は他にもあり、対応は検討中。お客様の環境では aws/codebuild/amazonlinux2-x86_64-standard:4.0 から aws/codebuild/amazonlinux2-x86_64-standard:3.0 に下げることで早くなることを確認しています」
- 理由は不明だが3.0に下げて約40秒短縮
- それでもまだPROVISIONINGは40-80秒程度はかかる
- そもそも他のビルドプロジェクトはPROVISIONINGが早い(10秒以下)
- 違いはAmazon LinuxかUbuntuだったので、Ubuntuに変えたら大幅に高速化された
結論
PROVISONINGの中身はAWSサポートでも詳しくは教えてくれないし、詳しく調査はしてくれない。
Ubuntuで早くなったので、皆さんUbuntuを使いましょう。あるいはGitHub Acitonsを使いましょう。
以上です。
追記1
結局のところ、AWSサポートの方法でも限界はあり、やはりPROVISIONINGが遅い・・・
そもそも起動フェーズは他社サービスだとせいぜい10秒以下であり、また私の知人などでもことごとくAWSのCODE系サービスで良い話を聞かない。
結局GitHub Actionsに乗り換えて快適だったので、無理にAWS統一などは考えずに初めから別のCI/CDサービスを利用するのが良さそうに思う