Pianifica ed esegui un cron job utilizzando Terraform

Questa guida rapida mostra come utilizzare Terraform per creare un cron job di Cloud Scheduler. Terraform è uno strumento Infrastructure as Code (IaC) che ti consente di creare, modificare e migliorare in modo prevedibile la tua infrastruttura cloud utilizzando il codice. Puoi scoprire di più sull'utilizzo di Terraform per il provisioning dell'infrastruttura su Google Cloud.

Cloud Scheduler ha un livello senza costi e l'esecuzione di questa guida rapida non dovrebbe comportare costi. Per saperne di più, consulta i prezzi.

In questa guida rapida:

  1. Utilizza Terraform per creare un cron job per Cloud Scheduler.
  2. Imposta una pianificazione ricorrente per il job.
  3. Specificare un argomento Pub/Sub come target del job.
  4. Esegui il job.
  5. Verificare che il job sia stato eseguito correttamente.

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.

    Se non ne hai già uno, registrati per creare un nuovo account.

  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.
    • Crea 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. Abilita le API Resource Manager e Service Usage, se non sono già abilitate:

    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 servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. Installa Google Cloud CLI.

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

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. 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.
    • Crea 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 .

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

  13. Abilita le API Resource Manager e Service Usage, se non sono già abilitate:

    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 servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. Terraform è già integrato in Cloud Shell. Se devi installare Terraform, consulta la documentazione di HashiCorp Terraform.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per completare questa guida rapida, chiedi all'amministratore di concederti i seguenti ruoli IAM nel tuo progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Crea un file di configurazione Terraform

Per utilizzare Terraform con Cloud Scheduler, devi creare un file di configurazione per descrivere la tua infrastruttura e creare un piano di esecuzione. Quindi, applichi il file di configurazione alla tua piattaforma o al tuo servizio per eseguire operazioni che eseguono il provisioning dell'infrastruttura.

Completa i seguenti passaggi per creare un file di configurazione Terraform denominato main.tf:

  1. Apri un terminale e crea una directory:

    mkdir terraform
  2. Vai alla directory terraform:

    cd terraform
  3. Aggiungi un nuovo file, main.tf, alla directory:

    nano main.tf
  4. Aggiungi le seguenti risorse del provider Terraform per Google Cloud al file main.tf:

    1. Abilita le API Cloud Scheduler e Pub/Sub:

      # Enable Cloud Scheduler API
      resource "google_project_service" "scheduler" {
        service            = "cloudscheduler.googleapis.com"
        disable_on_destroy = false
      }
      # Enable Pub/Sub API
      resource "google_project_service" "pubsub" {
        service            = "pubsub.googleapis.com"
        disable_on_destroy = false
      }
    2. Crea un argomento Pub/Sub come risorsa a cui i publisher possono inviare messaggi:

      # Create Pub/Sub topic
      resource "google_pubsub_topic" "default" {
        name = "pubsub_topic"
      }

      Viene creato un argomento denominato pubsub_topic.

    3. Crea una sottoscrizione per ricevere i messaggi pubblicati nell'argomento Pub/Sub:

      # Create Pub/Sub subscription
      resource "google_pubsub_subscription" "default" {
        name  = "pubsub_subscription"
        topic = google_pubsub_topic.default.name
      }
    4. Crea un cron job utilizzando la risorsa google_cloud_scheduler_job:

      # Create a cron job using Cloud Scheduler
      resource "google_cloud_scheduler_job" "default" {
        name        = "test-job"
        description = "test job"
        schedule    = "30 16 * * 7"
        region      = "us-east1"
      
        pubsub_target {
          topic_name = google_pubsub_topic.default.id
          data       = base64encode("Hello world!")
        }
      }

      Nell'esempio vengono utilizzati i seguenti argomenti:

      • name: il nome del job.
      • description: una descrizione del job.
      • schedule: la frequenza del job, utilizzando un formato basato su unix-cron.

        In questo esempio, 30 16 * * 7 significa che il job verrà eseguito alle 16:30 di domenica. Per saperne di più, consulta Formato e fuso orario del cron job.

      • region: la regione in cui si trova il job.

      • pubsub_target: la destinazione dell'argomento Pub/Sub, incluso il nome completo della risorsa dell'argomento (topic_name) a cui viene pubblicato il payload del messaggio (data) quando viene eseguito il job.

      Sono supportati altri argomenti. Per maggiori dettagli, consulta il riferimento agli argomenti del registro Terraform.

Per un altro esempio di utilizzo di Terraform con Cloud Scheduler, consulta Esecuzione dei servizi Cloud Run in base a una pianificazione.

Crea il cron job

Esegui il deployment delle risorse Terraform per creare il job cron.

  1. Apri un terminale e, nella directory terraform, inizializza Terraform:

    terraform init
  2. Verifica che le modifiche che proponi con Terraform corrispondano al piano previsto:

    terraform plan

    Puoi ignorare la nota relativa al mancato utilizzo dell'opzione -out.

  3. Crea il cron job:

    terraform apply
  4. Al prompt Inserisci un valore, digita yes per procedere con la creazione delle risorse.

  5. Verifica che sia stato creato un job:

    gcloud scheduler jobs describe test-job --location=us-east1

    L'output dovrebbe essere simile al seguente:

    description: test job
    lastAttemptTime: '2024-04-04T13:56:00.669530Z'
    name: projects/PROJECT_ID/locations/us-east1/jobs/test-job
    pubsubTarget:
    data: dGVzdA==
    topicName: projects/PROJECT_ID/topics/pubsub_topic
    schedule: '30 16 * * 7'
    scheduleTime: '2024-04-04T13:58:00.737907Z'
    state: ENABLED

Hai creato un job che invia un messaggio a un argomento Pub/Sub alle 16:30 di domenica. Ora puoi eseguire il job.

Esegui il job

Oltre all'esecuzione in base alla pianificazione specificata, puoi forzare l'esecuzione immediata del job eseguendo questo comando.

gcloud scheduler jobs run test-job --location=us-east1

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

Verifica i risultati

Verifica che l'argomento Pub/Sub riceva messaggi dal job.

  1. Esegui il pull dei messaggi Pub/Sub da una sottoscrizione:

    gcloud pubsub subscriptions pull pubsub_subscription --limit 5
    

    Se inizialmente non vengono estratti messaggi, esegui di nuovo il comando.

  2. Visualizza i risultati dell'esecuzione del job. L'output dovrebbe essere simile al seguente:

    DATA: Hello world!
    MESSAGE_ID: 5028933846601543
    ORDERING_KEY:
    ATTRIBUTES:
    DELIVERY_ATTEMPT:
    ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
    

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il progetto Google Cloud con le risorse.

  1. L'eliminazione del tuo progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate al suo interno. Tieni presente che, per impostazione predefinita, tutti i file nella home directory di Cloud Shell (ad esempio, tutti i file Terraform) vengono mantenuti tra una sessione e l'altra.

    Elimina un progetto Google Cloud :

    gcloud projects delete PROJECT_ID
  2. In alternativa, puoi eliminare tutte le risorse che hai creato con Terraform.

    Il comando terraform destroy termina tutte le risorse specificate nel tuo stato Terraform. Non elimina le risorse non gestite dal progetto Terraform corrente. Il file di configurazione Terraform non viene eliminato. Per saperne di più, consulta Distruggi l'infrastruttura.

    terraform destroy

Passaggi successivi