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:
- Crea un'istanza Cloud SQL per SQL Server e
assegnale un'etichetta risorsa specifica
(
env=dev). - Crea due argomenti Pub/Sub che fungano da origini eventi per i trigger Eventarc e da broker di messaggi.
- 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). - 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.
- 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:
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di 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
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
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.
- 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.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
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'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon 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_IDcon il nome del progetto Google Cloud .
-
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.
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .
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 -
Configura l'autenticazione:
-
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. -
Crea l'account di servizio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Sostituisci
SERVICE_ACCOUNT_NAMEcon un nome per il account di servizio. -
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 servizioPROJECT_ID: l'ID progetto in cui hai creato il account di servizioROLE: il ruolo da concedere
-
Assicurati di disporre del ruolo IAM Creazione account di servizio
(
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
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'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon 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_IDcon il nome del progetto Google Cloud .
-
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.
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .
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 -
Configura l'autenticazione:
-
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. -
Crea l'account di servizio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Sostituisci
SERVICE_ACCOUNT_NAMEcon un nome per il account di servizio. -
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 servizioPROJECT_ID: l'ID progetto in cui hai creato il account di servizioROLE: il ruolo da concedere
-
Assicurati di disporre del ruolo IAM Creazione account di servizio
(
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
activationPolicydell'istanza aALWAYS, che la attiva. - La funzione di arresto aggiorna
activationPolicyaNEVER, 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.
Scarica il codice.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
In alternativa puoi scaricare l'esempio come file ZIP ed estrarlo.
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.
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
Se ti viene chiesto di creare un repository nella regione specificata, digita
y.Nel prompt
Allow unauthenticated invocations, digitan.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
Se ti viene chiesto di creare un repository nella regione specificata, digita
y.Nel prompt
Allow unauthenticated invocations, digitan.
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.
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
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.
Per arrestare le istanze con l'etichetta
env=dev, utilizza il comandogcloud pubsub topics publishper pubblicare un messaggio nell'argomento di arresto:gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
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.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"}'
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.
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
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.
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"
Verifica che il criterio di attivazione di
dev-instancesiaNEVER:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Esegui il job per avviare l'istanza:
gcloud scheduler jobs run startup-dev-instances --location="us-east1"
Verifica che il criterio di attivazione di
dev-instancesiaALWAYS: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.
- 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
- 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
- Elimina i servizi Cloud Run:
gcloud run services delete startinstance --region=us-west1 --quiet gcloud run services delete stopinstance --region=us-west1 --quiet
- Elimina gli argomenti Pub/Sub:
gcloud pubsub topics delete start-instance-event gcloud pubsub topics delete stop-instance-event
- Elimina l'istanza Cloud SQL:
gcloud sql instances delete dev-instance --quiet
- 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.