掲題の通り、 2020/07/21 のアップデートによって実行中の CodeBuild のビルド環境に入れるようになりました。
- AWS CodeBuild now supports accessing Build Environments with AWS Session Manager
- AWS CodeBuild - View a running build in Session Manager
これまで、 CodeBuild の実行中の環境をデバッグする方法はログ出力を確認して都度 buildspec を修正する、といった程度でした。今回のアップデートによって、実行中のビルドジョブを一時停止して、ユーザーがシェル環境に入って調査タスクを行えるようになりました。
今回はこの機能について紹介してみます。
前提
この機能はログインするために Session Manager を利用しています。そのため、前提条件として CodeBuild のサービスロールに Session Manager のためのポリシーを付ける必要があります(マネジメントコンソール上で、ビルドジョブ実行時に自動的に権限を付与させることも可能です)。
どうやって試せばいいの?
詳しいことは GitHub で公開していますので、そちらをご覧ください。
GitHub - hassaku63/codebuild-sessionmanager-sample
CloudFormation のスタックを用意していますので、さくっと検証していただけると思います。ざっくりした手順も書きましたので、そちらもご覧ください。
hassaku63/codebuild-sessionmanager-sample - How to try it ?
Python プロジェクトで、ユニットテストを実行するジョブを実行させる想定で buildspec を書いています。buildspec はスタック定義にベタ書きです。
既に buildspec.yml を含んだコードレポジトリを持っている方であれば、スタックの buildspec のプロパティを削除していただければOKです。
使いどころ
本番環境で必要になる機能ではないと思うので、開発フェーズにおける検証に利用するものとして使っていくことになると思います。
例えば、Python であれば以下のようなケースで使っていただくのが良いのではないかと思います。
- 意図した通りに virtualenv が効いていないように見える
- ビルド環境でインストールされている依存関係をチェックしたい
- 処理系のランタイム指定がちゃんと効いているかどうかを確認したい
さいごに
例示のスタックでは Session Manager を利用するためのポリシーを CodeBuild に直接渡してしまっています。このポリシーは本番環境では(おそらく)不要かと思います。dev環境だけに適用したい場合は CloudFormation の if 関数を使うなどして開発環境の場合のみポリシーをアタッチするように書くなどすると良いと思います。
CodeBuild のイメージは公開されているので、従来でもローカルでコンテナを立ち上げればビルド環境のシェルに入ること自体はできました。ただ、手軽にデバッグするなら実環境に入れた方が手軽でいいですよね。イメージ自体もかなりヘビーなのであんまりローカルに pull したくないですし(7GB くらいあったと思います。うろ覚えです)。
このアップデート、デバッグが捗る非常に便利な機能ですね。使える場面ではどんどん使っていこうと思います。