#■はじめに
CloudWatchのアラームをSlackへ通知する方法に関する備忘録。
Lambdaのランタイムはpython3.7。
#■基本的な設定について
【参考】CloudWatchアラーム通知をSlackにする
https://qiita.com/hf7777hi/items/e0f43f0fb7e2effa0af8
KMSは20,000リクエストの無料枠がありますが、KMSキーの管理費用は発生する。
KMSのキー削除は最低7日間の保留期間が設定されるため即時削除できない。
#■KMSを使用しない設定について
【参考】Lambdaのcloudwatch-alarm-to-slackで無料と思ってKMS暗号化キーを使ったら2円かかったので関数修正した
https://qiita.com/hf7777hi/items/6226a17ddfc17ad9268c
環境変数「kmsEncryptedHookUrl」の値をIncoming WebhookのURLに設定する。
環境変数に設定するURLが平文になったので、コードを修正。
(57行目あたりで2か所)
# The base-64 encoded, encrypted key (CiphertextBlob) stored in the kmsEncryptedHookUrl environment variable
###(1)次の行を修正###
HOOK_URL = os.environ['kmsEncryptedHookUrl']
#ENCRYPTED_HOOK_URL = os.environ['kmsEncryptedHookUrl'] #元のコードを一応記載。
# The Slack channel to send a message to stored in the slackChannel environment variable
SLACK_CHANNEL = os.environ['slackChannel']
###(2)次の行をコメントアウト###
#HOOK_URL = "https://" + boto3.client('kms').decrypt(CiphertextBlob=b64decode(ENCRYPTED_HOOK_URL))['Plaintext'].decode('utf-8')
#■テスト用データのサンプル
【参考】[JAWS-UG CLI] Lambda:#17 Lambda cloudwatch-alarm-to-slack (Python版)
https://qiita.com/tcsh/items/aba31b172cae992aebb3
{
"Records": [
{
"EventVersion": "1.0",
"EventSubscriptionArn": "arn:aws:sns:EXAMPLE",
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "{\"AlarmName\": \"testSlack\", \"NewStateValue\": \"NG\", \"NewStateReason\": \"test for Slack\"}",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": "arn:aws:sns:EXAMPLE",
"Subject": "TestInvoke"
}
}
]
}