Verwenden Sie AWS Lambda, um einen Mechanismus zu erstellen, der Slack benachrichtigt, wenn der von CloudWatch überwachte Wert in Python überschritten wird

Einführung

Ich spreche in der Firma "Ramu but Ramu" und für mich, ein ehemaliges C #, ist es so etwas wie eine Programmiersprache? Ich dachte, aber es war nicht so. (In C # gibt es einen Lambda-Ausdruck.)

Intern habe ich die Laufzeit von node.js auf AWS Lambda platziert und sie über Slack informiert, aber mir wurde gesagt, dass die Version von node alt ist und ich sie bald nicht mehr unterstützen werde. Deshalb habe ich beschlossen, zu Python zu wechseln. (Weil es eine Person in der Firma gab, die Python besser kannte als Node)

AWS Lambda bietet eine allgemeine Verarbeitung als Vorlagen, daher ist dies recht einfach. Ich werde das Verfahren zusammenfassen.

Einrichtungsschritte

Befolgen Sie ungefähr die folgenden Schritte.

  1. Lambda-Funktionserstellung
  2. SNS erstellen und mit Lambda verknüpfen
  3. Zusammenarbeit zwischen EC2 und SNS
  4. Codierung
  5. Testen

Diagramm

Das Endergebnis wird ungefähr so sein.

aws.png

Verfahren

1. Erstellen einer Lambda-Funktion

Erstellen Sie diesmal die Hauptfunktion von Lambda. Sie können es leicht machen, indem Sie den Anweisungen folgen. Seien Sie versichert, dass Sie es einfach neu erstellen oder löschen können.

Wählen Sie Lambda aus der Serviceliste.

①.png

Beginnen Sie mit der Erstellung der Lambda-Funktion.

②.png

Wenn Sie Slack in den Filter eingeben, können Sie eine Vorlage für Slack erstellen. Dieses Mal erstellen wir sie jedoch mit Leerzeichen.

③.png

Wir werden den Auslöser später setzen, also lassen Sie ihn leer.

④.png

2. SNS erstellen und mit Lambda verknüpfen

SNS = Simple Notification Service. Es ist ein Dienst, der eine Verarbeitung oder Statusänderung erhält und Sie als Nachricht benachrichtigt. Sie können Nachrichten an E-Mails und Lamda wie diese senden. Der Service selbst wurde bis zum 06. April 2017 nicht übersetzt, aber ich denke, es gibt kein Problem, da es sich um einfaches Englisch handelt.

Erstellen Sie einen SNS und hängen Sie das Abonnement an.

Abonnements erstellen.

AWS_SNS.png

Wählen Sie die gerade erstellte Lambda-Funktion aus

AWS_SNS.png

3. Zusammenarbeit zwischen EC2 (Cloud Watch) und SNS

Stellen Sie den Alarm auf dem EC2-Bildschirm ein.

EC2_Management_Console.png

4. Codierung

Nehmen Sie verschiedene Einstellungen vor

Die Einstellungen sind wie folgt.

Diesmal habe ich es wie folgt eingestellt.

Lambda_Management_Console.png

@Code

lambda_handler.py


from __future__ import print_function

import boto3
import json
import logging
import os

from urllib2 import Request, urlopen, URLError, HTTPError

#lockere Einstellungen
SLACK_CHANNEL = os.environ['SLACK_CHANNEL']
HOOK_URL      = os.environ['HOOK_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))

    alarm_name  = message['AlarmName']
    description = message['AlarmDescription']
    new_state   = message['NewStateValue']
    reason      = message['NewStateReason']

    if new_state == 'OK':
        emoji = ":+1:"
    elif new_state == 'ALARM':
        emoji = ":exclamation:"
        
    slack_message = {
        'channel': SLACK_CHANNEL,
        'text': "*%s %s: %s*\n %s\n %s" % (emoji, new_state, alarm_name, description, reason)
    }

    req = Request(HOOK_URL, json.dumps(slack_message))
    try:
        response = urlopen(req)
        response.read()
        logger.info("Message posted to %s", slack_message['channel'])
    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)

@Umgebungsvariable + Arufa

Lambda_Management_Console_1.png

5. Testen

Gehen Sie auf dem Lambda-Bildschirm wie folgt vor:

  1. Aktion → Testereigniseinstellung → Testereigniseingabe
  2. Speichern und testen

Dies ist Miso, aber ich hoffe, Sie können sich für die Testdaten darauf beziehen.

Ausführungsergebnis

Eine Benachrichtigung wurde erfolgreich an den Sandbox-Kanal gesendet. Es enthält auch Piktogramme.

Slack_-_eversense.png

abschließend

