[PYTHON] So starten Sie die GCP-VM automatisch

So starten Sie die GCP-VM automatisch

GCP verfügt über eine VM namens Preemptible VM, die auf Kosten eines niedrigen Preises in bis zu 24 Stunden stoppt. https://cloud.google.com/compute/docs/instances/preemptible?hl=ja

VMs, die nach Erhalt der Preempt-Benachrichtigung gestoppt werden, werden nicht automatisch gestartet. Im Folgenden werden die Tools beschrieben, die den automatischen Start mithilfe von Shutdown-Skripten und Cloud-Funktionen ermöglichen.

Werkzeugübersicht

--Preemptible VM ist ein Tool zum Starten, da es nach dem Stoppen nicht automatisch gestartet wird.

Werkzeugverhalten

  1. Setzen Sie das Shutdown-Skript auf der VM. Es wird ausgeführt, wenn die VM gestoppt wird, prüft, ob sie die Preempt-Benachrichtigung erhalten hat, schreibt TRUE oder FALSE in eine Datei und lädt sie in GCS hoch.
  2. Führen Sie Cloud-Funktionen aus, die durch ein GCS-Datei-Update ausgelöst wurden.
  3. Die Funktion startet die VM nur, wenn die Preempt-Benachrichtigung TRUE ist. Sequence.png

Einrichtungsschritte

  1. Laden Sie den Quellcode herunter

    git clone [email protected]:cloud-mainte/auto-boot-preemtible-vm.git
    
    or 
    
    git clone https://gitlab.com/cloud-mainte/auto-boot-preemtible-vm.git
    
  2. Erstellen Sie einen GCS-Bucket --Erstellen Sie einen Bucket, um das Shutdown-Skript und das Shutdown-Skript zu platzieren.

--Erstellen Sie einen Bucket, um den Status zu speichern, ob Sie eine Preempt-Benachrichtigung erhalten haben oder nicht.

```
$ gsutil mb -l ASIA-NORTHEAST1 gs://<backet name>
```
  1. Setzen Sie das Shutdown-Skript für die Zielinstanz

    gcloud compute instances add-metadata <instance name> \
        --metadata shutdown-script-url=gs://<backet name>/shutdown-script.sh
    
  2. Legen Sie den Instanzstarter in den Cloud-Funktionen fest

Funktionsprüfung

  1. Versuchen Sie, die Instanz manuell zu stoppen.

$ gcloud compute instances stop $ gcloud compute instances list $ gsutil cat gs:///preempted_status.out {"preempted_status":"FALSE", "instance_name":"", "zone":"asia-northeast1-a", "project":""} ```

Wenn es manuell gestoppt wird, lautet es "preempted_status": "FALSE".
Überprüfen Sie das Protokoll.

```
$ gcloud logging read "resource.type=\"cloud_function\" AND resource.labels.function_name=\"boot_preemptible_instance\" AND resource.labels.region=\"asia-northeast1\"" --format="table(timestamp, textPayload)" |head -10
TIMESTAMP                       TEXT_PAYLOAD
2020-08-11T04:38:26.982711475Z  Function execution took 1894 ms, finished with status: 'ok'
2020-08-11T04:38:26.979Z        Preempted status is FALSE.
 :
2020-08-11T04:38:25.090798409Z  Function execution started
```
  1. Versuchen Sie, die Preempt-Benachrichtigung zu imitieren.
$ cat preempted_status.out
{"preempted_status":"TRUE", "instance_name":"<instance name>", "zone":"asia-northeast1-a", "project":"<project name>"}
$ gsutil cp preempted_status.out gs://<backet name>/
$ gsutil cat gs://<backet name>/preempted_status.out
{"preempted_status":"TRUE", "instance_name":"<instance name>", "zone":"asia-northeast1-a", "project":"<project name>"}

Überprüfen Sie das Protokoll.

