これは何?
CodeBuild のトラブルシューティングメモ。
環境について
Github -> CodePipeline -> CodeBuild -> EFS
Github へのプッシュイベントを受けて CodePipeline が着火。
CodeBuild にてビルド後、 EFS へデプロイする構成。
事象
CodeBuild のビルドが BUILD_TIMED_OUT: Build has timed out.
のエラーになる。(問題なくビルドが動いていた環境で突如エラーが出るようになった。)
<確認したポイント>
-
CodeBuild の構成変更はしておらず、S3 からダウンロードするソースアーティファクトのサイズも成功していたビルドと大差なし。
-
IAM や S3 といったポリシー周りの設定変更もなかった。
原因
結論としては、原因不明で調査終了。
原因の切り分け作業中に何故か復旧した。
AWS サポートに障害情報を確認したが特に障害は発生していないということで、
これ以上の調査は難しいということになり調査は打ち切りられた。
CodeBuild のトラブルシューティング
迷宮入りしてしまったが CodeBuild のトラブルシューティングで何をやったのかメモとして残しておく。
1. ビルドのタイムアウトを10分などに伸ばしてビルドを実行する
ビルドタイムアウトの時間がデフォルトの「5分」で設定されていた。
エラーメッセージ的にタイムアウトのエラーであった為、一時的にプロジェクトのタイムアウトの時間を「10分」などでビルドする。
2.エラーになったソースアーティファクトを使用してビルドを実行する
Github のコードが関連するかの切り分け。
CodeBuild のデバッグとして、「高度なビルドの上書き」が可能なのでこれを使う。
対象プロジェクトを選択後、「上書きビルドで開始する」->「高度なビルドの上書き」からソースプロバイダーを選択可能。
エラーになったビルドのソースアーティファクトを指定してビルドする。
3.CodeBuild から S3 をソースプロバイダとしてビルドを実行する
CodePipeline からの実行が起因するかの切り分け。
また、Github のソースコードに原因があるかの切り分けのために Github のソースコードを利用せず、別途事前にサンプルファイルを S3 に ZIP をアップロードし、「高度なビルドの上書き」にてビルド可能か試す。
4.ソースプロバイダーで「ソースがありません」を指定してビルドする
S3 への接続による問題かの切り分け。
「上書きビルドで開始する」->「高度なビルドの上書き」によってソースプロバイダーが選択できますのでこちらで「ソースがありません」を選択可能。
buidspec.ymlの指定が出来ないので「ビルドコマンドの挿入」で適当なOSコマンドを指定してビルド実行。
5.CodeBuild プロジェクトから一度 EFS の設定を外してビルドする
EFS との接続の問題がある場合、DOWNLOAD_SOURCE にてエラーになることがあるとのこと。(AWS サポートの回答より)
現時点の動きでは DOWNLOAD_SOURCE フェーズにて EFS のマウント処理が実施されます。
例えば EFS 側のセキュリティグループのインバウンドが許可されていない場合、DOWNLOAD_SOURCE フェーズにて「CLIENT_ERROR: mounting '127.0.0.1:/' failed. connection reset by peer」というエラーになり、ビルドが失敗します。
今回のエラーはタイムアウトであり上記とは異なりますが、DOWNLOAD_SOURCE フェーズにて EFS のマウント処理が行われる為、DOWNLOAD_SOURCE フェーズにて問題が発生した場合には切り分けの一つとして EFS の確認を行う方法は有効であると考えております。
一度 EFS の設定を外して EFS が起因するかの切り分ける。
「高度なビルドの上書き」では EFS の設定解除がない為、一時的に EFS の設定を CodeBuild プロジェクトから解除してからビルドする。
以上