Starten oder Beenden einer Cloud SQL-Instanz planen

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:

  1. Erstellen Sie eine Cloud SQL for SQL Server-Instanz und weisen Sie ihr ein bestimmtes Ressourcenlabel (env=dev) zu.
  2. Erstellen Sie zwei Pub/Sub-Themen, die als Ereignisquellen für Ihre Eventarc-Trigger und als Message-Broker dienen.
  3. 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.
  4. 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.
  5. 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:

Cloud SQL-Instanzen nach Zeitplan starten und stoppen
Cloud SQL-Instanzen nach Zeitplan starten und beenden (zum Vergrößern auf das Diagramm klicken)

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.

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.

  1. 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.
  2. Installieren Sie die Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. 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 Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch 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_ID durch Ihren Google Cloud Projektnamen.

  6. 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.

  7. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.

  8. 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 Rollen

    gcloud services enable cloudbuild.googleapis.com cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com
  9. Richten Sie die Authentifizierung ein:

    1. 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
    2. Erstellen Sie das Dienstkonto:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ersetzen Sie SERVICE_ACCOUNT_NAME mit einem Namen für das Dienstkonto.

    3. Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker fü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 Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
      • ROLE: die zu gewährende Rolle
  10. Installieren Sie die Google Cloud CLI.

  11. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  12. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  13. 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 Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch 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_ID durch Ihren Google Cloud Projektnamen.

  14. 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.

  15. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.

  16. 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 Rollen

    gcloud services enable cloudbuild.googleapis.com cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com
  17. Richten Sie die Authentifizierung ein:

    1. 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
    2. Erstellen Sie das Dienstkonto:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ersetzen Sie SERVICE_ACCOUNT_NAME mit einem Namen für das Dienstkonto.

    3. Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker fü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 Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
      • ROLE: die zu gewährende Rolle

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 activationPolicy der Instanz auf ALWAYS, wodurch die Instanz eingeschaltet wird.
  • Die Stoppfunktion aktualisiert activationPolicy auf NEVER, 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.

  1. 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.

  2. 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.

  1. 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
  2. Wenn Sie aufgefordert werden, ein Repository in der angegebenen Region zu erstellen, geben Sie y ein.

  3. Geben Sie bei der Eingabeaufforderung Allow unauthenticated invocations den Wert n ein.

  4. 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
  5. Wenn Sie aufgefordert werden, ein Repository in der angegebenen Region zu erstellen, geben Sie y ein.

  6. Geben Sie bei der Eingabeaufforderung Allow unauthenticated invocations den Wert n ein.

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.

  1. 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
  2. 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.

  1. Wenn Sie Instanzen mit dem Label env=dev beenden möchten, verwenden Sie den Befehl gcloud pubsub topics publish, um eine Nachricht im Thema „stop“ zu veröffentlichen:

    gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
  2. 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.

  3. Wenn Sie Instanzen mit dem Label env=dev starten möchten, senden Sie eine Nachricht an das Start-Thema:

    gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
  4. 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.

  1. 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
  2. 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.

  1. 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"
  2. Prüfen Sie, ob die Aktivierungsrichtlinie von dev-instance NEVER ist:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
  3. Führen Sie den Job aus, um die Instanz zu starten:

    gcloud scheduler jobs run startup-dev-instances --location="us-east1"
  4. Prüfen Sie, ob die Aktivierungsrichtlinie von dev-instance ALWAYS ist:

    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.

  1. 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
  2. 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
  3. 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
  4. Löschen Sie die Pub/Sub-Themen:
    gcloud pubsub topics delete start-instance-event
    gcloud pubsub topics delete stop-instance-event
  5. Löschen Sie die Cloud SQL-Instanz:
    gcloud sql instances delete dev-instance --quiet
  6. 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