Pull request駆動をAWS Codeシリーズで実現するTerraformテンプレート2
どんな記事?
- AWS Codeシリーズで、Pull request駆動を実現するサンプルをご紹介
- 以前ご紹介した実装をよりシンプルにしました
- Terraformで一撃デプロイできる状態で、GitHubに公開しています
作ったもの
CodeCommitのpull requestを検知して、CodeBuildを起動するterraformテンプレートです。
GitHubなどのほかのホスティングサービスだとマネージドで実現できる「Pull requestを契機に動かす🚀」ができるようになります。
検知契機
- Pull requestの作成時
- Pull requestの元ブランチの更新時
です。
つまり、一度Pull requestを投げてしまえば、以降は変更を自動で監視してビルド/テストしてくれるようになります。
結果通知
buildspec.yml
の中で、ビルド/テストの成功失敗を通知するようにしているため、↓のようにPull requestのアクティビティタブに実行結果が表示されます。
作った理由
僕は、Pull request駆動な開発スタイルが好きで、実は以前も同様のことを実現するテンプレートを作っています。
なのですが、ちょっと仕組みが複雑でメンテナビリティに問題があったので、もっとシンプルにできないか、ということで作ったのが今回のサンプルです。
以前の記事
アーキテクチャ
全リポジトリで共用するCodeBuildプロジェクトを1つだけ作り、CodeCommitのPull requestを検知するたびに、パラメータを上書きして実行する形式です。
Lambdaが必要なのはどうして?
本当であれば、EventBridgeから直接CodeBuildを呼び出したいところなのですが、CodeBuildの制約ゆえにやむなくLambdaを挟んでいます。
というのも、CodeBuildはEventBridgeの入力を動的に受け取る機能(Dynamic path parametesというらしい)に対応していないためです。
そのため、EventBridgeの入力をすべて受け取れるLambdaでいったんイベント内容をうけとって、Lambda内で受け取ったパラメータを使ってCodeBuildを呼び出す構成にしています。
ソースはこちら
以前作成したものよりも、かなりシンプルになり、メンテナンスしやすくなったと思います。
最小限の状態で留めているので、こちらに通知用のSNSや除外設定用のDynamoDBを追加して、自分好みに仕上げてください。
Discussion