Esecuzione di servizi in base a una pianificazione

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Puoi utilizzare Cloud Scheduler per attivare in modo sicuro un servizio Cloud Run in base a una pianificazione. in modo simile all'utilizzo dei cron jobs.

I possibili casi d'uso includono:

  • Eseguire i backup a tempo
  • Eseguire attività di amministrazione ricorrenti, ad esempio:
    • Rigenerazione di una Sitemap
    • Eliminazione di vecchi dati, contenuti, configurazione o revisioni
    • Sincronizzazione dei contenuti tra i sistemi di dati
    • Elaborazione delle notifiche email giornaliere
    • Verifica e reporting sull'accesso ai servizi di downstream
  • Generazione di documenti come le fatture

Questa pagina mostra come utilizzare in modo sicuro Cloud Scheduler con Cloud Run nello stesso progetto Google Cloud.

Prima di iniziare

Abilita l'API Cloud Scheduler per il progetto in uso.

Creazione e deployment del servizio

Per creare ed eseguire il deployment:

  1. Nel servizio, implementa il job che vuoi eseguire in base a una pianificazione.

  2. Nota quale tipo di richiesta prevede che il servizio riceva le richieste di job, ad esempio GET o POST. Quando crei il job programmato che richiama il tuo servizio, devi specificare il metodo HTTP corrispondente.

  3. Quando esegui il deployment del servizio che stai utilizzando con Cloud Scheduler, assicurati di NON consentire chiamate non autenticate.

L'esempio seguente mostra come eseguire il deployment di un servizio Cloud Run utilizzando Terraform:

resource "google_cloud_run_service" "default" {
  name     = "my-scheduled-service"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/hello"
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }

  # Use an explicit depends_on clause to wait until API is enabled
  depends_on = [
    google_project_service.run_api
  ]
}

Sostituisci us-docker.pkg.dev/cloudrun/container/hello con un riferimento alla tua immagine container.

Creazione di un account di servizio per Cloud Scheduler

Devi creare un account di servizio da associare a Cloud Scheduler e concedere all'account di servizio l'autorizzazione per richiamare il servizio Cloud Run. Puoi utilizzare un account di servizio esistente per rappresentare Cloud Scheduler oppure puoi crearne uno nuovo.

Per creare un account di servizio e autorizzarlo a richiamare il servizio Cloud Run:

Console

  1. In Google Cloud Console, vai alla pagina Account di servizio.

    Vai agli account di servizio

  2. Seleziona un progetto.

  3. Inserisci il nome di un account di servizio da visualizzare in Google Cloud Console.

    Google Cloud Console genera un ID account di servizio in base a questo nome. Modifica l'ID, se necessario. Non potrai modificare l'ID in un secondo momento.

  4. (Facoltativo) Inserisci una descrizione dell'account di servizio.

  5. Fai clic su Crea.

  6. Fai clic sul campo Seleziona un ruolo.

  7. In Tutti i ruoli, seleziona Cloud Run > Invoker di Cloud Run.

  8. Fai clic su Fine.

Riga di comando

  1. Crea l'account di servizio:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
       --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"

    Sostituisci

    • SERVICE_ACCOUNT_NAME con un nome in lettere minuscole univoco all'interno del progetto Google Cloud, ad esempio my-invoker-service-account-name.
    • DISPLAYED_SERVICE_ACCOUNT_NAME con il nome che vuoi visualizzare per questo account di servizio, ad esempio nella console, ad esempio My Invoker Service Account.
  2. Per Cloud Run, concedi al tuo account di servizio l'autorizzazione per richiamare il tuo servizio:

    gcloud run services add-iam-policy-binding SERVICE \
       --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --role=roles/run.invoker

    Sostituisci

    • SERVICE con il nome del servizio per il quale vuoi ricevere chiamate da Cloud Scheduler.
    • SERVICE_ACCOUNT_NAME con il nome dell'account di servizio.
    • PROJECT_ID con il tuo ID progetto Google Cloud.

