Programa y ejecuta 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 tu infraestructura de nube con código. Puedes obtener más información para usar Terraform y aprovisionar infraestructura en Google Cloud.

Cloud Scheduler cuenta con 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. Usa Terraform para crear un trabajo cron para Cloud Scheduler.
  2. Configura un programa recurrente para el trabajo.
  3. Especificar un tema de Pub/Sub como destino del trabajo
  4. Ejecute el trabajo.
  5. Verificar si el trabajo se ejecutó de forma correcta

Antes de comenzar

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Install the Google Cloud CLI.

  3. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Install the Google Cloud CLI.

  7. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  8. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  9. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Cloud Shell ya tiene Terraform integrado. Si necesitas instalar Terraform, consulta la documentación de HashiCorp Terraform.
  11. Crea un archivo de configuración de Terraform

    Para usar Terraform con Cloud Scheduler, debes crear un archivo de configuración para describir tu infraestructura y crear un plan de ejecución. Luego, aplicas 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 los siguientes recursos del proveedor de Terraform para 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 pueden 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 los 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!")
          }
        }

        En el ejemplo, se usan los siguientes argumentos:

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

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

        • region: Es la región en la que 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 información, consulta la referencia de argumentos del registro de Terraform.

    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 haya creado 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 a las 16:30 los domingos. Ahora puedes ejecutar el trabajo.

    Ejecuta tu trabajo

    Además de ejecutarse según el programa especificado, puedes forzar la ejecución inmediata de tu trabajo con 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 tu 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 Google Cloud que tiene los recursos.

    1. Si borras tu proyecto Google Cloud , se detendrá la facturación de todos los recursos que se usaron en él. Ten en cuenta que, de forma predeterminada, todos los archivos de tu directorio principal de Cloud Shell (por ejemplo, los archivos de Terraform) se conservan entre sesiones.

      Delete a Google Cloud project:

      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 de Terraform actual. Tu archivo de configuración de Terraform no se destruye. Para obtener más información, consulta Cómo destruir la infraestructura.

      terraform destroy

    ¿Qué sigue?