העברת ארגומנטים של זמן ריצה בבקשת הפעלה

תהליכי עבודה מאפשרים לספק קלט דינמי להרצה באמצעות ארגומנטים של זמן ריצה, שתהליך העבודה ניגש אליהם דרך משתנים. כך תוכלו להתאים את לוגיקת הביצוע ולעבד מטען ייעודי שונה של אירועים בלי לשנות את הגדרת תהליך העבודה.

הגדרת תהליך עבודה שמקבל ארגומנטים של זמן ריצה

כדי להגדיר תהליך עבודה לקבלת ארגומנטים של זמן ריצה שמועברים אליו כחלק מבקשת ביצוע, מבצעים את הפעולות הבאות:

  1. פועלים לפי השלבים ליצירת תהליך עבודה חדש, או בוחרים תהליך עבודה קיים כדי לעדכן אותו, אבל לא פורסים אותו עדיין.

  2. מוסיפים שדה 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}"
            }
          }
        ]
      }
    }
      
  3. כדי לסיים ליצור או לעדכן את תהליך העבודה, צריך לפרוס אותו.

העברת נתונים בבקשת הפעלה

אחרי שמגדירים את תהליך העבודה לקבלת ארגומנטים של זמן ריצה, אפשר להעביר מחרוזת בפורמט JSON, כמו {"firstName":"Workflows","lastName":"User"}, לתהליך העבודה בבקשת ביצוע.

המסוף

  1. כדי להפעיל תהליך עבודה, במסוף Google Cloud , נכנסים לדף Workflows:

    כניסה לדף Workflows

  2. בדף Workflows, בוחרים תהליך עבודה כדי לעבור לדף הפרטים שלו.

  3. בדף פרטי תהליך העבודה, לוחצים על הפעלה.

  4. בדף 'הפעלת תהליך העבודה' שמוצג, מזינים מחרוזת JSON שכוללת את שמות הפרמטרים ואת ערכי הארגומנטים, כמו {"firstName":"Workflows","lastName":"User"}, באזור 'קלט':

    אזור הקלט מאוכלס במחרוזת JSON לדוגמה

  5. לוחצים על 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

  1. מוסיפים את הדגל 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"
    }
     ```
    
  2. כדי לקבל את תוצאות ההרצה, מריצים את הפקודה הבאה:

    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

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}"
        }
      }
    ]
  }
}

אפשר להשתמש בפונקציה 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\")}"
              }
            ]
          }
        }
      ]
    }
  }

המאמרים הבאים