Programar e executar um cron job usando o Terraform

Neste guia de início rápido, mostramos como usar o Terraform para criar um cron job do Cloud Scheduler. O Terraform é uma ferramenta de infraestrutura como código (IaC) que permite criar, mudar e melhorar de maneira previsível sua infraestrutura em nuvem usando código. Saiba mais sobre o uso do Terraform para provisionar infraestrutura em Google Cloud.

O Cloud Scheduler tem um nível gratuito. Não convém executar este guia de início rápido. resultar em custos. Para saber mais informações, consulte Preços.

Neste guia de início rápido, você fará as seguintes tarefas:

  1. Use o Terraform para criar um cron job para o Cloud Scheduler.
  2. Definir uma programação recorrente para o job.
  3. Especificar um tópico do Pub/Sub como destino do job.
  4. Execute o job.
  5. Verificar se o job foi concluído com sucesso.

Antes de começar

  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. To initialize the gcloud CLI, run the following command:

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

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

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

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

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

  8. O Cloud Shell já tem o Terraform integrado. Se você precisar instalar o Terraform, consulte a documentação do HashiCorp Terraform.

Criar um arquivo de configuração do Terraform

Para usar o Terraform com o Cloud Scheduler, você precisa criar um arquivo de configuração para descrever sua infraestrutura e criar um plano de execução. Em seguida, aplique o arquivo de configuração à plataforma ou ao serviço para realizar operações que provisionam a infraestrutura.

Siga estas etapas para criar um arquivo de configuração do Terraform chamado main.tf:

  1. Abra um terminal e crie um diretório:

    mkdir terraform
  2. Acesse o diretório terraform:

    cd terraform
  3. Adicione um novo arquivo, main.tf, ao diretório:

    nano main.tf
  4. Adicione os seguintes recursos do provedor do Terraform para Google Cloud ao arquivo main.tf:

    1. Ative as APIs 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. Crie um tópico do Pub/Sub como um recurso para o qual os editores podem enviar mensagens:

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

      Isso criará um tópico chamado pubsub_topic.

    3. Crie uma assinatura para receber mensagens publicadas no tópico do Pub/Sub:

      # Create Pub/Sub subscription
      resource "google_pubsub_subscription" "default" {
        name  = "pubsub_subscription"
        topic = google_pubsub_topic.default.name
      }
    4. Crie um cron job usando o 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!")
        }
      }

      Os seguintes argumentos são usados no exemplo:

      • name: o nome do job.
      • description: uma descrição do trabalho.
      • schedule: a frequência do job, usando um formato baseado em unix-cron.

        Neste exemplo, 30 16 * * 7 significa que o job será executado às 16h30 aos domingos. Para mais informações, consulte Formato e fuso horário do cron job.

      • region: a região em que o job está localizado.

      • pubsub_target: o destino do tópico do Pub/Sub, incluindo o nome completo do recurso do tópico (topic_name) em que o payload da mensagem (data) é publicado quando o job é executado.

      Outros argumentos são aceitos. Para mais detalhes, consulte a referência de argumentos do registro do Terraform.

Criar o cron job

Implante os recursos do Terraform para criar o cron job.

  1. Abra um terminal e, no diretório terraform, inicialize o Terraform:

    terraform init
  2. Verifique se as alterações propostas pelo Terraform correspondem ao plano esperado:

    terraform plan

    Ignore a observação sobre o uso da opção -out.

  3. Crie o cron job:

    terraform apply
  4. No prompt Digite um valor, digite yes para continuar criando recursos.

  5. Confirme se um job foi criado:

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

    A saída será semelhante a esta:

    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

Você criou um job que envia uma mensagem para um tópico do Pub/Sub às 16h30 aos domingos. Agora você pode executar o job.

Executar o job

Além de executar de acordo com a programação especificada, você pode forçar a execução do job imediatamente executando o comando a seguir.

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

Devido a algumas configurações iniciais, a execução do primeiro job criado em um projeto pode levar alguns minutos.

Verifique os resultados:

Verifique se o tópico do Pub/Sub está recebendo mensagens do seu trabalho.

  1. Receber mensagens de Pub/Sub de uma assinatura:

    gcloud pubsub subscriptions pull pubsub_subscription --limit 5
    

    Se nenhuma mensagem for extraída inicialmente, execute o comando novamente.

  2. Veja os resultados da execução do job. A saída será semelhante a:

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

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud com esses recursos.

  1. A exclusão do projeto do Google Cloud interrompe o faturamento de todos os recursos usados nele. Por padrão, todos os arquivos no diretório principal do Cloud Shell (por exemplo, todos os arquivos do Terraform) são mantidos entre as sessões.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID
  2. Como alternativa, você pode excluir todos os recursos criados com o Terraform.

    O comando terraform destroy encerra todos os recursos especificados no estado do Terraform. Ele não destrói recursos que não são gerenciados pelo projeto atual do Terraform. O arquivo de configuração do Terraform não é destruído. Para mais informações, consulte Destruir a infraestrutura.

    terraform destroy

A seguir