[PYTHON] Starten / stoppen Sie den Cloud-Server von Sakura regelmäßig mit AWS Lambda + CloudWatch-Ereignissen

Überblick

Manchmal erstellen wir zu Überprüfungszwecken einen Server in der Sakura-Cloud, aber es ist mühsam, ihn jeden Tag manuell zu starten und zu stoppen. Es wäre schön, wenn es jeden Morgen zu Beginn der Arbeit automatisch startet und nach Arbeitsende aufhört. Ich habe nach so etwas gesucht (Timer in Nifukura), aber ich konnte es nicht finden. Sakuras Service ist billig, daher denke ich, dass es ausreicht, einen VPS für die reguläre Ausführung der Verarbeitung zu haben, aber ich möchte ihn trotzdem serverlos machen. Implementieren wir es also mit Lambda + CloudWatch Events unter Verwendung von AWS! Ich dachte. (Ich denke, Sie können dies mit Cloud-Funktionen + Cloud Scheduler mit GCP oder Azure-Funktionen + TimerTrigger mit Azure tun, aber ich habe es nicht ausprobiert.)

Skript

Ich möchte das Skript in Python schreiben. Als ich es nachgeschlagen habe, wurde in [hier] eine Bibliothek namens saklient eingeführt (https://manual.sakura.ad.jp/cloud/api/index.html). Als ich es überprüft habe, hat es funktioniert, also werde ich es verwenden. Es gibt eine Beschreibung von Beta, und es scheint, dass es seit einigen Jahren nicht mehr aktualisiert wurde. Ist das also ärgerlich? Ich möchte Slack mit einem eingehenden Webhook über das Ausführungsergebnis informieren.

Ganzer Code

Aktiviert für die Massenbereitstellung mit Terraform. Es wird unten veröffentlicht.

https://github.com/shztki/lambda-sakuracloud-startstop

Die Verwendung ist in README beschrieben. Dieses Mal werden Informationen wie der Zugriffsschlüssel in die Lambda-Umgebungsvariable eingegeben, daher möchte ich sie trotzdem verschlüsseln. Selbst wenn Sie "kms_key_arn" an "aws_lambda_function" übergeben, wird der Wert von "Variablen" in "Umgebung" nicht verschlüsselt. Normalerweise werden nach der Bereitstellung "Umgebungsvariablen auf der Clientseite" in [hier] angezeigt (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html#configuration-envvars-encryption). Sie müssen auf die AWS-Konsole zugreifen und manuell "Helfer für die Verschlüsselung während der Übertragung aktivieren" auswählen, um "zu verschlüsseln", wie unter "Verschlüsseln" beschrieben. Dies ist sehr gefährlich, wenn Sie es vergessen, und es kann von jemandem gesehen werden, bevor Sie es manuell verschlüsseln.

Wie auch immer, wenn die Bereitstellung abgeschlossen ist, möchte ich, dass die Umgebungsvariable den verschlüsselten Wert hat ......

data "external" "slack_webhook_url" {
  program = ["bash", "kms.sh"]

  query = {
    key_id    = module.kms_key.key_arn
    plaintext = var.slack_webhook_url
  }
}
#!/bin/bash

set -e

eval "$(jq -r '@sh "KEY_ID=\(.key_id) PLAINTEXT=\(.plaintext)"')"

result=$(aws kms encrypt --key-id $KEY_ID --plaintext $PLAINTEXT --query CiphertextBlob --output text)

jq -n --arg result "$result" '{"result":$result}'

Dies ist eine sorgfältige Maßnahme, aber dieses Mal habe ich ein Shell-Skript namens "kms.sh" vorbereitet und es an "Variablen" übergeben, die mit der AWS-CLI verschlüsselt sind.

Bild...

slack01.png

Folgendes wird täglich auf Slack veröffentlicht:

von jetzt an

Ich frage mich, ob ich einen Prozess hinzufügen soll, der Feiertage ausschließt....

Ich bin mir sicher, dass es einige Skepsis darüber gibt, ob Sakuras Cloud unter AWS betrieben werden soll, aber bitte verzeihen Sie mir, denn es ist eine Multi-Cloud-Ära. Ich denke, die monatlichen Kosten sind billiger als ein VPS (obwohl der genaue Standort unbekannt ist). Hab ein schönes Sakura-Wolkenleben!

Recommended Posts

Starten / stoppen Sie den Cloud-Server von Sakura regelmäßig mit AWS Lambda + CloudWatch-Ereignissen
Versuchen Sie, Start / Stop für EC2-Instanzen mit AWS Lambda zu automatisieren
Stoppen Sie EC2 für eine bestimmte Zeit + beginnen Sie mit Lambda (Python)
Verwalten Sie die Aufbewahrung von Amazon CloudWatch-Protokollgruppen mit AWS Lambda
Realisieren Sie den automatischen Stopp der EC2-Instanz mit Lambda + CloudWatch-Ereignissen
PyTorch mit AWS Lambda [Lambda-Import]
Festlegen von CloudWatch-Ereignissen in der über Zappa bereitgestellten AWS Lambda-Funktion (WebAPI)
[AWS] API mit API Gateway + Lambda erstellen
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Einfache Serverüberwachung mit AWS Lambda (Python) und Ergebnisbenachrichtigung mit Slack