背景
以前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が直接呼ばれていることがわかります。