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 diesem Tutorial wird gezeigt, wie Sie eine Cloud SQL for SQL Server-Instanz automatisch starten und stoppen können, indem Sie eine ereignisgesteuerte Architektur mit Google Cloud -Produkten erstellen.
Ziele
In dieser Anleitung erstellen Sie Cloud Scheduler-Jobs, mit denen Cloud SQL-Instanzen mit dem Ressourcenlabel env=dev für die Ausführung zu bestimmten Zeiten geplant werden. Sie planen nur eine Instanz. Die in dieser Anleitung beschriebene Architektur kann jedoch verwendet werden, um mehrere Instanzen zu stoppen und zu starten, 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. Planen Sie, 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 einfach 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.
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- 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 Ihren Google Cloud Projektnamen.
-
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 API, Cloud Functions API, Cloud Pub/Sub API, Cloud Run Admin API, Cloud Scheduler API, Cloud SQL Admin API und Eventarc API, falls sie noch nicht aktiviert sind:
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.
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- 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 Ihren Google Cloud Projektnamen.
-
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 API, Cloud Functions API, Cloud Pub/Sub API, Cloud Run Admin API, Cloud Scheduler API, Cloud SQL Admin API und Eventarc API, falls sie noch nicht aktiviert sind:
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 (env=dev) angegeben ist:
- 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 automatisch Ereignisse entpacken, die der CloudEvents entsprechen. 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.Stellen Sie die Funktion bereit, die die Cloud SQL-Instanz herunterfährt:
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
Verwenden Sie den Befehl gcloud eventarc triggers create, um Eventarc-Trigger zu erstellen, die Ereignisse aus Pub/Sub weiterleiten. Jede im Pub/Sub-Thema veröffentlichte Nachricht löst die entsprechende Funktion aus. Die Inhalte der Nachricht werden 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 beendet:
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 zwei Minuten dauern, bis ein neuer Trigger aktiv wird.
Optional: Prüfen, ob die Funktionen 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 wird.
Wenn Sie Instanzen mit dem Label
env=devbeenden möchten, verwenden Sie den Befehlgcloud pubsub topics publish, um eine Nachricht im Thema „stop“ zu veröffentlichen: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, senden Sie eine Nachricht an das Start-Thema:gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
Prüfen Sie anhand der Aktivierungsrichtlinie, ob 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.
Verwenden Sie den
gcloud scheduler jobs create-Befehl, um einen Job zu erstellen, der von Montag bis Freitag um 9:00 Uhr ausgeführt wird und die Instanzen startet: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 von Montag bis Freitag 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: Prüfen, 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 ist.
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.
So löschen Sie ein Google Cloud -Projekt:
gcloud projects delete PROJECT_ID
Nächste Schritte
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center