Transmettre des arguments d'environnement d'exécution dans une requête d'exécution

Vous pouvez transmettre des arguments d'exécution dans une requête d'exécution de workflow et accéder à ces arguments à l'aide de variables de workflow.

Configurer un workflow qui reçoit les arguments d'exécution

Pour configurer un workflow afin de recevoir les arguments d'exécution que vous lui transmettez dans le cadre d'une requête d'exécution, procédez comme suit:

  1. Suivez les étapes de création d'un workflow ou sélectionnez un workflow existant à mettre à jour, mais ne le déployez pas encore.

  2. Ajoutez un champ params à la définition du workflow principal. Assurez-vous que le nom de l'argument est placé entre crochets et que le workflow principal est placé dans un bloc main :

    YAML

    main:
      params: [ARG_NAME]
      steps:
        ...
    

    JSON

    {
      "main": {
        "params": ["ARG_NAME"],
        "steps": [
          ...
        ]
        ...
      }
    }
      

    Le bloc main accepte un seul argument correspondant au nom de n'importe quel type de données JSON valide. Par exemple, un tableau, un objet ou une chaîne.

    La pratique recommandée consiste à transmettre un objet avec plusieurs arguments nommés afin de comprendre plus facilement leur objectif, puis d'ajouter des arguments. Par la suite, vous pouvez aussi utiliser la notation par points pour accéder aux arguments.

    D'autres sous-workflows peuvent comporter plusieurs arguments.

    Par exemple, le workflow suivant renvoie un message d'accueil "Hello" à une personne dont vous transmettez le prénom et le nom en tant qu'arguments d'exécution:

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}
    

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      
  3. Déployez votre workflow pour terminer sa création ou sa mise à jour.

Transmettre des données dans une requête d'exécution

Une fois que votre workflow est configuré pour recevoir des arguments d'exécution, vous pouvez lui transmettre une chaîne au format JSON, telle que {"firstName":"Workflows","lastName":"User"}, dans une requête d'exécution.

Console

  1. Pour exécuter un workflow, accédez à la page Workflows dans la console Google Cloud:

    Accéder à "Workflows"

  2. Sur la page Workflows, sélectionnez un workflow pour accéder à sa page d'informations.

  3. Sur la page Détails du workflow, cliquez sur Exécuter.

  4. Sur la page "Execute workflow" (Exécuter le workflow) qui s'affiche, saisissez une chaîne JSON contenant les noms de vos paramètres et vos valeurs d'argument, tels que {"firstName":"Workflows","lastName":"User"}, dans la zone "Input" (Entrée) :

    Zone d'entrée contenant l'exemple de chaîne JSON

  5. Cliquez sur Exécuter.

    Sur la page Détails de l'exécution, vous pouvez afficher les résultats de l'exécution, y compris la sortie Hello, Workflows User!, l'ID et l'état d'exécution, ainsi que l'étape actuelle ou finale de l'exécution du workflow. Pour en savoir plus, consultez Accéder aux résultats d'exécution de workflow.

gcloud

Ajoutez l'indicateur --data à la commande gcloud workflows execute que vous utilisez pour exécuter votre workflow. Cette option prend une chaîne JSON de vos données. Par exemple, pour transmettre les firstName et lastName à l'exemple de workflow précédent:

gcloud workflows run WORKFLOW_NAME \
--data='{"firstName":"FIRST","lastName":"LAST"}'

Remplacez les éléments suivants :

  • WORKFLOW_NAME: nom du workflow
  • FIRST: chaîne que vous souhaitez transmettre à votre workflow pour firstName
  • LAST: chaîne que vous souhaitez transmettre à votre workflow pour lastName

La sortie devrait ressembler à ce qui suit :

Waiting for execution [9379b067-306a-4db1-a58d-c9fc99aebfd4] to complete...done.
argument: '{"firstName":"Workflows","lastName":"User"}'
endTime: '2022-07-19T13:52:47.659199466Z'
name: projects/1051295516635/locations/us-central1/workflows/workflow-6/executions/9379b067-306a-4db1-a58d-c9fc99aebfd4
result: '"Hello, Workflows User!"'
startTime: '2022-07-19T13:52:47.623862835Z'
state: SUCCEEDED
status:
  currentSteps:
  - routine: main
    step: step2
