תהליכי עבודה מאפשרים לספק קלט דינמי להרצה באמצעות ארגומנטים של זמן ריצה, שתהליך העבודה ניגש אליהם דרך משתנים. כך תוכלו להתאים את לוגיקת הביצוע ולעבד מטען ייעודי שונה של אירועים בלי לשנות את הגדרת תהליך העבודה.
הגדרת תהליך עבודה שמקבל ארגומנטים של זמן ריצה
כדי להגדיר תהליך עבודה לקבלת ארגומנטים של זמן ריצה שמועברים אליו כחלק מבקשת ביצוע, מבצעים את הפעולות הבאות:
פועלים לפי השלבים ליצירת תהליך עבודה חדש, או בוחרים תהליך עבודה קיים כדי לעדכן אותו, אבל לא פורסים אותו עדיין.
מוסיפים שדה
paramsלהגדרה של תהליך העבודה הראשי. מוודאים ששם הארגומנט מופיע בתוך סוגריים מרובעים, ושתהליך העבודה הראשי מופיע בבלוקmain:YAML
main: params: [ARG_NAME] steps: ...
JSON
{ "main": { "params": ["ARG_NAME"], "steps": [ ... ] ... } }
הבלוק
mainמקבל ארגומנט יחיד שהוא השם של כל סוג נתונים תקין של JSON. לדוגמה, מערך, אובייקט או מחרוזת.מומלץ להעביר אובייקט עם כמה ארגומנטים בעלי שם, כדי להבין בקלות את המטרה שלהם ולהוסיף ארגומנטים. אפשר גם להשתמש בסימון הנקודות כדי לגשת לארגומנטים.
לזרימות עבודה משנה אחרות יכולים להיות כמה ארגומנטים.
לדוגמה, תהליך העבודה הבא מחזיר את הברכה 'שלום' לאדם שהשם הפרטי והשם המשפחה שלו מועברים כארגומנטים של זמן ריצה:
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}" } } ] } }
כדי לסיים ליצור או לעדכן את תהליך העבודה, צריך לפרוס אותו.
העברת נתונים בבקשת הפעלה
אחרי שמגדירים את תהליך העבודה לקבלת ארגומנטים של זמן ריצה, אפשר להעביר מחרוזת בפורמט JSON, כמו {"firstName":"Workflows","lastName":"User"}, לתהליך העבודה בבקשת ביצוע.
המסוף
כדי להפעיל תהליך עבודה, במסוף Google Cloud , נכנסים לדף Workflows:
בדף Workflows, בוחרים תהליך עבודה כדי לעבור לדף הפרטים שלו.
בדף פרטי תהליך העבודה, לוחצים על play_arrow הפעלה.
בדף 'הפעלת תהליך העבודה' שמוצג, מזינים מחרוזת JSON שכוללת את שמות הפרמטרים ואת ערכי הארגומנטים, כמו
{"firstName":"Workflows","lastName":"User"}, באזור 'קלט':
לוחצים על Execute.
בדף Execution details (פרטי ההרצה), אפשר לראות את תוצאות ההרצה, כולל הפלט
Hello, Workflows User!, מזהה ההרצה והמצב, והשלב הנוכחי או הסופי של הרצת תהליך העבודה. איך ניגשים לתוצאות של הרצת תהליך עבודה
gcloud
מוסיפים את הדגל --data לפקודה gcloud workflows execute שבה משתמשים כדי להפעיל את תהליך העבודה. הדגל הזה מקבל מחרוזת JSON של הנתונים. לדוגמה, כדי להעביר את firstName ואת lastName לתהליך העבודה בדוגמה הקודמת:
gcloud workflows run WORKFLOW_NAME \ --data='{"firstName":"FIRST","lastName":"LAST"}'
מחליפים את מה שכתוב בשדות הבאים:
-
WORKFLOW_NAME: השם של תהליך העבודה -
FIRST: המחרוזת שרוצים להעביר לתהליך העבודה עבורfirstName -
LAST: המחרוזת שרוצים להעביר לתהליך העבודה עבורlastName
הפלט אמור להיראות כך:
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
ספריות לקוח
בהתאם לשפה של ספריית הלקוח, אפשר להעביר ארגומנט של זמן ריצה בבקשת ביצוע.
לדוגמה, באמצעות 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;
או באמצעות Java:
// Creates the execution object.
CreateExecutionRequest request =
CreateExecutionRequest.newBuilder()
.setParent(parent.toString())
.setExecution(Execution.newBuilder().setArgument("{\"firstName\":\"Workflows\",\"lastName\":\"User\"}").build())
.build();
מידע נוסף על הפעלת תהליך עבודה באמצעות ספריות הלקוח של Google API זמין במאמר הפעלת תהליך עבודה.
API בארכיטקטורת REST
מוסיפים את הדגל
dataלפקודה שבה משתמשים כדי להפעיל את תהליך העבודה. הערך שלdataהוא מחרוזת בפורמט JSON עם ארגומנט שהערך שלו הוא צמד אחד או יותר של ערכי פרמטרים עם תווי בריחה. לדוגמה, כדי להעביר אתfirstNameו-lastNameלתהליך העבודה הקודם: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"
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud -
WORKFLOW_NAME: השם של תהליך העבודה -
FIRST: המחרוזת שרוצים להעביר לתהליך העבודה שלfirstName -
LAST: המחרוזת שרוצים להעביר לתהליך העבודה שלlastName
הפלט אמור להיראות כך:
{ "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" } ```-
כדי לקבל את תוצאות ההרצה, מריצים את הפקודה הבאה:
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"מחליפים את
EXECUTION_IDבמזהה מהפלט שהתקבל מהפקודה הראשונה.הפלט הזה מכיל שורות שדומות לשורות הבאות:
"argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}", "result": "\"Hello, Workflows User!\"",
מידע נוסף על הפעלת תהליך עבודה באמצעות API בארכיטקטורת REST זמין במאמר הפעלת תהליך עבודה.
גישה לארגומנטים של זמן ריצה
בדוגמה הזו יש גישה לארגומנטים של זמן הריצה שמועברים לתהליך העבודה כחלק מבקשת ההפעלה. כל הארגומנטים מאוחסנים באותה מפה, שמוצהרת כפרמטר של זרימת העבודה הראשית.
כשמריצים את תהליך העבודה הזה, מעבירים ארגומנטים של זמן ריצה בפורמט הבא:
{"firstName":"Sherlock", "lastName":"Holmes"}
YAML
JSON
אפשר להשתמש בפונקציה default עם פונקציית הספרייה הרגילה, map.get, כדי לגשת לארגומנטים אופציונליים של זמן ריצה ולהחזיר ערך ברירת מחדל אם המפתח לא נמצא. בדוגמה הבאה, אם לא מציינים region, נעשה שימוש ב-northamerica-northeast1:
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\")}" } ] } } ] } }