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.
--Preemptible VM ist ein Tool zum Starten, da es nach dem Stoppen nicht automatisch gestartet wird.
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
Erstellen Sie einen GCS-Bucket --Erstellen Sie einen Bucket, um das Shutdown-Skript und das Shutdown-Skript zu platzieren.
Schreiben Sie die Variable "BUCKET" entsprechend in das Skript.
$ gsutil mb -l ASIA-NORTHEAST1 gs://<backet name>
$ gsutil cp shutdown-script.sh gs://<backet name>/
$ gsutil ls -l gs://<backet name>
--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>
```
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
Legen Sie den Instanzstarter in den Cloud-Funktionen fest
Schreiben Sie den Eimer in main.py entsprechend um.
gcloud functions deploy boot_preemptible_instance --region=asia-northeast1 --
entry-point boot_instance --runtime python37 --trigger-event
google.storage.object.finalize --trigger-resource gs://<backet name>
Versuchen Sie, die Instanz manuell zu stoppen.
$ gcloud compute instances stop
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
```
$ 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