こんにちは。
表題の通り、CloudWatch の Alarm 通知を Chatwork に通知してみます。
ランタイムは前回と同じく python 3.7 です。
ROOMNO にメッセージを通知するルームナンバ、 TOKEN に ChatWorkToken を定義すれば動きます。
import boto3
import json
import logging
import os
import urllib
from base64 import b64decode
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
# Chatwork のルームナンバ定義
ROOMNO = 'xxxxxxxxxxxxxxxx'
# WEB_HOOKURL
URL = f'https://api.chatwork.com/v2/rooms/{ROOMNO}/messages'
# ChatWorkToken 定義
TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info("Event: " + str(event))
# メッセージ取得
message = json.loads(event['Records'][0]['Sns']['Message'])
logger.info("Message: " + str(message))
alarm_name = message['AlarmName']
new_state = message['NewStateValue']
reason = message['NewStateReason']
# ヘッダ情報
headers = {
'X-ChatWorkToken': TOKEN,
}
# 通知内容
sns_message = {
'body': "%s state is now %s: %s" % (alarm_name, new_state, reason),
}
# エンコード
msns_message = urllib.parse.urlencode(sns_message)
msns_message = msns_message.encode('utf-8')
# リクエスト発行
req = Request(URL, data=msns_message, headers=headers)
with urlopen(req) as res:
result = json.loads(res.read().decode("utf-8"))