$ gcloud logging read "resource.type=\"cloud_function\" AND resource.labels.function_name=\"boot_preemptible_instance\" AND resource.labels.region=\"asia-northeast1\"" --format="table(timestamp, textPayload)" |head -12
TIMESTAMP                       TEXT_PAYLOAD
2020-08-11T05:02:51.640069088Z  Function execution took 15066 ms, finished with status: 'ok'
2020-08-11T05:02:51.637Z        Instance started.
2020-08-11T05:02:51.637Z        Instance starting.. status = RUNNING
2020-08-11T05:02:46.246Z        Instance starting.. status = STAGING
2020-08-11T05:02:40.862Z        Instance starting.. status = TERMINATED
2020-08-11T05:02:39.373Z        Instance status is now TERMINATED
2020-08-11T05:02:38.959Z        Preempted status is TRUE. Boot up the instance.
 :
2020-08-11T05:02:36.577339221Z  Function execution started

Die Instanz wurde gestartet.

$ gcloud compute instances list
NAME                         ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP     EXTERNAL_IP    STATUS
<instance name>  asia-northeast1-a  g1-small       true         XX.XX.XX.XX   XX.XX.XX.XXX  RUNNING

Recommended Posts

So starten Sie die GCP-VM automatisch
So beheben Sie einen Fehler, bei dem das Jupyter-Notebook nicht automatisch gestartet wird
Ich möchte automatisch eine Unternehmensgründungs-E-Mail senden
So rufen Sie eine Funktion auf
Wie man ein Terminal hackt
So starten Sie die erste Projektion
So führen Sie die Exportfunktion des GCP-Datenspeichers automatisch aus
Wie erstelle ich eine japanisch-englische Übersetzung?
So setzen Sie einen symbolischen Link
Wie man einen lockeren Bot macht
So erstellen Sie ein Conda-Paket
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
Wie erstelle ich eine Docker-Datei?
[Blender] So erstellen Sie ein Blender-Plug-In
So löschen Sie einen Docker-Container
Wie erstelle ich einen Crawler?
So erstellen Sie eine Konfigurationsdatei
Starten eines mit Jupyter Notebook erstellten Python-Programms
So erstellen Sie einen Klon aus Github
So erstellen Sie eine Sphinx-Übersetzungsumgebung
So erstellen Sie einen Git-Klonordner
Qiita (1) Wie schreibe ich einen Codenamen?
So zeichnen Sie ein Diagramm mit Matplotlib
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
[Colab] So kopieren Sie einen riesigen Datensatz
So installieren Sie ein Paket mithilfe eines Repositorys
[Ubuntu] So führen Sie ein Shell-Skript aus
Wie bekomme ich Stacktrace in Python?
So erstellen Sie ein Repository aus Medien
So erstellen Sie einen benutzerdefinierten Backtrader-Indikator
So wählen Sie eine Seaborn-Farbpalette aus
So testen Sie auf einer von Django authentifizierten Seite
Wie erstelle ich eine Pelican Site Map?
So führen Sie Maya Python-Skripte aus
So laden Sie automatisch .gpx-Dateien auf Strava hoch
So berechnen Sie die Volatilität einer Marke
So starten Sie Python (Flask) beim Start von EC2
Lesen einer CSV-Datei mit Python 2/3
So tarnen Sie eine ZIP-Datei als PNG-Datei
Verwendung der GCP-Ablaufverfolgung mit offener Telemetrie
Freigeben einer virtuellen Umgebung [Informationen zu den Anforderungen.txt]
So senden Sie eine Nachricht mit Curl an LINE
So codieren Sie eine Drohne mithilfe der Bilderkennung
So öffnen Sie einen Webbrowser über Python
So löschen Sie einen Taple in einer Liste (Python)
Wie man einen Wettbewerb bei Coda Lab abhält
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Einbetten von Variablen in Python-Strings
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
So zeichnen Sie vor der Optimierung ein 3D-Diagramm
So entwickeln Sie eine Cart-App mit Django
So erstellen Sie eine JSON-Datei in Python
So generieren Sie ein Python-Objekt aus JSON
So rufen Sie die Cloud-API über GCP-Cloud-Funktionen auf
So implementieren Sie eine Verlaufsauswahl in Houdini
So erstellen Sie ein QGIS-Plug-In (Paketerzeugung)
So schreiben Sie einen ShellScript Bash für Anweisung