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, alterar e melhorar de maneira previsível sua infraestrutura em nuvem usando código. Saiba mais sobre como usar o Terraform para provisionar infraestrutura no 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. 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. 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. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  4. Para inicializar a gcloud CLI, execute o seguinte 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. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  8. Para inicializar a gcloud CLI, execute o seguinte 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. O Cloud Shell já tem o Terraform integrado. Se você precisar instalar o Terraform, consulte a documentação do Terraform da HashiCorp.
  11. Criar um arquivo de configuração do Terraform

    Para usar o Terraform com o Cloud Scheduler, crie um arquivo de configuração para descrever sua infraestrutura e um plano de execução. Em seguida, aplique o arquivo de configuração à sua plataforma ou serviço para realizar operações que provisionam sua 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 o seguinte provedor do Terraform para recursos do 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 as mensagens podem ser enviadas por 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 seguintes argumentos são usados no exemplo:

        • 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 de cron job e fuso horário.

        • 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 seus 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, é possível forçar a execução imediata do job executando o seguinte comando.

    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 conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud e os recursos.

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

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID
    2. Como alternativa, é possível 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 infraestrutura.

      terraform destroy

    A seguir