Créer un workflow à l'aide de Terraform

Dans ce guide de démarrage rapide, vous allez découvrir comment créer, déployer et exécuter votre premier workflow à l'aide de Terraform. Terraform est un outil 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. Découvrez comment utiliser Terraform pour provisionner une infrastructure sur Google Cloud.

Dans ce guide de démarrage rapide, l'exemple de workflow envoie une requête à une API publique, puis renvoie la réponse de l'API.

Vous allez effectuer les tâches suivantes :

  1. Activez l'API Workflows à l'aide de Terraform.
  2. Créez un compte de service pour le workflow à l'aide de Terraform.
  3. Définir et déployer un workflow à l'aide de Terraform
  4. Exécutez le workflow à l'aide de Google Cloud CLI.

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 de ce problème, consultez Développer des applications dans un environnement Google Cloud limité.

Notez que Terraform est déjà intégré à Cloud Shell. Si vous devez installer Terraform, consultez la documentation HashiCorp Terraform.

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  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. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  8. Activez les API Cloud Resource Manager, Identity and Access Management (IAM) et Service Usage :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

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

  10. 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.

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

    gcloud init
  12. 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 .

  13. 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.

  14. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  15. Activez les API Cloud Resource Manager, Identity and Access Management (IAM) et Service Usage :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    gcloud services enable cloudresourcemanager.googleapis.com iam.googleapis.com serviceusage.googleapis.com

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 la page 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

Créez un fichier de configuration Terraform nommé main.tf et incluez les ressources du fournisseur Google pour Terraform utilisées dans ce démarrage rapide.

Notez que vous pouvez utiliser l'interpolation pour les substitutions, telles que les variables de référence, les attributs de ressources et les fonctions d'appel.

  1. 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 suivantes au fichier main.tf :

    1. Attribuez l'ID du projet:

      provider "google" {
      project = "PROJECT_ID"
      }

      Remplacez PROJECT_ID par l'ID de votre projet.

    2. Activer l'API Workflows

      # Enable Workflows API
      resource "google_project_service" "default" {
        service            = "workflows.googleapis.com"
        disable_on_destroy = false
      }

    3. Créer un compte de service pour le workflow

      # Create a dedicated service account
      resource "google_service_account" "default" {
        account_id   = "sample-workflows-sa"
        display_name = "Sample Workflows Service Account"
      }

    4. Définissez le workflow à l'aide de la ressource google_workflows_workflow :

      # Create a workflow
      resource "google_workflows_workflow" "default" {
        name            = "sample-workflow"
        region          = "us-central1"
        description     = "A sample workflow"
        service_account = google_service_account.default.id
      
        deletion_protection = false # set to "true" in production
      
        labels = {
          env = "test"
        }
        user_env_vars = {
          url = "https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam"
        }
        source_contents = <<-EOF
        # This is a sample workflow that you can replace with your source code
        #
        # The workflow does the following:
        # - Retrieves the current date from a public API and stores the
        #   response in `currentDate`
        # - Retrieves a list of Wikipedia articles from a public API related
        #   to the day of the week stored in `currentDate`
        # - Returns the list of articles in the workflow output
        #
        # Note that when you define workflows in Terraform, variables must be
        # escaped with two dollar signs ($$) and not a single sign ($)
      
        - getCurrentDate:
            call: http.get
            args:
                url: $${sys.get_env("url")}
            result: currentDate
        - readWikipedia:
            call: http.get
            args:
                url: https://en.wikipedia.org/w/api.php
                query:
                    action: opensearch
                    search: $${currentDate.body.dayOfWeek}
            result: wikiResult
        - returnOutput:
            return: $${wikiResult.body[1]}
      EOF
      
        depends_on = [google_project_service.default]
      }
      

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

  • name: Nom de votre workflow.
  • region : emplacement de votre workflow.
  • description : description de votre workflow.
  • service_account : adresse e-mail ou ID unique du compte de service associé à la dernière version du workflow. Ce compte de service représente l'identité du workflow et détermine les autorisations dont il dispose. Si vous ne spécifiez pas de compte de service lors de la création du workflow, celui-ci utilise le compte de service Compute Engine par défaut pour son identité. Pour en savoir plus, consultez Autoriser un workflow à accéder aux ressources Google Cloud .
  • labels : liste de paires clé-valeur de libellés à attribuer à ce workflow pour vous aider à organiser vos instances Google Cloud . Pour en savoir plus, consultez Que sont les libellés ?
  • user_env_vars : variables d'environnement définies par l'utilisateur associées à cette révision du workflow. Pour en savoir plus, consultez Utiliser des variables d'environnement.
  • source_contents : code Workflows à exécuter. Pour connaître la limite de taille des fichiers, consultez Limites de ressources.

Voici d'autres arguments facultatifs :

  • crypto_key_name : ID de ressource d'une clé Cloud Key Management Service au format suivant :

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

    Pour en savoir plus, consultez Utiliser des clés de chiffrement gérées par le client.

  • call_log_level : niveau de journalisation à appliquer aux appels et aux réponses aux appels lors des exécutions de ce workflow. Les valeurs possibles sont les suivantes :

    • CALL_LOG_LEVEL_UNSPECIFIED
    • LOG_ALL_CALLS
    • LOG_ERRORS_ONLY
    • LOG_NONE

    Pour en savoir plus, consultez Journalisation des appels.

  • project : ID du projet auquel appartient la ressource. Si elle n'est pas fournie, le projet du fournisseur est utilisé.

  • name_prefix : crée un nom unique commençant par le préfixe spécifié. Si ce paramètre et name ne sont pas spécifiés, une valeur aléatoire est choisie pour le nom.

Créer et exécuter le workflow

Déployez vos ressources Terraform pour créer le workflow, puis exécutez-le.

  1. Initialisez Terraform dans le répertoire:

    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 workflow:

    terraform apply
  4. Lorsque l'invite Saisir une valeur s'affiche, saisissez yes pour procéder à la création des ressources.

  5. Vérifiez que le workflow a bien été créé:

    gcloud workflows list --location us-central1

    La sortie devrait ressembler à ce qui suit :

    NAME                                                                    STATE   REVISION_ID  UPDATE_TIME
    projects/project-name/locations/us-central1/workflows/sample-workflow   ACTIVE  000001-f9a   2024-02-24T13:38:58.353765906Z
  6. Vous pouvez également exécuter le workflow:

    gcloud workflows execute sample-workflow

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. Supprimez toutes les ressources que vous avez créées avec Terraform :
    terraform destroy
  2. Supprimez le workflow que vous avez créé :
    gcloud workflows delete sample-workflow
    Lorsque vous êtes invité à poursuivre l'opération, saisissez y.
  3. Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

      Supprimer un projet Google Cloud  :

      gcloud projects delete PROJECT_ID

Étapes suivantes