LoginSignup
1
0

More than 3 years have passed since last update.

Amazon SNS → AWS Lambda → Slack → AWS ChatbotでAWSコマンドを実行する

Last updated at Posted at 2019-12-03

AWSからSlack上でAWSコマンドが実行できる、という発表があったので、直接入力ではなく他のサービスからの書き込みでも対応しているのか確認してみた。

Product-Page-Diagram_Chatbot-How-it-Works_Console_FINAL@2x_cropped-1024x433.png

事前準備はスキップ

SlackとAWS Chatbotの紐付け設定などは本家サイトにあるのでスキップ。

Lambdaの実装

こんな感じのシンプルなもの

import json
import os
import logging
import urllib.request

logger = logging.getLogger(__name__)

SLACK_URL = os.environ['SLACK_URL']

def lambda_handler(event, context):
    logger.info('Start Slack message sending.')
    message = event['Records'][0]['Sns']['Message']

    params = {
        "text": message,
        "icon_emoji": ":heavy_exclamation_mark:"
    }
    text = "payload=" + json.dumps(params)
    request = urllib.request.Request(
        SLACK_URL, 
        data = text.encode("utf-8"), 
        method="POST"
    )
    with urllib.request.urlopen(request) as response:
        response = response.read().decode("utf-8")
        return response

message変数にはSNSから送られてきたメッセージが入っているので、それを抽出しています。eventに格納されるSNSからのデータは以下の通り。

{
  "Records": [
    {
      "EventSource": "aws:sns",
      "EventVersion": "1.0",
      "EventSubscriptionArn": "ARN内容",
      "Sns": {
        "Type": "Notification",
        "MessageId": "メッセージID",
        "TopicArn": "SNSのトピックARN",
        "Subject": "タイトル",
        "Message": "メッセージ内容",
        "Timestamp": "送付時刻",
        "SignatureVersion": "1",
        "Signature": "XXX",
        "SigningCertUrl": "https://XXX",
        "MessageAttributes": {}
      }
    }
  ]
}

SNS側の設定

以下のようなSNSの設定をしてLambdaに情報を流すようにする。(とてもシンプルで、特に特殊な設定はしていないです)

スクリーンショット 2019-12-03 8.54.54_deco.png

メッセージをSNSから送付してみる

以下のようなメッセージをSNSからPublishしてみます。

<@aws> help

<XXX>はSlackでメンションを送る際の記法。

しばらくするとSlack側にメッセージが投稿され、AWSコマンドの発行結果が返ってきました。

スクリーンショット 2019-12-03 8.54.54_deco.png

まとめ

簡単にですが、AWS Chatbotを通じてAWSコマンドを発行することは、Slackへの他サービスからの書き込みでもできることが確認できました。Slack -> AWS Chatbot -> AWSコマンド発行の可能性がまた広がりました。

1
0
0

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
1
0