✨
AWSのリソースの作成を検知してSlackへ通知したい
はじめに
個人アカウントでAWSを使って遊んでる時に、きれいにお片付けできたらうれしいですよね?
今回はきれいにお片付けをするためにコンソールポチポチの結果作成されたリソースをSlackへ通知できるようにしてみました。
参考にした記事は以下
CloudTrailでAWSリソース作成を検知して通知する | DevelopersIO
ほぼほぼ同じ内容なので独自性としてメールでの通知ではなくLambdaを呼び出してSlackへの通知にしてます。
構成
CloudTrailの作成(同時にCloudWatchの作成)
1ページ目は次のようにしてください。
ポイントは次です。
- S3バケットとKMSは今回使わないので適当
- CloudWatchにログを出す設定にする(これで自動でCloudWatchが作られる)
- 各種名前はお好きに
2ページ目は次です。
この設定で作成してください
Lambdaの作成
私はJSに慣れてるのでJSで作りました。
/* global fetch */
const { ungzip } = require("pako");
export const handler = async (event) => {
const log = JSON.parse(
new TextDecoder().decode(ungzip(Buffer.from(event.awslogs.data, "base64"))),
);
const eventNames = log.logEvents
.map((event) => JSON.parse(event.message).eventName)
.join(", ");
await fetch("{SlackのwebhookのURL}",{headers:{"Content-Type":"application/json", body:JSON.stringify({text: `Resource Create: ${eventNames}`})}})
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
npm packageの導入は別の方の次の記事を参考にしてください。
lambdaでnpm moduleを使う方法 - Qiita
この時lambdaが受け取るログはbase64でエンコードされたうえでgzip化されているのでデコードしてます。
エンコードのされ方に関する詳細は次のリンク
CloudWatch Logs サブスクリプションフィルターの使用 - Amazon CloudWatch Logs
LambdaでCloudWatchを購読
次のように設定してください。
この時、最初に作成したCloudWatchをLogGroupで指定してください。
また、FilterPatternでリソース作成のイベントだけ購読するよう設定してます。
Discussion