Mit einem einfachen Programm konnte ich eine Slack-Benachrichtigung realisieren. Stellen Sie die Metriken entsprechend ein und genießen Sie ein komfortables AWS-Leben. (Selbst wenn Sie mich benachrichtigen, macht es keinen Sinn, wenn Sie es nicht ansehen ...)

Darüber hinaus scheint es, dass nur SNS, die in derselben Region erstellt wurden, über Lambda festgelegt werden können. Wenn Sie also Regionen überqueren möchten, wählen Sie Lambda aus SNS jeder Region aus.

Zuerst habe ich versucht, die Umgebungsvariablen von Lambda zu verwenden, aber ich konnte sie nicht verwenden, da bei base64 ein Fehler aufgetreten ist. Wenn Sie dies verwenden können, kann die Lambda-Funktion problemlos wiederverwendet werden, sodass ich bei der nächsten Gelegenheit ordnungsgemäß damit umgehen werde.

Recommended Posts

Verwenden Sie AWS Lambda, um einen Mechanismus zu erstellen, der Slack benachrichtigt, wenn der von CloudWatch überwachte Wert in Python überschritten wird
Slack-Benachrichtigung, wenn ein bestimmtes Wort auf Twitter mit Heroku mit Python gemurmelt wird
Verwenden Sie AWS Lambda, um Nachrichten zu kratzen und LINE regelmäßig über Updates zu informieren [Python]
python So benachrichtigen Sie automatisch per Telefon, wenn das System ausfällt
Bequem zum Verwenden von Ebenen beim Laden von Bibliotheken auf Lambda
Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
"Cython" -Tutorial, das Python explosiv macht: Handhabung, wenn Funktionen auf der C ++ - Seite als Referenz übergeben werden.
Eine kleine Geschichte, die beim Schreiben von Twilio-Anwendungen mit Python auf AWS Lambda süchtig macht
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten
Über den Fehler, den ich beim Versuch, Adafruit_DHT von Python auf Raspberry Pi zu verwenden, festgestellt habe
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
ImportError beim Versuch, das gcloud-Paket mit der AWS Lambda Python-Version zu verwenden
Benachrichtigen Sie Slack, wenn der auf GCP ausgeführte maschinelle Lernprozess abgeschlossen ist
Benachrichtigen Sie Slack, wenn die Switch-Verkaufsseite aktualisiert wird ~ Slack-Bot-Entwicklung mit Python ③ ~
Das Format der von der Slack-API erhaltenen Nachricht ist auf subtile Weise schwierig zu verwenden
Lambda-Funktion (Python-Version), die Elemente dekomprimiert und in CloudWatch-Protokolle ausgibt, wenn eine komprimierte Datei auf s3 hochgeladen wird
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
[Einführung in AWS] Das erste Lambda ist Transcribe ♪
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
[Python] Wirf eine Nachricht an den Slack-Kanal
Eine Geschichte, die beim Versuch, die Python-Version mit GCE zu aktualisieren, hängen blieb
Wenn Sie eine SSD mit Linux verbinden und einen Dateiserver erstellen, ist es besser, NTFS zu verwenden.
Erstellen Sie ein Python-Skript, um zu überprüfen, ob der Link unter der angegebenen URL gültig ist
Es war ein Leben, das ich auf AWS Lambda OCR wollte, um die Charaktere zu lokalisieren.
So stellen Sie pyenv unter Amazon Linux und Ubuntu ein, um eine Python 3.6.0-Umgebung zu erstellen
Versuchen Sie, Schedule auszuführen, um Instanzen in AWS Lambda (Python) zu starten und zu stoppen.
Verwenden Sie AWS Lambda + LINE Benachrichtigen, um LINE zu benachrichtigen, dass Sie Ihren Regenschirm nicht vergessen, wenn Sie nach Hause kommen
Anweisungen zur Verwendung der AWS-Befehlszeilenschnittstelle (Python / awscli) unter Mac OS X.
Verwenden Sie die Twitter-API, um die von Twitter benötigte Zeit zu verkürzen (erstellen Sie eine Hervorhebungszeitleiste).
Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).
Überprüfen Sie types_map, wenn Sie Mimetypen mit AWS Lambda (Python) verwenden.
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Betreff: Python Lambda ist nutzlos ^ H ^ H ^ H ^ H ^ H Schwer zu bedienen
Ich habe versucht, eine RESTful-API zu erstellen, indem ich die explosive Fast-API des Python-Frameworks mit MySQL verbunden habe.
Wenn sich eine Zeichenfolge einer bestimmten Reihe im Schlüssel des Wörterbuchs befindet, wird die Zeichenfolge in den Wert des Wörterbuchs konvertiert.
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen