Pianifica l'avvio o l'arresto di un'istanza Cloud SQL

Puoi utilizzare Cloud Scheduler per avviare e arrestare le istanze Cloud SQL in base a una pianificazione regolare. Ad esempio, potresti voler eseguire le istanze solo in determinate ore.

Questo tutorial mostra come avviare e arrestare automaticamente un'istanza Cloud SQL per SQL Server creando un'architettura basata su eventi utilizzando i prodotti Google Cloud .

Obiettivi

In questo tutorial creerai job Cloud Scheduler che pianificano istanze Cloud SQL con un'etichetta risorsa env=dev da eseguire durante ore specifiche. Pianificherai una sola istanza. Tuttavia, l'architettura descritta in questo tutorial può essere utilizzata per arrestare e avviare più istanze in cui l'etichetta della risorsa è env=dev.

Per raggiungere questo obiettivo, completa i seguenti passaggi:

  1. Crea un'istanza Cloud SQL per SQL Server e assegnale un'etichetta risorsa specifica (env=dev).
  2. Crea due argomenti Pub/Sub che fungano da origini eventi per i trigger Eventarc e da broker di messaggi.
  3. Crea ed esegui il deployment di due funzioni Cloud Run basate su eventi attivate tramite gli argomenti Pub/Sub. Quando vengono attivate, le funzioni cercano istanze Cloud SQL nel tuo progetto che corrispondono all'etichetta fornita nel payload del messaggio Pub/Sub (env=dev).
  4. Crea e implementa due trigger Eventarc. Gli eventi dell'argomento Pub/Sub vengono indirizzati alle tue funzioni come richieste HTTP e i contenuti del messaggio di evento vengono passati come dati di input alle funzioni.
  5. Crea due cron job Cloud Scheduler per pubblicare un messaggio contenente l'etichetta di destinazione negli argomenti Pub/Sub in momenti specifici. Pianifica l'avvio delle istanze alle 9:00 e l'arresto alle 17:00, dal lunedì al venerdì.

Il seguente diagramma fornisce una panoramica dell'architettura basata su eventi:

Avvio e arresto delle istanze Cloud SQL in base a una pianificazione
Avvio e arresto delle istanze Cloud SQL in base a una pianificazione (fai clic sul diagramma per ingrandirlo).

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prima di iniziare

I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, vedi Sviluppare applicazioni in un ambiente Google Cloud vincolato.

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Creare un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  6. Se utilizzi un progetto esistente per questa guida, verifica di disporre delle autorizzazioni necessarie per completare la guida. Se hai creato un nuovo progetto, disponi già delle autorizzazioni necessarie.

  7. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .

  8. Abilita le API Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin ed Eventarc:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    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. Configura l'autenticazione:

    1. Assicurati di disporre del ruolo IAM Creazione account di servizio (roles/iam.serviceAccountCreator) e del ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin). Scopri come concedere i ruoli.
    2. Crea l'account di servizio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Sostituisci SERVICE_ACCOUNT_NAME con un nome per il account di servizio.

    3. Concedi ruoli al account di servizio. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Sostituisci quanto segue:

      • SERVICE_ACCOUNT_NAME: il nome del account di servizio
      • PROJECT_ID: l'ID progetto in cui hai creato il account di servizio
      • ROLE: il ruolo da concedere
  10. Installa Google Cloud CLI.

  11. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  12. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  13. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Creare un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  14. Se utilizzi un progetto esistente per questa guida, verifica di disporre delle autorizzazioni necessarie per completare la guida. Se hai creato un nuovo progetto, disponi già delle autorizzazioni necessarie.

  15. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .

  16. Abilita le API Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin ed Eventarc:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    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. Configura l'autenticazione:

    1. Assicurati di disporre del ruolo IAM Creazione account di servizio (roles/iam.serviceAccountCreator) e del ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin). Scopri come concedere i ruoli.
    2. Crea l'account di servizio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Sostituisci SERVICE_ACCOUNT_NAME con un nome per il account di servizio.

    3. Concedi ruoli al account di servizio. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Sostituisci quanto segue:

      • SERVICE_ACCOUNT_NAME: il nome del account di servizio
      • PROJECT_ID: l'ID progetto in cui hai creato il account di servizio
      • ROLE: il ruolo da concedere

Crea un'istanza Cloud SQL

Per creare un'istanza Cloud SQL per SQL Server con l'etichetta risorsa env=dev, utilizza il comando gcloud beta sql instances create:

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

La creazione dell'istanza potrebbe richiedere qualche minuto. Per saperne di più, vedi Crea istanze.

Crea argomenti Pub/Sub

Per creare i due argomenti Pub/Sub che fungono da origini eventi per i trigger Eventarc, utilizza il comando gcloud pubsub topics create:

gcloud pubsub topics create start-instance-event
gcloud pubsub topics create stop-instance-event

Per saperne di più, consulta Creare un argomento.

Crea ed esegui il deployment di Cloud Run Functions

Crea ed esegui il deployment di due funzioni Cloud Run (Node.js) attivate da Eventarc tramite argomenti Pub/Sub. Quando vengono attivate, le funzioni cercano le istanze Cloud SQL nel tuo progetto che corrispondono all'etichetta fornita nel payload del messaggio Pub/Sub (env=dev):

  • La funzione di avvio aggiorna activationPolicy dell'istanza a ALWAYS, che la attiva.
  • La funzione di arresto aggiorna activationPolicy a NEVER, che arresta l'istanza.

