Crear y programar un trabajo cron con Terraform

En esta guía de inicio rápido, se muestra cómo usar Terraform para crear un trabajo cron de Cloud Scheduler. Terraform es una herramienta de infraestructura como código (IaC) que te permite crear, cambiar y mejorar de forma predecible una infraestructura de nube mediante código. Puedes obtener más información sobre cómo usar Terraform para aprovisionar infraestructura en Google Cloud.

Cloud Scheduler tiene un nivel gratuito, por lo que ejecutar esta guía de inicio rápido no debería generar ningún costo. Para obtener más información, consulta Precios.

En esta guía de inicio rápido, podrás hacer lo siguiente:

  1. Usar Terraform a fin de crear un trabajo cron para Cloud Scheduler
  2. Establecer una programación recurrente para el trabajo.
  3. Especificar un tema de Pub/Sub como destino del trabajo
  4. Ejecutar el trabajo:
  5. Verificar si el trabajo se ejecutó de forma correcta

Antes de comenzar

  1. Accede a tu cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  8. Cloud Shell ya tiene Terraform integrado. Si necesitas instalar Terraform, consulta la documentación de Terraform en HashiCorp.

Crea un archivo de configuración de Terraform

Si quieres usar Terraform con Cloud Scheduler, debes crear un archivo de configuración para describir tu infraestructura y crear un plan de ejecución. Luego, debes aplicar el archivo de configuración a tu plataforma o servicio para realizar operaciones que aprovisionan tu infraestructura.

Completa los siguientes pasos para crear un archivo de configuración de Terraform llamado main.tf:

  1. Abre una terminal y crea un directorio:

    mkdir terraform
  2. Ve al directorio terraform:

    cd terraform
  3. Agrega un archivo nuevo, main.tf, al directorio:

    nano main.tf
  4. Agrega el siguiente proveedor de Terraform para los recursos de Google Cloud al archivo main.tf:

    1. Habilita las APIs de Cloud Scheduler y 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 tema de Pub/Sub como un recurso al que los publicadores puedan enviar mensajes:

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

      Esto crea un tema llamado pubsub_topic.

    3. Crea una suscripción para recibir mensajes publicados en el tema de Pub/Sub:

      # Create Pub/Sub subscription
      resource "google_pubsub_subscription" "default" {
        name  = "pubsub_subscription"
        topic = google_pubsub_topic.default.name
      }
    4. Crea un trabajo cron con el recurso 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-central1"
      
        pubsub_target {
          topic_name = google_pubsub_topic.default.id
          data       = base64encode("Hello world!")
        }
      }

      Los siguientes argumentos se usan en la muestra:

      • name: Es el nombre del trabajo.
      • description: Es una descripción para el trabajo.
      • schedule: Es la frecuencia del trabajo, con un formato basado en unix-cron.

        En esta muestra, 30 16 * * 7 significa que el trabajo se ejecutará a las 16:30 los domingos. Para obtener más información, consulta Formato del trabajo cron y zona horaria.

      • region: Es la región donde reside el trabajo.

      • pubsub_target: Es el destino del tema de Pub/Sub, incluido el nombre completo del recurso del tema (topic_name) en el que se publica la carga útil del mensaje (data) cuando se ejecuta el trabajo.

      Se admiten otros argumentos. Para obtener más detalles, consulta la referencia de argumentos de Terraform Registry.

Crea el trabajo cron

Implementa tus recursos de Terraform para crear el trabajo cron.

  1. Abre una terminal y, en el directorio terraform, inicializa Terraform:

    terraform init
    
  2. Verifica que los cambios que propones con Terraform coincidan con el plan esperado:

    terraform plan
    

    Puedes ignorar la nota sobre no usar la opción -out.

  3. Crea el trabajo cron:

    terraform apply
    
  4. En el mensaje Ingresa un valor, escribe yes para continuar con la creación de recursos.

  5. Confirma que se creó un trabajo:

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

    El resultado debería ser similar al siguiente ejemplo:

    description: test job
    lastAttemptTime: '2024-04-04T13:56:00.669530Z'
    name: projects/PROJECT_ID/locations/us-central1/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
    

Creaste un trabajo que envía un mensaje a un tema de Pub/Sub los domingos a las 16:30. Ahora puedes ejecutar el trabajo.

Ejecuta tu trabajo

Además de ejecutar el trabajo de acuerdo con su programa especificado, puedes forzar la ejecución inmediata del trabajo si ejecutas el siguiente comando.

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

Ten en cuenta que, debido a la configuración inicial, el primer trabajo creado en un proyecto puede tardar unos minutos en ejecutarse.

Verifica los resultados

Verifica que el tema de Pub/Sub esté recibiendo mensajes de tu trabajo.

  1. Extraer mensajes de Pub/Sub de una suscripción:

    gcloud pubsub subscriptions pull pubsub_subscription --limit 5
    

    Si no se muestran mensajes inicialmente, vuelve a ejecutar el comando.

  2. Consulta los resultados de la ejecución de tu trabajo. El resultado debería ser similar al siguiente:

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

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.

  1. Si borras tu proyecto de Google Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto. Ten en cuenta que, de forma predeterminada, cualquier archivo en tu directorio principal de Cloud Shell (por ejemplo, cualquier archivo de Terraform) se conserva entre sesiones.

    Borra un proyecto de Google Cloud:

    gcloud projects delete PROJECT_ID
  2. Como alternativa, puedes borrar todos los recursos que creaste con Terraform.

    El comando terraform destroy finaliza todos los recursos especificados en tu estado de Terraform. No destruye los recursos que no administra el proyecto actual de Terraform. Tu archivo de configuración de Terraform no se destruyó. Para obtener más información, consulta Destruye la infraestructura.

    terraform destroy

¿Qué sigue?