Agende e execute uma tarefa cron com o Terraform

Este início rápido mostra como usar o Terraform para criar uma tarefa cron do Cloud Scheduler. O Terraform é uma ferramenta de infraestrutura como código (IaC) que lhe permite criar, alterar e melhorar de forma previsível a sua infraestrutura na nuvem através de código. Pode saber mais sobre a utilização do Terraform para aprovisionar infraestrutura no Google Cloud.

O Cloud Scheduler tem um nível sem custo financeiro e a execução deste início rápido não deve resultar em custos. Para mais informações, consulte a secção Preços.

Neste início rápido:

  1. Use o Terraform para criar uma tarefa cron para o Cloud Scheduler.
  2. Defina um horário recorrente para a tarefa.
  3. Especifique um tópico do Pub/Sub como o destino da tarefa.
  4. Execute a tarefa.
  5. Verifique se a tarefa foi executada com êxito.

Antes de começar

As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.

  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. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, 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 role (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. Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

  7. Enable the Resource Manager and Service Usage APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. Install the Google Cloud CLI.

  9. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. 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 role (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.

  12. Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

  13. Enable the Resource Manager and Service Usage APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. O Cloud Shell já tem o Terraform integrado. Se precisar de instalar o Terraform, consulte a documentação do HashiCorp Terraform.
  15. Funções necessárias

    Para receber as autorizações de que precisa para concluir este início rápido, peça ao seu administrador para lhe conceder as seguintes funções de IAM no seu projeto:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

    Crie um ficheiro de configuração do Terraform

    Para usar o Terraform com o Cloud Scheduler, tem de criar um ficheiro de configuração para descrever a sua infraestrutura e criar um plano de execução. Em seguida, aplica o ficheiro de configuração à sua plataforma ou serviço para realizar operações que aprovisionam a sua infraestrutura.

    Conclua os passos seguintes para criar um ficheiro de configuração do Terraform denominado main.tf:

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

      mkdir terraform
    2. Aceda ao diretório terraform:

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

      nano main.tf
    4. Adicione o seguinte fornecedor do Terraform para Google Cloud recursos ao ficheiro 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 Pub/Sub como um recurso para o qual as mensagens podem ser enviadas pelos publicadores:

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

        Esta ação cria um tópico denominado pubsub_topic.

      3. Crie uma subscrição 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 uma tarefa cron com 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 da tarefa.
        • description: uma descrição do trabalho.
        • schedule: a frequência da tarefa, usando um formato baseado no unix-cron.

          Neste exemplo, 30 16 * * 7 significa que a tarefa vai ser executada às 16:30 aos domingos. Para mais informações, consulte o artigo Formato de tarefa cron e fuso horário.

        • region: a região onde o trabalho reside.

        • pubsub_target: o destino do tópico do Pub/Sub, incluindo o nome completo do recurso do tópico (topic_name) para o qual o payload da mensagem (data) é publicado quando a tarefa é executada.

        São suportados outros argumentos. Para ver detalhes, consulte a referência de argumentos do registo do Terraform.

    Para outro exemplo de utilização do Terraform com o Cloud Scheduler, consulte o artigo Executar serviços do Cloud Run de acordo com uma programação.

    Crie o trabalho cron

    Implemente os seus recursos do Terraform para criar a tarefa cron.

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

      terraform init
    2. Verifique se as alterações que propõe com o Terraform correspondem ao plano esperado:

      terraform plan

      Pode ignorar a nota sobre não usar a opção -out.

    3. Crie a tarefa cron:

      terraform apply
    4. No comando Introduza um valor, escreva yes para continuar com a criação de recursos.

    5. Confirme que é criado um trabalho:

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

      O resultado deve ser semelhante ao seguinte:

      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

    Criou uma tarefa que envia uma mensagem para um tópico Pub/Sub aos domingos às 16:30. Agora, pode executar a tarefa.

    Execute a tarefa

    Além de ser executado de acordo com o respetivo agendamento especificado, pode forçar a execução imediata da tarefa executando o seguinte comando.

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

    Tenha em atenção que, devido a alguma configuração inicial, a primeira tarefa criada num projeto pode demorar alguns minutos a ser executada.

    Valide os resultados

    Verifique se o tópico do Pub/Sub está a receber mensagens da tarefa.

    1. Extraia mensagens do Pub/Sub de uma subscrição:

      gcloud pubsub subscriptions pull pubsub_subscription --limit 5
      

      Se não forem extraídas mensagens inicialmente, execute o comando novamente.

    2. Veja os resultados da execução da tarefa. O resultado deve ser semelhante ao seguinte:

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

    Limpar

    Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados nesta página, elimine o Google Cloud projeto com os recursos.

    1. A eliminação do seu projeto Google Cloud interrompe a faturação de todos os recursos usados nesse projeto. Tenha em atenção que, por predefinição, todos os ficheiros no diretório principal do Cloud Shell (por exemplo, todos os ficheiros Terraform) persistem entre sessões.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID
    2. Em alternativa, pode eliminar todos os recursos que criou com o Terraform.

      O comando terraform destroy rescinde todos os recursos especificados no seu estado do Terraform. Não destrói os recursos que não são geridos pelo projeto do Terraform atual. O ficheiro de configuração do Terraform não é destruído. Para mais informações, consulte o artigo Destrua a infraestrutura.

      terraform destroy

    O que se segue?