LoginSignup
4

More than 5 years have passed since last update.

AWS RDS イベントサブスクリプションの通知を Slack へ流す(Lambda Python3.6)

Last updated at Posted at 2017-12-03

IAM ロール作成

ロール名:rdsevents-to-slack
信頼関係:Lambda
ポリシー:AWSLambdaBasicExecutionRole(AWS 管理ポリシー)

Lambda 作成

リージョン:東京 (ap-northeast-1)
関数の作成:一から作成(設計図 cloudwatch-alarm-to-slack を参考)
名前:rdsevents-to-slack
ランタイム:Python 3.6
ロール:rdsevents-to-slack
コードエントリタイプ:コードをインラインで編集
ハンドラ情報:lambda_function.lambda_handler
関数コード:

import os
import json
import logging
from datetime import datetime, timedelta
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
 
Slack_Webhook_URL = os.environ['SLACK_WEBHOOK_URL']
 
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))
     
    slack_text1 = (datetime.strptime(message["Event Time"][:-4], '%Y-%m-%d %H:%M:%S') + timedelta(hours=9)).strftime("%Y/%m/%d %H:%M:%S")
    slack_text2= "%s: %s" % (message["Source ID"], message["Event Message"])
    slack_text = slack_text1+ "\n" + slack_text2
 
    slack_message = {
        'username': "AWS Norifier",
        'text': "*[ALARM] AWS RDS Events*",
        'icon_emoji': ":bangbang:",
        'attachments': [
            {
                "text": slack_text
            }
        ]
    }
     
    req = Request(Slack_Webhook_URL, json.dumps(slack_message).encode('utf-8'))
    try:
        response = urlopen(req)
        response.read()
        logger.info("Message posted to %s", Slack_Webhook_URL)
    except HTTPError as e:
        logger.error("Request failed: %d %s", e.code, e.reason)
    except URLError as e:
        logger.error("Server connection failed: %s", e.reason)

環境変数
 SLACK_WEBHOOK_URL:Slack の Webhook URL

基本設定
 タイムアウト:5分

AWS SNS 設定

トピック:rdsevents-to-slack

サブスクリプション
 プロトコル:AWS Lambda
 エンドポイント:arn:aws:lambda:ap-northeast-1:************:function:rdsevents-to-slack 

RDS イベントサブスクリプション 設定

通知の送信先:SNS rdsevents-to-slack

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4