Planifier et exécuter un job Cron à l'aide de Terraform

Ce guide de démarrage rapide vous explique comment utiliser Terraform pour créer un programmeur Cloud Scheduler. job Cron. Terraform est un outil IaC (Infrastructure as Code) créer, modifier et améliorer de manière prévisible votre infrastructure cloud à l'aide de code. Pour en savoir plus sur à l'aide de Terraform pour provisionner l'infrastructure sur Google Cloud.

Une version sans frais de Cloud Scheduler est disponible. Par conséquent, l'exécution de ce démarrage rapide ne vous coûtera rien. Pour en savoir plus, reportez-vous à la section Tarification.

Dans le cadre de ce guide démarrage rapide, vous allez effectuer les étapes suivantes :

  1. Utilisez Terraform pour créer un job Cron pour Cloud Scheduler.
  2. définir un calendrier récurrent pour la tâche ;
  3. spécifier un sujet Pub/Sub comme cible de la tâche ;
  4. Exécuter la tâche.
  5. vérifier que la tâche a bien été exécutée.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  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. Terraform est déjà intégré à Cloud Shell. Si vous avez besoin de installer Terraform, consultez les Documentation Terraform pour HashiCorp

Créer un fichier de configuration Terraform

Pour utiliser Terraform avec Cloud Scheduler, vous devez créer un fichier de configuration pour décrire votre infrastructure et créer un plan d'exécution. Vous appliquez ensuite le fichier de configuration à votre plate-forme ou à votre service pour effectuer qui provisionnent votre infrastructure.

Pour créer un fichier de configuration Terraform appelé main.tf, procédez comme suit :

  1. Ouvrez un terminal et créez un répertoire:

    mkdir terraform
  2. Accédez au répertoire terraform :

    cd terraform
  3. Ajoutez un nouveau fichier, main.tf, au répertoire:

    nano main.tf
  4. Ajoutez les éléments suivants : Fournisseur Terraform pour Google Cloud les ressources dans le fichier main.tf:

    1. Activez les API Cloud Scheduler et 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. Créez un sujet Pub/Sub en tant que ressource à laquelle les éditeurs peuvent envoyer des messages :

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

      Cette opération crée un sujet appelé pubsub_topic.

    3. Créez un abonnement pour recevoir les messages publiés sur le Sujet Pub/Sub:

      # Create Pub/Sub subscription
      resource "google_pubsub_subscription" "default" {
        name  = "pubsub_subscription"
        topic = google_pubsub_topic.default.name
      }
    4. Créez une tâche Cron à l'aide de la ressource 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!")
        }
      }

      Les arguments suivants sont utilisés dans l'exemple:

      • name: nom de la tâche.
      • description: description du poste.
      • schedule: fréquence de la tâche, dans un format basé sur unix-cron.

        Dans cet exemple, 30 16 * * 7 signifie que la tâche s'exécutera à 16h30 les dimanches. Pour en savoir plus, consultez la section Format et fuseau horaire des tâches Cron.

      • region: région où se trouve le job.

      • pubsub_target : cible du sujet Pub/Sub, y compris le nom de ressource complet du sujet (topic_name) auquel la charge utile du message (data) est publiée lorsque la tâche est exécutée.

      Les autres arguments sont acceptés. Pour en savoir plus, consultez la documentation de référence sur les arguments du registre Terraform.

Créer la tâche Cron

Déployez vos ressources Terraform pour créer le job Cron.

  1. Ouvrez un terminal et, dans le répertoire terraform, initialisez Terraform :

    terraform init
  2. Vérifiez que les modifications que vous proposez avec Terraform correspondent au plan attendu :

    terraform plan

    Vous pouvez ignorer la note indiquant que l'option -out n'est pas utilisée.

  3. Créez la job Cron:

    terraform apply
  4. Lorsque l'invite Saisissez une valeur s'affiche, saisissez yes pour créer la ressources.

  5. Vérifiez qu'une tâche est créée :

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

    La sortie devrait ressembler à ce qui suit :

    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

Vous avez créé une tâche qui envoie un message à un sujet Pub/Sub à 16h30 les dimanches. Vous pouvez maintenant exécuter le job.

Exécuter votre tâche

En plus de l'exécuter selon le calendrier spécifié, vous pouvez forcer l'exécution immédiate de votre tâche en exécutant la commande suivante.

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

Notez qu'en raison d'une configuration initiale, l'exécution de la première tâche créée dans un projet peut prendre quelques minutes.

Vérifier les résultats

Vérifiez que votre sujet Pub/Sub reçoit les messages de votre tâche.

  1. Extrayez des messages Pub/Sub d'un abonnement :

    gcloud pubsub subscriptions pull pubsub_subscription --limit 5
    

    Si aucun message n'a été initialement récupéré, exécutez de nouveau la commande.

  2. Consultez les résultats de l'exécution de votre tâche. Le résultat doit ressembler à ce qui suit :

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

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud, supprimez le projet Google Cloud contenant les ressources.

  1. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet. Notez que par défaut, tous les fichiers de votre répertoire d'accueil Cloud Shell (par exemple, les fichiers Terraform) sont conservés entre les sessions.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID
  2. Vous pouvez également supprimer toutes les ressources que vous avez créées Terraform.

    La commande terraform destroy met fin à toutes les ressources spécifiées dans votre état Terraform. Il ne détruit pas les ressources qui ne sont pas gérées par le projet Terraform en cours. Votre fichier de configuration Terraform n'est pas détruit. Pour en savoir plus, consultez Détruire l'infrastructure

    terraform destroy

Étape suivante