Criar e programar 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, na sigla em inglês) que permite criar, alterar e melhorar de maneira previsível sua infraestrutura em nuvem usando código. Aprenda a usar o Terraform para provisionar infraestrutura no Google Cloud.

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

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

  1. Usar o Terraform para criar um cron job para o Cloud Scheduler.
  2. Defina 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. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se agora.

  2. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

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

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, você aplica o arquivo de configuração à plataforma ou ao serviço para executar operações que provisionam sua infraestrutura.

Conclua as etapas a seguir 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 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 que pode receber mensagens dos editores:

      # 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 argumentos a seguir são usados na amostra:

      • name: o nome do job.
      • description: uma descrição do job.
      • 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 do cron job e fuso horário.

      • region: a região em que o job reside.

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

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 com o 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 Inserir um valor, digite yes para continuar com a criação de 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, é possível forçar a execução imediata do job 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 job.

  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, arquivos do Terraform) permanecem entre as sessões.

    Exclua um projeto do Google Cloud:

    gcloud projects delete PROJECT_ID
  2. Se preferir, exclua todos os recursos criados com o Terraform.

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

    terraform destroy

A seguir