In dieser Anleitung wird gezeigt, wie Sie Cloud Scheduler und Cloud Functions verwenden, um Compute Engine-Instanzen mithilfe eines automatischen Zeitplans automatisch zu starten und zu beenden.
Lernziele
- Erstellen und Bereitstellen einer Reihe von Funktionen mit Cloud Functions, die Instanzen von Compute Engine starten und stoppen.
- Erstellen Sie mit Cloud Scheduler eine Reihe von Jobs, die Instanzen mit einem Ressourcenlabel
dev
so planen, dass sie montags bis freitags von 09:00 bis 17:00 Uhr ausgeführt werden und den typischen Geschäftszeiten entsprechen.
Kosten
In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:
- Cloud Scheduler
- Cloud Functions
- Pub/Sub
- Compute Engine
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
- Richten Sie Ihre Umgebung für Cloud Scheduler ein.
-
Cloud Functions, Pub/Sub, and Compute Engine APIs aktivieren.
Anwendungsarchitektur
Diese Lösung umfasst die folgenden Google Cloud-Komponenten:
- Compute Engine-Instanz, die nach einem Zeitplan ausgeführt werden soll.
- Cloud Functions, um die gewünschte Instanz zu starten und zu stoppen.
- Pub/Sub-Nachrichten, die für jedes Start- und Stoppereignis gesendet und empfangen werden.
- Cloud Scheduler-Jobs, um Aufrufe nach einem festgelegten Zeitplan zum Starten und Anhalten der Instanz auszuführen.
Standortanforderungen
Einige Komponenten werden nur in bestimmten Regionen unterstützt:
- Compute Engine-Instanz: wird in jeder Region unterstützt, die unter Regionen und Zonen aufgeführt ist.
- Cloud Functions: wird in den Regionen unterstützt, die unter Standorte aufgeführt sind.
- Pub/Sub-Nachrichten: werden global unterstützt, da Pub/Sub ein globaler Dienst ist.
- Cloud Scheduler-Jobs mit Pub/Sub-Zielen: werden an jedem Google Cloud-Standort unterstützt.
Warum nicht HTTP statt Pub/Sub?
Wenn Sie diese Architektur vereinfachen möchten, können Sie HTTP-Trigger von Cloud Functions anstelle von Pub/Sub-Triggern verwenden.
In dieser Anleitung wird Pub/Sub als Cloud Functions-Trigger verwendet. HTTP ist jedoch auch eine gültige Wahl. In der Dokumentation zu Ereignissen und Triggern finden Sie einen Vergleich zwischen HTTP- und Pub/Sub-Triggern.
Compute Engine-Instanz einrichten
Console
- Rufen Sie in der Console die Seite VM-Instanzen auf.
Zur Seite "VM-Instanzen". - Klicken Sie auf Instanz erstellen.
- Legen Sie als Name
dev-instance
fest. - Klicken Sie unter Labels auf Labels hinzufügen.
- Klicken Sie auf Label hinzufügen.
- Geben Sie
env
für Key (Schlüssel) unddev
für Value (Wert) ein. - Wählen Sie für Region die Option
us-west1
aus. - Wählen Sie bei Zone die Option
us-west1-b
aus. - Klicken Sie auf Speichern.
- Klicken Sie unten auf der Seite auf Erstellen.
gcloud
gcloud compute instances create dev-instance \ --network default \ --zone us-west1-b \ --labels=env=dev
Von Pub/Sub über Cloud Functions ausgelöste Funktionen bereitstellen
Funktionen erstellen und implementieren
Console
Erstellen Sie die Startfunktion.
- Rufen Sie in der Konsole die Seite Cloud Functions auf.
Zur Seite "Cloud Functions". - Klicken Sie auf Funktion erstellen.
- Legen Sie als Funktionsnamen
startInstancePubSub
fest. - Behalten Sie für Region den Standardwert bei.
- Wählen Sie als Triggertyp
Cloud Pub/Sub
aus. - Wählen Sie unter Cloud Pub/Sub-Thema auswählen die Option
Create a topic...
aus. - Ein Dialogfeld Neues Pub/Sub-Thema sollte angezeigt werden.
- Geben Sie unter Themen-ID
start-instance-event
ein. - Klicken Sie auf Thema erstellen, um das Dialogfeld zu beenden.
- Geben Sie unter Themen-ID
- Klicken Sie unten im Kästchen Trigger auf Speichern.
- Klicken Sie unten auf der Seite auf Weiter.
- Wählen Sie für Runtime
Node.js 10
aus. - Geben Sie als Einstiegspunkt
startInstancePubSub
ein. - Wählen Sie auf der linken Seite des Code-Editors
index.js
aus. Ersetzen Sie den Startcode durch den folgenden Code:
Wählen Sie auf der linken Seite des Code-Editors
package.json
aus.Ersetzen Sie den Startcode durch den folgenden Code:
Klicken Sie unten auf der Seite auf Deploy (Bereitstellen).
Erstellen Sie die Stoppfunktion.
- Sie sollten sich in der Konsole auf der Seite Cloud Functions befinden.
- Klicken Sie auf Funktion erstellen.
- Legen Sie als Funktionsnamen
stopInstancePubSub
fest. - Behalten Sie für Region den Standardwert bei.
- Belassen Sie die Option Zugewiesener Speicher auf dem Standardwert.
- Wählen Sie als Triggertyp
Cloud Pub/Sub
aus. - Wählen Sie unter Cloud Pub/Sub-Thema auswählen die Option
Create a topic...
aus. - Ein Dialogfeld Neues Pub/Sub-Thema sollte angezeigt werden.
- Geben Sie unter Themen-ID
stop-instance-event
ein. - Klicken Sie auf Thema erstellen, um das Dialogfeld zu beenden.
- Geben Sie unter Themen-ID
- Klicken Sie unten im Kästchen Trigger auf Speichern.
- Klicken Sie unten auf der Seite auf Weiter.
- Wählen Sie für Runtime
Node.js 10
aus. - Geben Sie als Einstiegspunkt
stopInstancePubSub
ein. - Wählen Sie auf der linken Seite des Code-Editors
index.js
aus. Ersetzen Sie den Startcode durch den folgenden Code:
Wählen Sie auf der linken Seite des Code-Editors
package.json
aus.Ersetzen Sie den Startcode durch den folgenden Code:
Klicken Sie unten auf der Seite auf Deploy (Bereitstellen).
gcloud
Erstellen Sie die Pub/Sub-Themen.
gcloud pubsub topics create start-instance-event
gcloud pubsub topics create stop-instance-event
Code abrufen
Laden Sie den Code herunter.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das richtige Verzeichnis.
cd nodejs-docs-samples/functions/scheduleinstance/
Erstellen Sie die Start- und Stoppfunktionen.
Sie sollten sich im Verzeichnis nodejs-docs-samples/functions/scheduleinstance/
befinden.
gcloud functions deploy startInstancePubSub \ --trigger-topic start-instance-event \ --runtime nodejs10 \ --allow-unauthenticated
gcloud functions deploy stopInstancePubSub \ --trigger-topic stop-instance-event \ --runtime nodejs10 \ --allow-unauthenticated
(Optional) Prüfen Sie, ob die Funktionen ordnungsgemäß funktionieren
Console
Instanz stoppen
- Rufen Sie in der Konsole die Seite Cloud Functions auf.
Zur Seite "Cloud Functions". - Klicken Sie auf die Funktion
stopInstancePubSub
. - Sie sollten eine Reihe von Tabs sehen: Allgemein, Trigger, Quelle, Berechtigungen und Testen. Klicken Sie auf den Tab Testen.
Geben Sie als Auslösendes Ereignis Folgendes ein:
{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}
Dies ist einfach der String mit base64-Codierung für
{"zone":"us-west1-b", "label":"env=dev"}
.Wenn Sie Ihren eigenen String codieren möchten, können Sie ein beliebiges Base64-Codierungstool verwenden, das online zur Verfügung steht.
Klicken Sie auf Funktion testen.
Wenn die Ausführung abgeschlossen ist, sollte unter Ausgabe
Successfully stopped instance dev-instance
angezeigt werden. Es kann bis zu 60 Sekunden dauern, bis der Vorgang abgeschlossen ist.Wenn stattdessen
error: 'Error: function failed to load.'
angezeigt wird, warten Sie etwa 10 Sekunden, bis die Bereitstellung der Funktion abgeschlossen ist, und versuchen Sie es noch einmal.Wenn stattdessen
error: 'Error: function execution attempt timed out.'
angezeigt wird, fahren Sie einfach mit dem nächsten Schritt fort, um zu kontrollieren, ob das Herunterfahren der Instanz lange dauert.Wenn die Instanz stattdessen anhält, aber nichts angezeigt wird, wurde wahrscheinlich das Zeitlimit überschritten. Fahren Sie einfach mit dem nächsten Schritt fort, um zu sehen, ob lediglich das Herunterfahren der Instanz lange dauert.
Rufen Sie in der Console die Seite VM-Instanzen auf.
Zur Seite "VM-Instanzen".Prüfen Sie, ob die Instanz mit dem Namen
dev-instance
neben dem Namen ein graues Quadrat aufweist, um anzuzeigen, dass sie gestoppt wurde. Es kann bis zu 30 Sekunden dauern, bis das Herunterfahren beendet ist.- Wenn es wesentlich länger dauert, klicken Sie oben auf der Seite auf Aktualisieren.
Instanz starten
- Rufen Sie in der Konsole die Seite Cloud Functions auf.
Zur Seite "Cloud Functions". - Klicken Sie auf die Funktion
startInstancePubSub
. - Sie sollten eine Reihe von Tabs sehen: Allgemein, Trigger, Quelle, Berechtigungen und Testen. Klicken Sie auf den Tab Testen.
Geben Sie als Auslösendes Ereignis Folgendes ein:
{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}
- Auch dieser ist einfach der base64-codierte String für
{"zone":"us-west1-b", "label":"env=dev"}
.
- Auch dieser ist einfach der base64-codierte String für
Klicken Sie auf Funktion testen.
Wenn die Ausführung abgeschlossen ist, sollte unter Ausgabe
Successfully started instance dev-instance
angezeigt werden.Rufen Sie in der Console die Seite VM-Instanzen auf.
Zur Seite "VM-Instanzen".Prüfen Sie, ob die Instanz mit dem Namen
dev-instance
neben ihrem Namen ein grünes Häkchen hat, das angibt, dass sie ausgeführt wird. Es kann bis zu 30 Sekunden dauern, bis der Startvorgang abgeschlossen ist.
gcloud
Stoppen Sie die Instanz:
Rufen Sie die Funktion auf, um die Instanz zu stoppen.
gcloud functions call stopInstancePubSub \ --data '{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}'
Dies ist einfach der String mit base64-Codierung für
{"zone":"us-west1-b", "label":"env=dev"}
.Wenn Sie Ihren eigenen String codieren möchten, können Sie ein beliebiges Tool verwenden. Hier ein Beispiel mit dem
base64
-Befehlszeilentool:echo '{"zone":"us-west1-b", "label":"env=dev"}' | base64
eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo=
Wenn die Funktion beendet ist, sollten Sie Folgendes sehen:
result: Successfully stopped instance dev-instance
Es kann bis zu 60 Sekunden dauern, bis der Vorgang abgeschlossen ist.
Wenn Sie stattdessen folgenden Fehler erhalten:
error: 'Error: function failed to load.`
Warten Sie einfach einen Moment, bis die Funktion abgeschlossen ist, und versuchen Sie es noch einmal.
Wenn Sie stattdessen folgenden Fehler erhalten:
error: `Error: function execution attempt timed out.`
Fahren Sie einfach mit dem nächsten Schritt fort, um zu sehen, ob lediglich das Herunterfahren der Instanz lange dauert.
Wenn Sie stattdessen kein Ergebnis erhalten, wurde wahrscheinlich nur das Zeitlimit für die Funktion überschritten. Fahren Sie einfach mit dem nächsten Schritt fort, um zu sehen, ob lediglich das Herunterfahren der Instanz lange dauert.
Prüfen Sie, ob die Instanz den Status
TERMINATED
hat. Es kann bis zu 30 Sekunden dauern, bis das Herunterfahren beendet ist.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: TERMINATED
Instanz starten
Rufen Sie die Funktion auf, um die Instanz zu starten.
gcloud functions call startInstancePubSub \ --data '{"data":"eyJ6b25lIjoidXMtd2VzdDEtYiIsICJsYWJlbCI6ImVudj1kZXYifQo="}'
- Auch dieser ist einfach der base64-codierte String für
{"zone":"us-west1-b", "label":"env=dev"}
.
Wenn die Funktion beendet ist, sollten Sie Folgendes sehen:
result: Successfully started instance dev-instance
- Auch dieser ist einfach der base64-codierte String für
Prüfen Sie, ob die Instanz den Status
RUNNING
hat. Es kann bis zu 30 Sekunden dauern, bis der Startvorgang abgeschlossen ist.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: RUNNING
Cloud Scheduler-Jobs für den Aufruf von Pub/Sub einrichten
Jobs erstellen
Console
Erstellen Sie den Startjob.
- Wechseln Sie in der Console zur Seite Cloud Scheduler.
Zur Seite "Cloud Scheduler". - Klicken Sie auf Job erstellen.
- Behalten Sie die Standardregion bei.
- Legen Sie als Name
startup-dev-instances
fest. - Geben Sie als Häufigkeit
0 9 * * 1-5
ein.- Diese wird Mo-Fr um 9:00 Uhr ausgeführt.
- Wählen Sie für die Zeitzone das gewünschte Land und die gewünschte Zeitzone aus. In diesem Beispiel werden
United States
undLos Angeles
verwendet. - Klicken Sie auf Weiter.
- Wählen Sie unter Zieltyp die Option
Pub/Sub
aus. - Wählen Sie im Drop-down-Menü „Thema“ die Option
start-instance-event
aus. - Geben Sie unter Nachricht Folgendes ein:
{"zone":"us-west1-b","label":"env=dev"}
- Klicken Sie auf Erstellen.
Erstellen Sie den Stoppjob.
- Sie sollten sich in der Konsole auf der Seite Cloud Scheduler befinden.
- Klicken Sie auf Job erstellen.
- Übernehmen Sie die Standardregion und klicken Sie unten auf der Seite auf Weiter.
- Legen Sie als Name
shutdown-dev-instances
fest. - Geben Sie als Häufigkeit
0 17 * * 1-5
ein.- Diese wird Mo-Fr um 17:00 Uhr ausgeführt.
- Wählen Sie für die Zeitzone das gewünschte Land und die gewünschte Zeitzone aus. In diesem Beispiel werden
United States
undLos Angeles
verwendet. - Klicken Sie auf Weiter.
- Wählen Sie unter Zieltyp die Option
Pub/Sub
aus. - Wählen Sie im Drop-down-Menü „Thema“ die Option
stop-instance-event
aus. - Geben Sie unter Nachricht Folgendes ein:
{"zone":"us-west1-b","label":"env=dev"}
- Klicken Sie auf Erstellen.
gcloud
Erstellen Sie den Startjob.
gcloud scheduler jobs create pubsub startup-dev-instances \ --schedule '0 9 * * 1-5' \ --topic start-instance-event \ --message-body '{"zone":"us-west1-b", "label":"env=dev"}' \ --time-zone 'America/Los_Angeles'
Erstellen Sie den Stoppjob.
gcloud scheduler jobs create pubsub shutdown-dev-instances \ --schedule '0 17 * * 1-5' \ --topic stop-instance-event \ --message-body '{"zone":"us-west1-b", "label":"env=dev"}' \ --time-zone 'America/Los_Angeles'
(Optional) Überprüfen Sie, ob die Jobs ordnungsgemäß funktionieren
Console
Instanz stoppen
- Wechseln Sie in der Console zur Seite Cloud Scheduler.
Zur Seite "Cloud Scheduler". - Klicken Sie für den Job mit dem Namen
shutdown-dev-instances
auf Jetzt ausführen ganz rechts auf der Seite. - Rufen Sie in der Console die Seite VM-Instanzen auf.
Zur Seite "VM-Instanzen". - Prüfen Sie, ob die Instanz mit dem Namen
dev-instance
neben dem Namen ein graues Quadrat aufweist, um anzuzeigen, dass sie gestoppt wurde. Es kann bis zu 30 Sekunden dauern, bis das Herunterfahren beendet ist.
Instanz starten
- Wechseln Sie in der Console zur Seite Cloud Scheduler.
Zur Seite "Cloud Scheduler". - Klicken Sie für den Job mit dem Namen
startup-dev-instances
auf Jetzt ausführen ganz rechts auf der Seite. - Rufen Sie in der Console die Seite VM-Instanzen auf.
Zur Seite "VM-Instanzen". - Prüfen Sie, ob die Instanz mit dem Namen
dev-instance
neben ihrem Namen ein grünes Häkchen hat, das angibt, dass sie ausgeführt wird. Es kann bis zu 30 Sekunden dauern, bis der Startvorgang abgeschlossen ist.
gcloud
Stoppen Sie die Instanz:
Führen Sie den Scheduler-Job aus, um die Instanz zu stoppen.
gcloud beta scheduler jobs run shutdown-dev-instances
Prüfen Sie, ob die Instanz den Status
TERMINATED
hat. Es kann bis zu 30 Sekunden dauern, bis das Herunterfahren beendet ist.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: TERMINATED
Instanz starten
Führen Sie den Scheduler-Job aus, um die Instanz zu starten.
gcloud beta scheduler jobs run startup-dev-instances
Prüfen Sie, ob die Instanz den Status
RUNNING
hat. Es kann bis zu 30 Sekunden dauern, bis der Startvorgang abgeschlossen ist.gcloud compute instances describe dev-instance \ --zone us-west1-b \ | grep status
status: RUNNING
Bereinigen
Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.
Cloud Scheduler-Jobs löschen
Wechseln Sie in der Console zur Seite Cloud Scheduler.
Klicken Sie die Kästchen neben Ihren Jobs an.
Klicken Sie oben auf der Seite auf Löschen und bestätigen Sie den Löschvorgang.
Pub/Sub-Themen löschen
Rufen Sie in der Konsole die Seite Pub/Sub auf.
Klicken Sie die Kästchen neben Ihren Themen an.
Klicken Sie oben auf der Seite auf Löschen und bestätigen Sie den Löschvorgang.
Über Cloud Functions bereitgestellte Funktionen löschen
Rufen Sie in der Konsole die Seite Cloud Functions auf.
Klicken Sie die Kästchen neben Ihren Funktionen an.
Klicken Sie oben auf der Seite auf Löschen und bestätigen Sie den Löschvorgang.
Compute Engine-Instanz löschen
So löschen Sie eine Compute Engine-Instanz:
- Rufen Sie in der Console die Seite VM-Instanzen auf:
- Klicken Sie auf das Kästchen für die Die Instanz, die Sie löschen möchten.
- Klicken Sie zum Löschen der Instanz auf Weitere Aktionen, dann auf Löschen, und folgen Sie dann der Anleitung.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.
So löschen Sie das Projekt:
- Wechseln Sie in der Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Weitere Informationen
- Referenzarchitekturen, Diagramme, Anleitungen und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center