Surveillance simple du serveur avec AWS Lambda (Python) et notification des résultats avec Slack

Ce que je voulais réaliser

Ce qui a finalement été réalisé


--Placez les données du serveur surveillé dans S3.

--ʻLisez les données ci-dessus depuis AWS Lambda (Python) ʻet créez un accès HTTP à chaque serveur.

--Notifiez «Slack» du résultat de la surveillance.

Détails du réglage

Paramètres VPC

――Voyez ce que vous vouliez réaliser, car il a été entièrement traité ci-dessous. - https://www.joyzo.co.jp/blog/2325

Paramètres IAM

Événements CloudWatch - Paramètres de planification

Slack

-Reportez-vous à Incoming Webhooks pour obtenir l'URL de notification à Slack.

AWS Lambda(Python)

lambda_function.py


import json
import requests
import boto3

BUCKET_NAME = 'xxxxxxxxxx'
OBJECT_NAME = 'xxxxxxxxxx/servers.json'
SLACK_POST_URL = 'https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxxxxxxxxxxxx'

def lambda_handler(event, context):
    json_data = __getServers()
    __check_server(json_data)

def __getServers():
   s3 = boto3.resource('s3')
   obj = s3.Object(BUCKET_NAME, OBJECT_NAME)
   response = obj.get()
   body = response['Body'].read()
   return body.decode('utf-8')

def __check_server(json_data):
    data = json.loads(json_data)
    servers = data['servers']

    has_error = False

    for server in servers:
        name = server['name']
        url = server['url']
        print("Check: " + name)

        try:
            r = requests.get(url)
            if r.status_code != 200:
                __send_error_message(name, url)
                has_error = True
        except requests.exceptions.RequestException as e:
            __send_request_error_message(name, url)
            has_error = True

    if has_error == False:
        __send_success_message()

def __send_error_message(name, url):
    payload = {
        "text": name + '\n' + url + '\n' + '*ERROR!*',
        "icon_emoji": ":x:"
    }
    __send_message(payload)

def __send_request_error_message(name, url):
    payload = {
        "text": name + '\n' + url + '\n' + '*Request Error!*',
        "icon_emoji": ":warning:"
    }
    __send_message(payload)

def __send_success_message():
    payload = {
        "text": "All Servers OK!",
        "icon_emoji": ":o:"
    }
    __send_message(payload)

def __send_message(payload):
    try:
        return requests.post(SLACK_POST_URL, json=payload)
    except requests.exceptions.RequestException as e:
        return None


Précautions lors de la configuration d'AWS Lambda (Python)

pip install requests -t .
zip -r lambda_function.zip *

Sentiments divers

―― «La possibilité de définir un VPC pour AWS Lambda» a rendu possible l'exécution de Lambda avec une adresse IP fixe comme source de données, ce qui a élargi la gamme d'utilisations.

Recommended Posts

Surveillance simple du serveur avec AWS Lambda (Python) et notification des résultats avec Slack
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
Exemple de notification Slack avec python lambda
Pages HTML dynamiques créées avec AWS Lambda et Python
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
[Python] Scraping dans AWS Lambda
Serveur HTTP facile avec Python
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
Ecrire une fonction AWS Lambda en Python
Notifier HipChat avec AWS Lambda (Python)
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Surveillance des appareils effectuée par Python On-box de IOS-XE
Gérer les "années et mois" en Python
Surveillance du trafic avec Kibana, ElasticSearch et Python
[AWS] Associez Lambda et S3 à boto3
Traitez facilement des images en Python avec Pillow
Connectez-vous à s3 avec AWS Lambda Python
Scraping Web facile avec Python et Ruby
Touchez AWS avec Serverless Framework et Python
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Application de notification de message Rabbit MQ avec Growl en Python ~ avec Raspeye et Julius ~
Téléchargez ce que vous avez dans la demande vers S3 avec AWS Lambda Python
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Différences entre queryStringParameters et multiValueQueryStringParameters dans AWS Lambda
LINE BOT avec Python + AWS Lambda + API Gateway
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
Easy X-Ray avec Lambda Layer et CloudFormation / sam-cli
Lancer un serveur Web avec Python et Flask
Premiers pas avec AWS IoT facilement en Python
Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack
Transférer l'état de disponibilité des instances potentiellement coûteuses dans Lambda vers Slack
Version Amazon API Gateway et AWS Lambda Python
Créez Amazon Linux avec AWS EC2 et connectez-vous
Téléchargez facilement et partiellement mp4 avec python et youtube-dl!
Obtenez des résultats au format dict avec Python psycopg2
Calculer la différence entre Pose et Transform avec ROS en Python
Serveur HTTP facile et paramètres de démarrage automatique de Systemd dans Go
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Créer une couche pour AWS Lambda Python dans Docker
Je veux AWS Lambda avec Python sur Mac!
Démarrer le calcul numérique avec Python (avec Homebrew et pip)
[Python] Retry processing (Exponential Backoff) mémo dans AWS Lambda
Créez un faux serveur Minecraft en Python avec Quarry
Serveur DNS en Python ....
Serveur local avec python
Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)
API Nifty Cloud facile à utiliser avec botocore et python
Veriloggen et cocotb sont utilisés pour concevoir et tester Verilog en Python uniquement.
écran et écran partagé avec connexion python et ssh au serveur distant
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
Conseils pour coder courts et faciles à lire en Python
Facile avec juste Python! Affichez les figures Graphviz au format draw.io!
Publiez régulièrement des images de Papillon sur Python + AWS Lambda + Slack