Vous pouvez transmettre des arguments d'environnement d'exécution dans une requête d'exécution de workflow et y accéder à l'aide de variables de workflow.
Configurer un workflow qui reçoit les arguments d'exécution
Pour configurer un workflow afin qu'il reçoive les arguments d'exécution que vous lui transmettez dans le cadre d'une requête d'exécution, procédez comme suit:
Suivez les étapes permettant de créer un workflow, ou choisissez un workflow existant pour le mettre à jour, mais ne le déployez pas encore.
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 blocmain
: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}" } } ] } }
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 votre workflow configuré pour recevoir des arguments d'exécution, vous pouvez transmettre une chaîne au format JSON, telle que {"firstName":"Workflows","lastName":"User"}
, au workflow dans une requête d'exécution.
Console
Pour exécuter un workflow, dans la console Google Cloud, accédez à la page Workflows:
Sur la page Workflows (Workflows), sélectionnez un workflow pour accéder à sa page d'informations.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
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) :Cliquez sur Exécuter.
Sur la page Détails de l'exécution, vous pouvez consulter les résultats de l'exécution, y compris la sortie
Hello, Workflows User!
, l'ID et l'état de l'exécution, ainsi que l'étape actuelle ou finale de l'exécution du workflow. Pour en savoir plus, consultez la section Accéder aux résultats de l'exécution du 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 workflowFIRST
: chaîne que vous souhaitez transmettre à votre workflow pourfirstName
LAST
: chaîne que vous souhaitez transmettre à votre workflow pourlastName
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'environnement d'exécution dans une requête d'exécution.
Par exemple, en utilisant 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
Ajoutez l'indicateur
data
à la commande que vous utilisez pour exécuter votre workflow. La valeur dedata
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émentsfirstName
etlastName
à 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 CloudWORKFLOW_NAME
: nom du workflowFIRST
: chaîne que vous souhaitez transmettre à votre workflow pourfirstName
LAST
: chaîne que vous souhaitez transmettre à votre workflow pourlastName
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" } ```
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
JSON
Vous pouvez utiliser default
avec la fonction de bibliothèque standard, map.get, pour accéder aux arguments d'exécution facultatifs et renvoyer une valeur par défaut si la clé n'est pas trouvée. Dans l'exemple suivant, si un region
n'est pas 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\")}" } ] } } ] } }