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 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:

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

Cloud SQL-Instanzen nach einem 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 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.

    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 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 den Namen Ihres Projekts in Google Cloud .

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

    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 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 den Namen Ihres Projekts in Google Cloud .

  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, 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 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 angegeben ist (env=dev):

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

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

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.

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

  1. Verwenden Sie den Befehl gcloud pubsub topics publish, um eine Nachricht im Stopp-Thema zu veröffentlichen und Instanzen mit dem Label env=dev zu beenden:

    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, veröffentlichen Sie eine Nachricht im Start-Thema:

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

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

  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.

    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