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

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

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

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

  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.

    בדף פרטי ההפעלה אפשר לראות את תוצאות ההפעלה, כולל הפלט 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 עם ארגומנט שהערך שלו הוא צמד אחד או יותר של ערכי פרמטרים עם תווי escape. לדוגמה, כדי להעביר את 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\")}"
              }
            ]
          }
        }
      ]
    }
  }

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