Help us understand the problem. What is going on with this article?

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

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

https://aws.amazon.com/jp/blogs/devops/running-aws-commands-from-slack-using-aws-chatbot/

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コマンド発行の可能性がまた広がりました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした