つかびーの技術日記

(情報)工学修士, 元SIer SE, 現Web系 SEの技術blogです。Scala, Java, JS, TS, Python, Ruby, AWS, GCPあたりが好きです。

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

   

TL;DR

  • Amazon Linux2ではなくUbuntuを使う
  • instance typeをgeneral1.smallからgeneral1.largeに変えてみる
  • Imageのversionを例えばAmazon Linux 4系から3系に下げる

背景と問題

仕事で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を使いましょう。

以上です。

 - 未分類