Secret Staircase

CodePipelineの開始と終了時にSlackに通知する

CodePipelineの開始と終了時にSlackに通知する機能をRustとTerraformで作りました。この手の話はググるとたくさん出てきますが、RustでLambda関数を試してみたかったので作ってみました。

GitHubのリポジトリはこちらです。 akr4/codepipeline-slack

Terraformのモジュールになっているので比較的簡単に再利用できるかと思います。詳しい使い方はGitHubのREADME.mdを見てください。

CodePipelineのビルド開始時、成功時、失敗時(正確にはステータス変更時)にこんな感じでSlackに通知されます。

Example Slack messages

仕組みとしてはCloudWatch EventsでCodePipelineのステータス変更イベントをサブスクライブしてSlackに通知するLambdaを実行しています。

Overview

RustでのLambdaについて

awslabs/aws-lambda-rust-runtimeを使うことで簡単にRustでLambda関数を作ることができます。

Lambda用バイナリのクロスビルド環境を用意してもよいですが、softprops/lambda-rustを使えばDockerだけ用意すればよいので簡単です。また擬似Lambda環境をDockerコンテナとして提供しているlambci/docker-lambda#documentationを使えばローカル環境でテストすることもできます。

これらのおかげで開発は結構楽でした。ただいざAWS環境にデプロイしてCloudWatch Eventを発火させてみると、Lambda関数に渡させるイベントに予想と異なる部分がありハマりました。aws-lambda-rust-runtimeはserdeを使ってイベントをデシリアライズした後で自分で書いたハンドラー関数を呼ぶので、自分で定義したイベント型が実際のjsonと異なっていると自分のハンドラー関数に制御がくる前にエラーになります。エラーメッセージもあまり役に立たないし困りました。

とにかくRustを使えることで自分にとってはLambda関数を書きやすくなるし、全体としては良い体験でした。

comments powered by Disqus