[PYTHON] Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt

Einführung

Derzeit wird das SSL-Zertifikat des Servers, den ich privat habe, mit "Let's Encrypt" festgelegt. Let's Encrypt benachrichtigt Sie per E-Mail über das Ablaufdatum des Zertifikats. Wenn es sich jedoch um eine E-Mail handelt, kann es sein, dass es mit anderen E-Mails vergraben ist und die Bestätigung möglicherweise nicht erfolgt.

** Wenn Sie es automatisch aktualisieren, ja! Ich denke, es gibt so etwas wie **, aber dieses Mal werde ich es ignorieren

Umgebung

lokal

AWS

Repository

https://github.com/nnsnodnb/slackbot_ssl_expiration

Vorbereitung

Bitte setzen Sie "Bots" in "Apps & Integrationen"

Bots___ひやかしプロジェクト_Slack.png

Bibliothek

requirements.txt


appdirs==1.4.3
packaging==16.8
pyparsing==2.2.0
requests==2.13.0
six==1.10.0
slacker==0.9.42

Beispielquelle

bot.py


from slacker import Slacker
import datetime
import socket
import ssl
import slack_settings #Slack im selben Verzeichnis_settings.Platziere py


slack = Slacker(slack_settings.SLACK_API_TOKEN)


def ssl_valid_time_remaining(hostname):
    expires = ssl_expiry_datetime(hostname)
    return expires - datetime.datetime.utcnow()


def ssl_expires_in(hostname, buffer_days=7):  #Frist 7 Tage im Voraus
    remaining = ssl_valid_time_remaining(hostname)
    if remaining < datetime.timedelta(days=0):
        raise AlreadyExpired("Cert expired %s days ago" % remaining.days)
    elif remaining < datetime.timedelta(days=buffer_days):
        return True
    else:
        return False


def ssl_expiry_datetime(hostname):
    ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z'
    context = ssl.create_default_context()

    conn = context.wrap_socket(
            socket.socket(socket.AF_INET),
            server_hostname=hostname,
    )

    conn.settimeout(3.0)
    conn.connect((hostname, 443))
    ssl_info = conn.getpeercert()
    return datetime.datetime.strptime(ssl_info['notAfter'], ssl_date_fmt)  # ssl_info['notAfter']Ist das Ablaufdatum des Zertifikats


def post_slack(hostname):
    message = '@channel https://' + hostname + ' '
    if ssl_expires_in(hostname):
        message += 'Es ist an der Zeit, loszuwerden'
    else:
        message += 'Ist noch innerhalb der Frist' 

    #Die Methoden hier verwenden das Slacker-Paket
    slack.chat.post_message(
            '#expiration',
            message,
            as_user=True,
            link_names=True
    )


def execute(event, context):
    post_slack('<YOUR DOMAIN>')

slack_setting.py


SLACK_API_TOKEN = ''

Lokal ausführen

$ python bot.py

スクリーンショット_2017-06-07_17_21_48.png

Diesmal war Herr Yo Watanabe wieder für die Benachrichtigung verantwortlich.

Lambda-Einstellungen

Lambda_Management_Console.png

  1. Triggereinstellungen Lambda_Management_Console.png Stellen Sie ein, wie Sie möchten. Ich habe die Einstellung ausgewählt, die von Montag bis Freitag um 2:00 Uhr mit "cron" benachrichtigt werden soll.
  2. Geben Sie den Funktionsnamen entsprechend ein
  3. Wählen Sie "Python 3.6" für "Laufzeit"
  4. Das Hochladen des Quellcodes wird unten erläutert
  5. Geben Sie für "Handler" "bot.execute" ein
  6. Rolle usw. werden einzeln eingestellt

Reflexion der externen Bibliothek

In der lokalen Umgebung sind die folgenden Befehle usw. recht gut:

Unmittelbare Umwelt


$ pip install -r requirements.txt

Da die Bibliothek in AWS Lambda nicht erkannt wird, müssen Sie die gesamte externe Bibliothek hochladen.

Speichern Sie die externe Bibliothek im Projektverzeichnis


$ pip install <LIBRARY_NAME> -t .

Wenn Sie so etwas tun, wird es im Projektverzeichnis gespeichert. Es ist jedoch mühsam, es einzeln zu tun, also habe ich Folgendes getan.

$ pip freeze > requirements.txt  # requirements.Ohne txt
$ pip install -r requirements.txt -t .

Dann zip und hochladen

$ zip -r bot.zip *  # bot.zip ist dein Lieblingsname

Da "bot.zip" im Projektverzeichnis erstellt wird, wählen Sie ".ZIP-Datei hochladen", um "bot.zip" hochzuladen.

スクリーンショット 2017-06-07 17.41.57.png

Wenn die Einstellungen korrekt sind, wird Slack zur eingestellten Zeit benachrichtigt! In meiner Umgebung wird Herr Yo Watanabe Sie von Montag bis Freitag 2:00 Uhr wie oben erwähnt informieren! !!

Recommended Posts

Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt
Skript zum Abrufen des Ablaufdatums des SSL-Zertifikats
Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Ich habe einen Slack-Bot geschrieben, der Verzögerungsinformationen mit AWS Lambda benachrichtigt
[Bot dekodieren] Ich habe versucht, einen Bot zu erstellen, der mir den Rassenwert von Pokemon angibt
Skript zum Abrufen des Ablaufdatums des SSL-Zertifikats
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten
Ich habe einen Linebot erstellt, der mich über nahegelegene Evakuierungsstellen auf AWS informiert
Ein Programm, das den Betriebszustand von vollautomatischen Anlagenfotografieanlagen mitteilt
Erstellen Sie einen BOT, der die Discord-URL verkürzt
LINE Bot, der Sie über die interessierenden Aktien informiert
Ich habe einen IFTTT-Knopf gemacht, der den Eingang 2-Sesam mit 1 Knopf (über AWS Lambda) entsperrt.
Wenn ich einen ECR-Scan von einem CDK erstellt habe, konnte ich die Rückseite des Scans sehen
So erstellen Sie einen interaktiven LINE BOT 004 (beantworten Sie den Stichtag eines börsennotierten Unternehmens)
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Ich habe mit Heroku + Flask + PostgreSQL (Heroku Postgres) einen LINE-Bot erstellt, der mir den Typ und die Stärke von Pokemon in der Garal-Region angibt.
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Eine Formel, die einfach das Alter ab dem Geburtsdatum berechnet
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
[Für Anfänger] Ich möchte den Index eines Elements erhalten, das einen bestimmten bedingten Ausdruck erfüllt
(Python) Ich habe eine App von Trello erstellt, die regelmäßig über das Auslaufen von Aufgaben informiert, die bald ablaufen.
Verwenden Sie AWS Lambda, um Nachrichten zu kratzen und LINE regelmäßig über Updates zu informieren [Python]
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
Ich habe eine vorläufige Umfrage der API durchgeführt, um Zoom-Meeting-Ein- / Ausstiegs-Webhooks in Lambda zu erhalten (1).