Elastic Beanstalk のヘルスやデプロイ完了などの通知は、作成時にメールアドレスを入力しておくと SNS を経由して送信されてきますが、デプロイ通知をメールで送られても見ないので Slack に流します。
一応 SNS を手動で作成して設定しておけば、JSON として内容を取得することが出来ます。
しかし、含まれているメッセージはメールで送信される前提となっているので、単純に環境情報などを取得することが出来ないのが欠点です。なので正規表現を使ってサクッとばらします。
個人的な趣味で C# を使った Lambda Function を実装しました。ソースは GitHub で公開済みです。
Lambda にデプロイして通知したい Beanstalk に SNS Topic を追加しておきます。SNS Topic の設定はマネジメントコンソールからは行えないので、AWS CLI を使います。
地味に Elastic Beanstalk を使う場合には AWS CLI が必要な気がします。
aws elasticbeanstalk update-environment --environment-id e-xxxxx \ --option-settings Namespace=aws:elasticbeanstalk:sns:topics,OptionName="Notification Topic ARN",Value=arn:aws:sns:ap-northeast-1:xxxxx:xxxxx
設定後に適当に Beanstalk にアプリケーションをデプロイすると、完了後に Slack に以下のような通知が飛んでくるはずです。Application のリンクはマネジメントコンソールに飛べるようにしてます。
Environment は名前が含まれていないのでリンクに出来なかったですが、Lambda のロール設定と AWS SDK を使えば API 経由で取れる気がしてます。この辺りはアイディア勝負感あります。
適当に存在しないヘルスチェック URL を指定してみると、ステータスが変化していくのを Slack で確認することが出来ます。もうちょっと情報を含めたい感じはします。
AWS SDK を使えばもうちょっと情報が取れると思うので、イベントの情報とかも流してみるのは良さそうな気がしました。特に WARN 以上のログは結構気になるものが多いです。
他にも SNS からのイベントをクラスにマッピングするようにしてるので、通知元の Beanstalk によって別々の Slack Channel に流すことなども出来ます。