Per saperne di più, consulta Scrivere funzioni Cloud Run e Trigger di Cloud Run Functions.

Crea le funzioni

Crea funzioni Cloud Run basate su eventi che eseguono automaticamente l'unmarshalling degli eventi conformi alla specifica CloudEvents. Questa specifica standard di settore descrive i dati sugli eventi in modo comune.

Il codice sorgente deve definire un entry point della funzione, ovvero il codice che viene eseguito quando Cloud Run richiama la funzione. Specifichi questo entry point quando esegui il deployment della funzione.

  1. Scarica il codice.

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    In alternativa puoi scaricare l'esempio come file ZIP ed estrarlo.

  2. Vai alla directory corretta.

    cd nodejs-docs-samples/functions/scheduleinstance/

Esegui il deployment delle funzioni basate su eventi

Per eseguire il deployment delle funzioni su Cloud Run, utilizza il comando gcloud run deploy.

  1. Esegui il deployment della funzione che avvia l'istanza Cloud SQL:

    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. Se ti viene chiesto di creare un repository nella regione specificata, digita y.

  3. Nel prompt Allow unauthenticated invocations, digita n.

  4. Esegui il deployment della funzione che arresta l'istanza Cloud SQL:

    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. Se ti viene chiesto di creare un repository nella regione specificata, digita y.

  6. Nel prompt Allow unauthenticated invocations, digita n.

Al termine del deployment, la Google Cloud CLI mostra un URL in cui il servizio è in esecuzione.

Crea trigger Eventarc

Per creare trigger Eventarc che indirizzano gli eventi da Pub/Sub, utilizza il comando gcloud eventarc triggers create. Ogni messaggio pubblicato nell'argomento Pub/Sub attiva la funzione corrispondente e i contenuti del messaggio vengono passati come dati di input.

  1. Crea un trigger che avvii l'istanza Cloud SQL:

    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. Crea un trigger che arresti l'istanza Cloud SQL:

    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

L'attivazione di un nuovo trigger può richiedere fino a 2 minuti.

(Facoltativo) Verifica che le funzioni funzionino

Puoi verificare che le funzioni funzionino pubblicando direttamente i messaggi negli argomenti Pub/Sub. L'aggiornamento dell'istanza Cloud SQL potrebbe richiedere alcuni minuti.

  1. Per arrestare le istanze con l'etichetta env=dev, utilizza il comando gcloud pubsub topics publish per pubblicare un messaggio nell'argomento di arresto:

    gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
  2. Per verificare che l'istanza sia stata arrestata, controlla la relativa policy di attivazione utilizzando il comando gcloud sql instances describe:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

    L'output dovrebbe essere NEVER.

  3. Per avviare istanze con l'etichetta env=dev, pubblica un messaggio nell'argomento di avvio:

    gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
  4. Verifica che l'istanza sia stata avviata controllando la relativa policy di attivazione:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

    L'output dovrebbe essere ALWAYS.

Crea i job Cloud Scheduler

Crea job Cloud Scheduler che pubblicano messaggi negli argomenti Pub/Sub in base a una pianificazione regolare.

  1. Per creare un job che viene eseguito alle 9:00, dal lunedì al venerdì, e che avvia le istanze, utilizza il comando 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. Crea un job che viene eseguito alle 17:00, dal lunedì al venerdì, e che arresta le istanze:

    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

A causa della configurazione iniziale, l'esecuzione del primo job creato in un progetto può richiedere alcuni minuti.

(Facoltativo) Verifica che i job funzionino

Puoi eseguire manualmente i job Cloud Scheduler per verificare che attivino correttamente le funzioni di avvio e arresto. L'aggiornamento dell'istanza Cloud SQL potrebbe richiedere alcuni minuti.

  1. Per eseguire il job e arrestare l'istanza Cloud SQL, utilizza il comando gcloud scheduler jobs run:

    gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
  2. Verifica che il criterio di attivazione di dev-instance sia NEVER:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
  3. Esegui il job per avviare l'istanza:

    gcloud scheduler jobs run startup-dev-instances --location="us-east1"
  4. Verifica che il criterio di attivazione di dev-instance sia ALWAYS:

    gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"

Esegui la pulizia

Per evitare che ti vengano addebitati costi per le risorse utilizzate in questo tutorial, libera spazio eliminandole.

  1. Elimina i job Cloud Scheduler:
    gcloud scheduler jobs delete startup-dev-instances --location=us-east1 --quiet
    gcloud scheduler jobs delete shutdown-dev-instances --location=us-east1 --quiet
  2. Elimina i trigger Eventarc:
    gcloud eventarc triggers delete start-instance-trigger --location=us-west1 --quiet
    gcloud eventarc triggers delete stop-instance-trigger --location=us-west1 --quiet
  3. Elimina i servizi Cloud Run:
    gcloud run services delete startinstance --region=us-west1 --quiet
    gcloud run services delete stopinstance --region=us-west1 --quiet
  4. Elimina gli argomenti Pub/Sub:
    gcloud pubsub topics delete start-instance-event
    gcloud pubsub topics delete stop-instance-event
  5. Elimina l'istanza Cloud SQL:
    gcloud sql instances delete dev-instance --quiet
  6. In alternativa, puoi eliminare il tuo progetto Google Cloud per evitare addebiti. L'eliminazione del progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate al suo interno.

    Elimina un progetto Google Cloud :

    gcloud projects delete PROJECT_ID

Passaggi successivi

  • Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.