LoginSignup
0

More than 3 years have passed since last update.

CodeBuildのビルド環境にSessionManagerで入ってみた

Last updated at Posted at 2020-12-23

CircleCIだとSSHを使用してビルド コンテナにアクセスできますが
CodeBuildも 2020年07月からSessionManagerを使って中に入れるようになっていたので使ってみました。
https://aws.amazon.com/jp/about-aws/whats-new/2020/07/aws-codebuild-now-supports-accessing-build-environments-with-aws-session-manager/

普段ビルドプロジェクトのソースはCodePipelineにしているため、デバッグ用に個別実行する時はソースをS3変更する必要がありました。(後述)

やりかた

公式ドキュメント に書いてある通りですが。

1. BuildProjectのサービスロールに権限を追加

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

2. ビルド一時停止するコマンド(codebuild-breakpoint)をbuildspecに追加しておく

phases:
  build:
    commands:
      - codebuild-breakpoint ←追加
      - python -m unittest discover tests

3. 「Enable session connection」にチェックを入れて実行

  1. [Advanced build overrides (高度なビルドの上書き)] で環境上書き設定を表示させる
    CodeBuild_-_AWS_Developer_Tools-2.png
    CodeBuild_-_AWS_Developer_Tools-3.png

  2. [Enable session connection(セッション接続を有効にする)] にチェックを入れる
    CodeBuild_-_AWS_Developer_Tools-4.png

(オプション)ソースの変更

例えば普段はCodePipelineをソースにしているプロジェクトで、そのままマネコンから実行しようとするとエラーが出ます。
CodePipelineで直前に失敗したビルドのアーティファクトをS3ソースとして直接指定してやることで同じソースから実行できます。

  1. 直前に失敗したビルドの Srouce Vesionからバケットとアーティファクトファイルを確認
    CodeBuild_-_AWS_Developer_Tools-5.png

  2. それを手動実行のビルドのソースとして指定
    CodeBuild_-_AWS_Developer_Tools.png

4. codebuild-breakpointのところで止まるのでブラウザから入る

接続可能な状態になると Buils statusの右下に Session Manager へのリンクが出現するのでクリック

CodeBuild_-_AWS_Developer_Tools.png

codebuild-breakpointで止めなくても現れますが、入ろうとしたらビルドが進んで終わっちゃったりしたので、止めて入るのがいいかなと思います。

AWS_Systems_Manager_-_Session_Manager_と_AWS_CodeBuild_が、AWS_Session_Manager_でビルド環境へのアクセスをサポートするように.png

5. おわったら「codebuild-resume」でビルドを再開して出る

CodeBuild側からみた実行状況
CodeBuild_-_AWS_Developer_Tools.png

ローカルで成功していたはずのunittestが失敗していましたが、中に入って調べたおかげで原因解明できました。やったー!

備考

普段CodePipelineからCodeBuildを実行しているんですが、その場合「Enable session connection」にチェックを入れる相当の設定が見つけられなかったので、CodeBuild単独で動かして中に入っています。

普段から「codebuild-breakpoint」をbuildspecに仕込んでおいて、デバッグが必要なときだけCodeBuildから「Enable session connection」有効にして実行する。という運用がいいんですかね。

※「Enable session connection」してない場合はcodebuild-breakpointおよび codebuild-resume コマンドは無視される仕様。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0