AWS LambdaからChatbotでSlack通知
https://gyazo.com/1375fbf3b7110538569984e642b6bf25
結論
Lambda -> SNS -> Chatbotの経路は2022年2月時点でサポートされてないので素直にCloudWatchアラームを経由する。
Lambda関数のInvokeやErrorをトリガーにすればよい。
ハマリポイント?
Chatbotは一部のサービスのSNS配信先として設定するとよしなにSlack通知+グラフ表示などしてくれる。
一方で、サポートしてないサービスでSNS配信先に設定した場合SNS配信でエラーになってなにもおきない。
Chatbotでの投稿失敗であってSNSトピックへのPush自体は通ってるのでわかりにくいがChatbotのログを有効化しておくとわかる。
CloutWatchアラームからSlack通知だとエラーになったことしかわからないので、通知用Lambdaを別に作って呼び出したほうが情報量は多い。
EventBridgeスケジュールイベント -> Lambda A(エラー) -> Lambda B
と流したときのLambda Bが受け取るEventはこんな感じ。
code:json
{
"version": "1.0",
"timestamp": "2022-02-02T15: 36: 33.162Z",
"requestContext": {
"requestId": "923d1a32-7765-4143-8e7d-187453b2caac",
"functionArn": "arn:aws:lambda:ap-northeast-1: xxxxxxxxxx:function:TestEventArgs:$LATEST",
"condition": "RetriesExhausted",
"approximateInvokeCount": 3
},
"requestPayload": {
"version": "0",
"id": "539e545e-990d-bb79-3fac-fbd6f6172c26",
"detail-type": "Scheduled Event",
"source": "aws.events",
"account": "xxxxxxxxxxx",
"time": "2022-02-02T15: 33: 00Z",
"region": "ap-northeast-1",
"resources": [
"arn:aws:events:ap-northeast-1: xxxxxxxxxxxx:rule/TestTimer"
],
"detail": {}
},
"responseContext": {
"statusCode": 200,
"executedVersion": "$LATEST",
"functionError": "Unhandled"
},
"responsePayload": {
"errorMessage": "name xxx is not defined",
"errorType": "NameError",
"requestId": "923d1a32-7765-4143-8e7d-187453b2caac",
"stackTrace": [
" File /var/task/lambda_function.py, line 6, in lambda_handler\n xxx\n"
]
}
}