workflowRevisionId: 000002-138

Bibliothèques clientes

Selon le langage de la bibliothèque cliente, vous pouvez transmettre un argument d'exécution dans une requête d'exécution.

Par exemple, si vous utilisez JavaScript:

// Execute workflow
try {
  const createExecutionRes = await client.createExecution({
    parent: client.workflowPath(projectId, location, workflow),
    execution: {
      argument: JSON.stringify({"firstName":"Workflows","lastName":"User"})
    }
});
const executionName = createExecutionRes[0].name;

Ou, en utilisant Java:

// Creates the execution object.
CreateExecutionRequest request =
    CreateExecutionRequest.newBuilder()
        .setParent(parent.toString())
        .setExecution(Execution.newBuilder().setArgument("{\"firstName\":\"Workflows\",\"lastName\":\"User\"}").build())
        .build();

Pour en savoir plus sur l'exécution d'un workflow à l'aide des bibliothèques clientes des API Google, consultez la page Exécuter un workflow.

API REST

  1. Ajoutez l'indicateur data à la commande que vous utilisez pour exécuter votre workflow. La valeur de data est une chaîne au format JSON avec un argument dont la valeur est une ou plusieurs paires paramètre-valeur échappées. Par exemple, pour transmettre les éléments firstName et lastName à l'exemple de workflow précédent:

    curl --request POST \
       --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
       --header 'Content-Type: application/json' \
       --data '{"argument":"{\"firstName\":\"FIRST\",\"lastName\":\"LAST\"}"}' \
       "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions"
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud
    • WORKFLOW_NAME: nom du workflow
    • FIRST: chaîne que vous souhaitez transmettre à votre workflow pour firstName
    • LAST: chaîne que vous souhaitez transmettre à votre workflow pour lastName

    La sortie devrait ressembler à ce qui suit :

    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID",
      "startTime": "2020-11-09T23:51:31.765761331Z",
      "state": "ACTIVE",
      "argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}",
      "workflowRevisionId": "000001-08c"
    }
     ```
    
  2. Pour obtenir les résultats d'exécution, exécutez la commande suivante:

    curl --request GET \
       --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
       --header 'Content-Type: application/json' \
       "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID"
    

    Remplacez EXECUTION_ID par l'ID du résultat renvoyé par votre première commande.

    Ce résultat contient des lignes semblables aux suivantes:

    "argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}",
    "result": "\"Hello, Workflows User!\"",
    

Pour en savoir plus sur l'exécution d'un workflow à l'aide de l'API REST, consultez la page Exécuter un workflow.

Accéder aux arguments d'exécution

Cet exemple accède aux arguments d'exécution transmis au workflow lors de la requête d'exécution. Tous les arguments sont stockés dans le même mappage, déclarés en tant que paramètre du workflow principal.

Lorsque vous exécutez ce workflow, transmettez les arguments d'exécution au format suivant:

{"firstName":"Sherlock", "lastName":"Holmes"}

YAML

main:
  params: [args]
  steps:
    - step1:
        assign:
          - outputVar: ${"Hello " + args.firstName + " " + args.lastName}
    - step2:
        return: ${outputVar}

JSON

{
  "main": {
    "params": [
      "args"
    ],
    "steps": [
      {
        "step1": {
          "assign": [
            {
              "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
            }
          ]
        }
      },
      {
        "step2": {
          "return": "${outputVar}"
        }
      }
    ]
  }
}

Vous pouvez utiliser default avec la fonction map.get de la bibliothèque standard pour accéder aux arguments d'exécution facultatifs et renvoyer une valeur par défaut si la clé est introuvable. Dans l'exemple suivant, si aucun élément region n'est spécifié, northamerica-northeast1 est utilisé:

YAML

  main:
      params: [input]
      steps:
      - init:
          assign:
            - region: ${default(map.get(input, "region"), "northamerica-northeast1")}
  

JSON

  {
    "main": {
      "params": [
        "input"
      ],
      "steps": [
        {
          "init": {
            "assign": [
              {
                "region": "${default(map.get(input, \"region\"), \"northamerica-northeast1\")}"
              }
            ]
          }
        }
      ]
    }
  }

Étapes suivantes