TECHSTEP

ITインフラ関連の記事を公開してます。

【メモ】EventBridge Input Transformationを利用してCodeBuild起動時のCommit IDを指定する

背景

以前PR作成時にCodeBuildでCommit IDを対象にビルドを開始する方法を検証したのですが、Amazon EventBridgeのInput Transformationを使うと同じ事が簡単にできることを知ったので、今回はこちらを試してみます。

方法

Input Transformationとは、EventBridgeが情報をターゲットに渡す前に、イベントからの情報をカスタマイズする機能です。

以前はEventBridgeのイベントからsourceCommitというパラメータを取り出し、Lambda関数からCodeBuildを起動する際にこれを渡すことで実現しました。しかしこの時はCodeBuildを起動するためにLambda関数を利用しており、ここで余計なリソースを使っているとも言えます。

今回はLambda関数を介さずEventBridgeとCodeBuildを直接接続することができるため、余分なLambda関数を削除できます。

確認

今回は以下のリソースを用意しました。

  • Amazon EventBridge: 前回のイベントパターンに加え、後述するInput Transformationの設定を追加します。
  • AWS CodeBuild: デフォルトでは main ブランチをターゲットに設定します。
  • AWS CodeCommit: 事前にテスト用のファイルと buildspec.yml を用意します。buildspec.yml前回と同じものを使用しました。

今回はEventBridgeのInput Transformationに以下のような設定を入れています。設定画面にある 入力パス はイベントから取り出す変数を定義し、 入力テンプレート にはターゲットに渡す情報のテンプレートを定義します。ここではEventBridgeのイベントから sourceCommit の情報を取り出し、sourceVersion キーに対応する値としてCodeBuildに渡します。

この状態で以下のPull Requestを作成します。

Pull Requestを作成するとEventBridgeが検知し、CodeBuildを起動します。実行後のログを確認すると、Pull Requestの修正内容が表示されていることを確認できます。

最後にCodeBuildに記載されるCommit IDを見ると、Pull Request作成時のCommit IDが使われていることが確認できます。またCodeBuild画面の イニシエーター を見ると、前回はここがLambda関数が記載されていたのが、今回はEventBridgeのルール名に変わっています。ここからもEventBridgeからCodeBuildが直接呼ばれていることがわかります。

参考