Mit Cloud Scheduler können Sie Cloud SQL-Instanzen regelmäßig starten und beenden. Beispielsweise möchten Sie vielleicht, dass Ihre Instanzen nur zu bestimmten Zeiten ausgeführt werden.
In dieser Anleitung wird gezeigt, wie Sie eine Cloud SQL for SQL Server-Instanz automatisch starten und stoppen können. Dazu wird eine ereignisgesteuerte Architektur mit Google Cloud -Produkten erstellt.
Ziele
In dieser Anleitung erstellen Sie Cloud Scheduler-Jobs, die Cloud SQL-Instanzen mit einem Ressourcenlabel env=dev so planen, dass sie zu bestimmten Zeiten ausgeführt werden. Sie planen nur eine Instanz. Die in dieser Anleitung beschriebene Architektur kann jedoch zum Stoppen und Starten mehrerer Instanzen verwendet werden, bei denen das Ressourcenlabel env=dev ist.
Führen Sie dazu die folgenden Schritte aus:
- Erstellen Sie eine Cloud SQL for SQL Server-Instanz und weisen Sie ihr ein bestimmtes Ressourcenlabel (
env=dev) zu. - Erstellen Sie zwei Pub/Sub-Themen, die als Ereignisquellen für Ihre Eventarc-Trigger und als Message-Broker dienen.
- Erstellen und stellen Sie zwei ereignisgesteuerte Cloud Run-Funktionen bereit, die über die Pub/Sub-Themen ausgelöst werden. Wenn die Funktionen ausgelöst werden, suchen sie in Ihrem Projekt nach Cloud SQL-Instanzen, die mit dem Label übereinstimmen, das in der Nutzlast der Pub/Sub-Nachricht (
env=dev) angegeben ist. - Erstellen und stellen Sie zwei Eventarc-Trigger bereit. Pub/Sub-Themenereignisse werden als HTTP-Anfragen an Ihre Funktionen weitergeleitet und der Inhalt der Ereignisnachricht wird als Eingabedaten an die Funktionen übergeben.
- Erstellen Sie zwei Cloud Scheduler-Cronjobs, um zu bestimmten Zeiten eine Nachricht mit dem Ziellabel in den Pub/Sub-Themen zu veröffentlichen. Legen Sie fest, dass die Instanzen von Montag bis Freitag um 9:00 Uhr gestartet und um 17:00 Uhr beendet werden.
Das folgende Diagramm bietet einen Überblick über die ereignisgesteuerte Architektur:
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
-
Cloud Run functions
Cloud Run functions operate as Cloud Run services and are billed accordingly.
- Cloud Scheduler
- Cloud SQL for SQL Server
-
Eventarc
Cloud Run uses Eventarc for event delivery. Pricing for Eventarc is not included in the Cloud Run pricing.
- Pub/Sub
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud -Umgebung entwickeln.
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Wenn Sie für diese Anleitung ein vorhandenes Projekt verwenden, prüfen Sie, ob Sie die erforderlichen Berechtigungen haben. Wenn Sie ein neues Projekt erstellt haben, haben Sie bereits die erforderlichen Berechtigungen.
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Aktivieren Sie die Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin und Eventarc APIs:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable cloudbuild.googleapis.com
cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com -
Richten Sie die Authentifizierung ein:
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen -
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ersetzen Sie
SERVICE_ACCOUNT_NAMEmit einem Namen für das Dienstkonto. -
Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl
roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invokerfür jede der folgenden IAM-Rollen einmal aus:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Dabei gilt:
SERVICE_ACCOUNT_NAME: der Name des DienstkontosPROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt habenROLE: die zu gewährende Rolle
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Wenn Sie für diese Anleitung ein vorhandenes Projekt verwenden, prüfen Sie, ob Sie die erforderlichen Berechtigungen haben. Wenn Sie ein neues Projekt erstellt haben, haben Sie bereits die erforderlichen Berechtigungen.
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
Aktivieren Sie die Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin und Eventarc APIs:
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable cloudbuild.googleapis.com
cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com -
Richten Sie die Authentifizierung ein:
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen -
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ersetzen Sie
SERVICE_ACCOUNT_NAMEmit einem Namen für das Dienstkonto. -
Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl
roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invokerfür jede der folgenden IAM-Rollen einmal aus:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Dabei gilt:
SERVICE_ACCOUNT_NAME: der Name des DienstkontosPROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt habenROLE: die zu gewährende Rolle
-
Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (
Cloud SQL-Instanz erstellen
Verwenden Sie den Befehl gcloud beta sql instances create, um eine Cloud SQL for SQL Server-Instanz mit dem Ressourcenlabel env=dev zu erstellen:
gcloud beta sql instances create dev-instance \ --database-version=SQLSERVER_2019_EXPRESS \ --region=us-west1 \ --tier=db-custom-2-3840 \ --root-password=YourStrongPassword123! \ --labels=env=dev
Das Erstellen der Instanz kann einige Minuten dauern. Weitere Informationen finden Sie unter Instanzen erstellen.
Pub/Sub-Themen erstellen
Verwenden Sie den Befehl gcloud pubsub topics create, um die beiden Pub/Sub-Themen zu erstellen, die als Ereignisquellen für Ihre Eventarc-Trigger dienen:
gcloud pubsub topics create start-instance-event gcloud pubsub topics create stop-instance-event
Weitere Informationen finden Sie unter Thema erstellen.
Cloud Run-Funktionen erstellen und bereitstellen
Zwei Cloud Run-Funktionen (Node.js) erstellen und bereitstellen, die von Eventarc über Pub/Sub-Themen ausgelöst werden. Wenn die Funktionen ausgelöst werden, suchen sie in Ihrem Projekt nach Cloud SQL-Instanzen, die mit dem Label übereinstimmen, das in der Nutzlast der Pub/Sub-Nachricht angegeben ist (env=dev):
- Die Startfunktion aktualisiert den
activationPolicyder Instanz aufALWAYS, wodurch die Instanz eingeschaltet wird. - Die Stoppfunktion aktualisiert
activationPolicyaufNEVER, wodurch die Instanz heruntergefahren wird.
Weitere Informationen finden Sie unter Cloud Run Functions schreiben und Cloud Run Functions-Trigger.
Funktionen erstellen
Erstellen Sie ereignisgesteuerte Cloud Run-Funktionen, die Ereignisse, die der CloudEvents-Spezifikation entsprechen, automatisch umwandeln. Diese Branchenstandardspezifikation beschreibt Ereignisdaten auf allgemeine Weise.
Ihr Quellcode muss einen Funktionseinstiegspunkt definieren. Das ist der Code, der ausgeführt wird, wenn Cloud Run Ihre Funktion aufruft. Sie geben diesen Einstiegspunkt an, wenn Sie die Funktion bereitstellen.
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/
Ereignisgesteuerte Funktionen bereitstellen
Verwenden Sie den Befehl gcloud run deploy, um die Funktionen in Cloud Run bereitzustellen.
Stellen Sie die Funktion bereit, die die Cloud SQL-Instanz startet:
gcloud run deploy startinstance \ --source . \ --function startInstanceEvent \ --base-image nodejs24 \ --region=us-west1 \ --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Wenn Sie aufgefordert werden, ein Repository in der angegebenen Region zu erstellen, geben Sie
yein.Geben Sie bei der Eingabeaufforderung
Allow unauthenticated invocationsden Wertnein.Funktion zum Herunterfahren der Cloud SQL-Instanz bereitstellen:
gcloud run deploy stopinstance \ --source . \ --function stopInstanceEvent \ --base-image nodejs24 \ --region=us-west1 \ --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Wenn Sie aufgefordert werden, ein Repository in der angegebenen Region zu erstellen, geben Sie
yein.Geben Sie bei der Eingabeaufforderung
Allow unauthenticated invocationsden Wertnein.
Wenn die Bereitstellung abgeschlossen ist, wird in der Google Cloud CLI eine URL angezeigt, unter der der Dienst ausgeführt wird.
Eventarc-Trigger erstellen
Mit dem Befehl gcloud eventarc triggers create erstellen Sie Eventarc-Trigger, die Ereignisse aus Pub/Sub weiterleiten. Jede Nachricht, die im Pub/Sub-Thema veröffentlicht wird, löst die entsprechende Funktion aus. Der Inhalt der Nachricht wird als Eingabedaten übergeben.
Erstellen Sie einen Trigger, der die Cloud SQL-Instanz startet:
gcloud eventarc triggers create start-instance-trigger \ --location=us-west1 \ --destination-run-service=startinstance \ --destination-run-region=us-west1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=start-instance-event \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Erstellen Sie einen Trigger, der die Cloud SQL-Instanz stoppt:
gcloud eventarc triggers create stop-instance-trigger \ --location=us-west1 \ --destination-run-service=stopinstance \ --destination-run-region=us-west1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=stop-instance-event \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Es kann bis zu 2 Minuten dauern, bis ein neuer Trigger aktiv wird.
Optional: Prüfen Sie, ob die Funktionen ordnungsgemäß funktionieren.
Sie können die Funktionsweise Ihrer Funktionen überprüfen, indem Sie Nachrichten direkt in den Pub/Sub-Themen veröffentlichen. Es kann einige Minuten dauern, bis die Cloud SQL-Instanz aktualisiert ist.
Verwenden Sie den Befehl
gcloud pubsub topics publish, um eine Nachricht im Stopp-Thema zu veröffentlichen und Instanzen mit dem Labelenv=devzu beenden:gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
Prüfen Sie mit dem Befehl
gcloud sql instances describe, ob die Instanz beendet wurde:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Die Ausgabe sollte wie so aussehen:
NEVER.Wenn Sie Instanzen mit dem Label
env=devstarten möchten, veröffentlichen Sie eine Nachricht im Start-Thema:gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
Prüfen Sie die Aktivierungsrichtlinie, um zu bestätigen, dass die Instanz gestartet wurde:
gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Die Ausgabe sollte wie so aussehen:
ALWAYS.
Cloud Scheduler-Jobs erstellen
Erstellen Sie Cloud Scheduler-Jobs, die regelmäßig Nachrichten in den Pub/Sub-Themen veröffentlichen.
Wenn Sie einen Job erstellen möchten, der von Montag bis Freitag um 9:00 Uhr ausgeführt wird und die Instanzen startet, verwenden Sie den Befehl
gcloud scheduler jobs create:gcloud scheduler jobs create pubsub startup-dev-instances \ --schedule '0 9 * * 1-5' \ --topic start-instance-event \ --message-body '{"label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-east1
Erstellen Sie einen Job, der montags bis freitags um 17:00 Uhr ausgeführt wird und die Instanzen stoppt:
gcloud scheduler jobs create pubsub shutdown-dev-instances \ --schedule '0 17 * * 1-5' \ --topic stop-instance-event \ --message-body '{"label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-east1
Aufgrund der Erstkonfiguration kann es einige Minuten dauern, bis der erste Job, der in einem Projekt erstellt wurde, ausgeführt wird.
Optional: Überprüfen Sie, ob die Jobs funktionieren.
Sie können Ihre Cloud Scheduler-Jobs manuell ausführen, um zu prüfen, ob sie die Start- und Stoppfunktionen erfolgreich auslösen. Es kann einige Minuten dauern, bis die Cloud SQL-Instanz aktualisiert wird.
Verwenden Sie den Befehl
gcloud scheduler jobs run, um den Job auszuführen und die Cloud SQL-Instanz zu beenden:gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
Prüfen Sie, ob die Aktivierungsrichtlinie von
dev-instanceNEVERist:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Führen Sie den Job aus, um die Instanz zu starten:
gcloud scheduler jobs run startup-dev-instances --location="us-east1"
Prüfen Sie, ob die Aktivierungsrichtlinie von
dev-instanceALWAYSist:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Bereinigen
Wenn Sie vermeiden möchten, dass Ihnen die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden, löschen Sie sie.
- Löschen Sie die Cloud Scheduler-Jobs:
gcloud scheduler jobs delete startup-dev-instances --location=us-east1 --quiet gcloud scheduler jobs delete shutdown-dev-instances --location=us-east1 --quiet
- Löschen Sie die Eventarc-Trigger:
gcloud eventarc triggers delete start-instance-trigger --location=us-west1 --quiet gcloud eventarc triggers delete stop-instance-trigger --location=us-west1 --quiet
- Löschen Sie die Cloud Run-Dienste:
gcloud run services delete startinstance --region=us-west1 --quiet gcloud run services delete stopinstance --region=us-west1 --quiet
- Löschen Sie die Pub/Sub-Themen:
gcloud pubsub topics delete start-instance-event gcloud pubsub topics delete stop-instance-event
- Löschen Sie die Cloud SQL-Instanz:
gcloud sql instances delete dev-instance --quiet
- Alternativ können Sie Ihr Google Cloud -Projekt löschen, um wiederkehrende Gebühren zu vermeiden. Wenn Sie Ihr Google Cloud -Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
Google Cloud -Projekt löschen:
gcloud projects delete PROJECT_ID
Nächste Schritte
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center