[PYTHON] Amazon SNS → AWS Lambda → Slack → Exécuter des commandes AWS sur AWS Chatbot

Depuis qu'AWS a annoncé que les commandes AWS peuvent être exécutées sur Slack, j'ai vérifié s'il prend en charge l'écriture à partir d'autres services au lieu de l'entrée directe.

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

Passer les préparatifs

Ignorez les paramètres de liaison de Slack et d'AWS Chatbot tels qu'ils se trouvent sur le site d'origine.

Implémentation Lambda

Une chose simple comme ça

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

Puisque la variable message contient le message envoyé depuis SNS, il est extrait. Les données de SNS stockées dans l'événement sont les suivantes.

{
  "Records": [
    {
      "EventSource": "aws:sns",
      "EventVersion": "1.0",
      "EventSubscriptionArn": "Contenu ARN",
      "Sns": {
        "Type": "Notification",
        "MessageId": "ID du message",
        "TopicArn": "Rubrique SNS ARN",
        "Subject": "Titre",
        "Message": "Contenu du message",
        "Timestamp": "Heure de livraison",
        "SignatureVersion": "1",
        "Signature": "XXX",
        "SigningCertUrl": "https://XXX",
        "MessageAttributes": {}
      }
    }
  ]
}

Paramètres côté SNS

Configurez le SNS suivant pour envoyer des informations à Lambda. (Très simple, pas de paramètres spéciaux)

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

Essayez d'envoyer un message depuis SNS

Essayez de publier le message suivant à partir de SNS.

<@aws> help

Après un certain temps, un message a été publié du côté Slack et le résultat de l'émission de la commande AWS a été renvoyé.

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

Résumé

C'est facile, mais j'ai confirmé que l'émission de commandes AWS via AWS Chatbot peut également être effectuée en écrivant dans Slack à partir d'autres services. Les possibilités d'émission de commandes Slack-> AWS Chatbot-> AWS se sont à nouveau étendues.

Recommended Posts

Amazon SNS → AWS Lambda → Slack → Exécuter des commandes AWS sur AWS Chatbot
Terraform configuré pour lancer AWS Lambda à partir d'Amazon SQS
Lambda x Amazon SNS vous informera quotidiennement de votre facture AWS par e-mail
Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)
Envoyer une demande d'AWS Lambda à Amazon Elasticsearch Service
Publiez régulièrement sur Twitter en utilisant AWS lambda!
Comment exécuter des commandes avec Jupyter Notebook
Connectez-vous à s3 avec AWS Lambda Python
Résumé de l'écriture d'AWS Lambda
Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack
[Introduction à AWS] Le premier Lambda est Transcribe ♪
Exemple de notification Slack avec python lambda
[AWS / Lambda] Comment charger une bibliothèque externe Python
Résumé de l'étude de Python pour utiliser AWS Lambda
Version Amazon API Gateway et AWS Lambda Python