[PYTHON] Amazon SNS → AWS Lambda → Slack → Führen Sie AWS-Befehle in AWS Chatbot aus

Da AWS angekündigt hat, dass AWS-Befehle auf Slack ausgeführt werden können, habe ich geprüft, ob das Schreiben von anderen Diensten anstelle der direkten Eingabe unterstützt wird.

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

Vorbereitungen überspringen

Überspringen Sie die Einstellungen für die Verknüpfung von Slack und AWS Chatbot auf der ursprünglichen Site.

Lambda-Implementierung

Eine einfache Sache wie diese

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

Da die Variable "message" die von SNS gesendete Nachricht enthält, wird sie extrahiert. Die im Ereignis gespeicherten Daten von SNS lauten wie folgt.

{
  "Records": [
    {
      "EventSource": "aws:sns",
      "EventVersion": "1.0",
      "EventSubscriptionArn": "ARN-Inhalte",
      "Sns": {
        "Type": "Notification",
        "MessageId": "Nachrichten ID",
        "TopicArn": "SNS-Thema ARN",
        "Subject": "Titel",
        "Message": "Nachrichteninhalt",
        "Timestamp": "Lieferzeit",
        "SignatureVersion": "1",
        "Signature": "XXX",
        "SigningCertUrl": "https://XXX",
        "MessageAttributes": {}
      }
    }
  ]
}

Einstellungen auf der SNS-Seite

Stellen Sie den folgenden SNS ein, um Informationen an Lambda zu senden. (Sehr einfach, keine besonderen Einstellungen)

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

Versuchen Sie, eine Nachricht von SNS zu senden

Versuchen Sie, die folgende Nachricht von SNS zu veröffentlichen.

<@aws> help

Nach einer Weile wurde eine Nachricht auf der Slack-Seite veröffentlicht und das Ergebnis der Ausgabe des AWS-Befehls zurückgegeben.

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

Zusammenfassung

Es ist einfach, aber ich habe bestätigt, dass die Ausgabe von AWS-Befehlen über AWS Chatbot auch durch Schreiben von anderen Diensten an Slack erfolgen kann. Slack-> AWS Chatbot-> AWS-Befehlsausgabemöglichkeiten wurden erneut erweitert.

Recommended Posts

Amazon SNS → AWS Lambda → Slack → Führen Sie AWS-Befehle in AWS Chatbot aus
Terraform konfiguriert, um AWS Lambda von Amazon SQS aus zu starten
Lambda x Amazon SNS benachrichtigt Sie täglich per E-Mail über Ihre AWS-Rechnung
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Senden Sie eine Anfrage von AWS Lambda an Amazon Elasticsearch Service
Poste regelmäßig mit AWS Lambda auf Twitter!
So führen Sie Befehle mit einem Jupyter-Notebook aus
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Zusammenfassung des Schreibens von AWS Lambda
Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
[Einführung in AWS] Das erste Lambda ist Transcribe ♪
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
[AWS / Lambda] Laden einer externen Python-Bibliothek
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
Amazon API Gateway und AWS Lambda Python-Version