Terraform

Per creare un account di servizio utilizzando Terraform:

resource "google_service_account" "default" {
  account_id   = "scheduler-sa"
  description  = "Cloud Scheduler service account; used to trigger scheduled Cloud Run jobs."
  display_name = "scheduler-sa"

  # Use an explicit depends_on clause to wait until API is enabled
  depends_on = [
    google_project_service.iam_api
  ]
}

Creazione di un job Cloud Scheduler

Dovrai creare un job che richiami il tuo servizio negli orari specificati. Puoi utilizzare la console o la riga di comando:

Per creare un job, puoi utilizzare la console o la riga di comando gcloud. Fai clic sulla scheda appropriata:

Console

  1. Visita la pagina della console di Cloud Scheduler.

    Vai a Cloud Scheduler

  2. Fai clic su Crea job.

    screenshot

  3. Specifica un nome per il lavoro.

  4. Specifica la frequenza o l'intervallo di job a cui deve essere eseguito il job, utilizzando una stringa di configurazione. Ad esempio, la stringa 0 */3 * * * esegue il job ogni 3 ore. La stringa fornita qui può essere qualsiasi stringa compatibile con crontab.

    Per saperne di più, consulta Configurazione delle pianificazioni dei job.

  5. Nell'elenco a discesa, scegli il fuso orario da utilizzare per la frequenza del job.

  6. Specifica HTTP come target:

    1. Specifica l'URL completo del servizio, ad esempio https://myservice-abcdef-uc.a.run.app Il job invierà le richieste a questo URL.

    2. Specifica il metodo HTTP: il metodo deve corrispondere a quanto previsto dal servizio Cloud Run di cui hai eseguito il deployment in precedenza. Il valore predefinito è POST.

    3. Facoltativamente, puoi specificare i dati da inviare alla destinazione. Questi dati vengono inviati nel corpo della richiesta quando è selezionato il metodo HTTP POST o PUT.

    4. Fai clic su Altro per visualizzare le impostazioni di autenticazione.

    5. Dal menu a discesa, seleziona Aggiungi token OIDC.

    6. Nel campo Account di servizio, copia l'indirizzo email dell'account di servizio creato in precedenza.

    7. Nel campo Pubblico, copia l'URL completo del servizio.

  7. Fai clic su Crea per creare e salvare il job.

Riga di comando

  1. Crea il job:

    gcloud scheduler jobs create http test-job --schedule "5 * * * *" \
       --http-method=HTTP-METHOD \
       --uri=SERVICE-URL \
       --oidc-service-account-email=SERVICE-ACCOUNT-EMAIL   \
       --oidc-token-audience=SERVICE-URL

    Sostituisci

    • HTTP-METHOD con il metodo HTTP, ad esempio GET, POST, PUT e così via.
    • SERVICE-URL con l'URL del tuo servizio.
    • SERVICE-ACCOUNT-EMAIL con l'indirizzo email del tuo account di servizio.

Terraform

Per creare un job Cloud Scheduler per il servizio Cloud Run:

resource "google_cloud_scheduler_job" "default" {
  name             = "scheduled-cloud-run-job"
  description      = "Invoke a Cloud Run container on a schedule."
  schedule         = "*/8 * * * *"
  time_zone        = "America/New_York"
  attempt_deadline = "320s"

  retry_config {
    retry_count = 1
  }

  http_target {
    http_method = "POST"
    uri         = google_cloud_run_service.default.status[0].url

    oidc_token {
      service_account_email = google_service_account.default.email
    }
  }

  # Use an explicit depends_on clause to wait until API is enabled
  depends_on = [
    google_project_service.scheduler_api
  ]
}

Il servizio Cloud Run verrà attivato tramite una richiesta dal job Cloud Scheduler alla frequenza definita. Puoi verificare e monitorare questo risultato esaminando i log per questo servizio.

Passaggi successivi