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

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

Cloud Scheduler dispose d'un niveau sans frais, et l'exécution de ce guide de démarrage rapide ne devrait entraîner aucun coût. 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

Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour en savoir plus sur la résolution des problèmes, consultez Développer des applications dans un environnement Google Cloud limité.

  1. Connectez-vous à votre compte Google.

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

  2. Installez la Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  5. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle "Créateur de projet" (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  6. Si vous utilisez un projet existant pour ce guide, vérifiez que vous disposez des autorisations nécessaires pour suivre les instructions. Si vous avez créé un projet, vous disposez déjà des autorisations requises.

  7. Activez les API Resource Manager et Service Usage, si ce n'est pas déjà fait :

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. Installez la Google Cloud CLI.

  9. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  10. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  11. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle "Créateur de projet" (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  12. Si vous utilisez un projet existant pour ce guide, vérifiez que vous disposez des autorisations nécessaires pour suivre les instructions. Si vous avez créé un projet, vous disposez déjà des autorisations requises.

  13. Activez les API Resource Manager et Service Usage, si ce n'est pas déjà fait :

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    gcloud services enable cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  14. Terraform est déjà intégré à Cloud Shell. Si vous devez installer Terraform, consultez la documentation HashiCorp Terraform.

Rôles requis

Pour obtenir les autorisations nécessaires pour suivre ce guide de démarrage rapide, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

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 service pour effectuer des opérations 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 ressources fournisseur Terraform pour Google Cloud suivantes au 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 dans 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 un job 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-east1"
      
        pubsub_target {
          topic_name = google_pubsub_topic.default.id
          data       = base64encode("Hello world!")
        }
      }

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

      • name : nom du job.
      • description : description du job.
      • schedule : fréquence du job, en utilisant un format basé sur unix-cron.

        Dans cet exemple, 30 16 * * 7 signifie que le job s'exécutera à 16h30 le dimanche. Pour en savoir plus, consultez Format et fuseau horaire des jobs Cron.

      • region : région dans laquelle se trouve le job.

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

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

Pour obtenir un autre exemple d'utilisation de Terraform avec Cloud Scheduler, consultez Exécuter des services Cloud Run de façon planifiée.

Créer le job 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 le job Cron :

    terraform apply
  4. À l'invite Saisissez une valeur, saisissez yes pour poursuivre la création de ressources.

  5. Vérifiez qu'un job a été créé :

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

    La sortie devrait ressembler à ce qui suit :

    description: test job
    lastAttemptTime: '2024-04-04T13:56:00.669530Z'
    name: projects/PROJECT_ID/locations/us-east1/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éé un job qui envoie un message à un sujet Pub/Sub le dimanche à 16h30. Vous pouvez maintenant exécuter le job.

Exécuter votre tâche

En plus de l'exécution selon la planification spécifiée, vous pouvez forcer l'exécution immédiate de votre job en exécutant la commande suivante.

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

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 bien les messages de votre job.

  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 dans cette démonstration soient facturées sur votre compte Google Cloud , supprimez le projet Google Cloud qui les contient.

  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.

    Supprimer un projet Google Cloud  :

    gcloud projects delete PROJECT_ID
  2. Vous pouvez également supprimer toutes les ressources que vous avez créées avec 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 actuel. Votre fichier de configuration Terraform n'est pas détruit. Pour en savoir plus, consultez Détruire l'infrastructure.

    terraform destroy

Étapes suivantes