🚀

Pull request駆動をAWS Codeシリーズで実現するTerraformテンプレート2

2022/11/12に公開

どんな記事?

  • AWS Codeシリーズで、Pull request駆動を実現するサンプルをご紹介
  • 以前ご紹介した実装をよりシンプルにしました
  • Terraformで一撃デプロイできる状態で、GitHubに公開しています

作ったもの

CodeCommitのpull requestを検知して、CodeBuildを起動するterraformテンプレートです。

GitHubなどのほかのホスティングサービスだとマネージドで実現できる「Pull requestを契機に動かす🚀」ができるようになります。

検知契機

  1. Pull requestの作成時
  2. Pull requestの元ブランチの更新時

です。

つまり、一度Pull requestを投げてしまえば、以降は変更を自動で監視してビルド/テストしてくれるようになります。

結果通知

buildspec.yml の中で、ビルド/テストの成功失敗を通知するようにしているため、↓のようにPull requestのアクティビティタブに実行結果が表示されます。

実行結果

作った理由

僕は、Pull request駆動な開発スタイルが好きで、実は以前も同様のことを実現するテンプレートを作っています。
なのですが、ちょっと仕組みが複雑でメンテナビリティに問題があったので、もっとシンプルにできないか、ということで作ったのが今回のサンプルです。

以前の記事
https://zenn.dev/jimon/articles/bb5ee21a70c93d

アーキテクチャ

Architecture

全リポジトリで共用するCodeBuildプロジェクトを1つだけ作り、CodeCommitのPull requestを検知するたびに、パラメータを上書きして実行する形式です。

Lambdaが必要なのはどうして?

本当であれば、EventBridgeから直接CodeBuildを呼び出したいところなのですが、CodeBuildの制約ゆえにやむなくLambdaを挟んでいます。

というのも、CodeBuildはEventBridgeの入力を動的に受け取る機能(Dynamic path parametesというらしい)に対応していないためです。

https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-targets.html

そのため、EventBridgeの入力をすべて受け取れるLambdaでいったんイベント内容をうけとって、Lambda内で受け取ったパラメータを使ってCodeBuildを呼び出す構成にしています。

ソースはこちら

以前作成したものよりも、かなりシンプルになり、メンテナンスしやすくなったと思います。
最小限の状態で留めているので、こちらに通知用のSNSや除外設定用のDynamoDBを追加して、自分好みに仕上げてください。

https://github.com/Jimon-s/terraform-example-codebuild-triggered-by-pull-request-2

Discussion