この記事について

CodeBuildでは専用のビルドコンテナをビルド実行ごとに作成/起動して、その上でビルド等の処理を実行します(=ビルドプロジェクト)。実行コマンドなどの処理内容をbuildspec.ymlというファイルに定義するのが一般的です。

buildspce.ymlの内容に不備がある場合、ビルドプロジェクトは失敗します。このようなケースではbuildspec.ymlにデバッグ用のコマンド(echo …..とか)を仕込んでおき、ビルド実行ログを確認してトラブルシュートを行います。

これしかトラブルシュートのしようがないと思っていたのですが、どうやらCodeBuildのビルドコンテナにログインする方法があるようです。

この記事では実際にCodeBuildのビルドプロジェクトを作成して、ビルドコンテナにログインする手順を紹介します。

 

そもそもCodeBuildとは

CodeBuildは、サーバレスでソフトウェアのビルドやテストなどの処理を自動化するためのAWSサービスです。

開発者は、ソースコードを提供します。CodeBuildはそのコードをビルドし、テストし、アーティファクト(デプロイに利用するファイル郡)を生成します。これにより、CI/CDプロセスを容易に構築し、アプリケーションの品質向上と迅速なデプロイを支援します。

簡単な設定で使いやすく、多くのプログラミング言語やフレームワークに対応しています。

 

ビルドコンテナへログインする仕組み

buildspec.ymlにブレークポイントコマンドを埋め込むことで、そこでビルドプロジェクトが一時停止します。そして一時停止している間にSystems ManagerのSession Managerを利用して、ビルドコンテナにログインします。

詳細は公式ドキュメントをご参照ください。

 

ではやってみる

まずはCodeBuildでビルドプロジェクトを作成します。

今回はあくまでCodeBuildのビルドコンテナにログインしたいだけなので、ソースはなしにしています。

ビルドコマンドを定義します。
本来ならここにビルドやテストの処理にて実行するコマンドを定義します。

今回はcodebuild-breakpointのみ定義します。
この記述があるポイントで、ビルドコンテナは一時停止します。

あとはデフォルトで良いです。

右上の「上書きでビルドを開始する」をクリックします。

右上の「高度なビルドの上書き」をクリックします。

ビルドタイプを単一ビルドに変更します。

「セッション接続の有効化」と「AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする」にチェックを入れて、ビルドを開始します。

「AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする」にチェックをいれることで、CodeBuildのロールにセッションマネージャにアクセスするためのポリシーが自動でアタッチされます。

{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}

ビルドログを見るとブレークポイントで停止していることがわかります。

[Container] 2023/09/28 06:16:07 Running command codebuild-breakpoint 2023/09/28 06:16:07 Build is paused temporarily and you can use codebuild-resume command in the session to resume this build

右下の「AWSセッションマネジャー」をクリックして、ビルドコンテナにログインします。

ビルドコンテナにログインすることができました。

以下コマンドを実行することで、ビルド処理が再開されます。

codebuild-resume

最後に

この機能を使えばサーバレス環境のビルドコンテナに簡単にログインすることができます。これでデバッグ用のechoコマンドとはおさらばです。

AWSでは本記事で紹介した機能だったり、FargateコンテナにSession Manager経由でログインできたり、サーバレスのデメリットである運用のしにくさを緩和させてくれる機能が豊富です。これらの機能をフル活用して、効率的に運用をしていきたいですね。