실행 요청에서 런타임 인수 전달

워크플로 실행 요청에서 런타임 인수를 전달하고 워크플로 변수를 사용하여 이러한 인수에 액세스할 수 있습니다.

런타임 인수를 수신하는 워크플로 설정

실행 요청 중에 전달하는 런타임 인수를 수신하도록 워크플로를 설정하려면 다음 안내를 따르세요.

  1. 새 워크플로 create 단계를 따르거나 업데이트할 기존 워크플로를 선택합니다. 하지만 아직 배포하지는 않습니다.

  2. 워크플로 정의에 params 필드를 추가합니다. 인수 이름이 대괄호 안에 있고 기본 워크플로가 main 블록에 배치되어 있는지 확인합니다.

    YAML

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

    JSON

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

    main 블록은 배열, 객체, 문자열 같이 유효한 JSON 데이터 유형의 이름인 단일 인수를 허용합니다.

    권장사항에 따라 이름이 지정된 여러 개의 인수로 객체를 전달하면 간편하게 목적을 이해하고 인수를 추가할 수 있습니다. 그런 다음 점 표기법을 사용하여 인수에 액세스할 수 있습니다.

    다른 하위 워크플로에는 여러 인수가 있을 수 있습니다.

    예를 들어 다음 워크플로는 런타임 인수로 전달하는 이름 및 성에 해당하는 사람에 대해 'Hello' 인사를 반환합니다.

    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. 워크플로를 배포하여 생성 또는 업데이트를 완료합니다.

실행 요청에서 데이터 전달

런타임 인수를 수신하도록 워크플로를 설정한 후 실행 요청에서 {"firstName":"Workflows","lastName":"User"}와 같은 JSON 형식의 문자열을 워크플로에 전달할 수 있습니다.

콘솔

  1. 워크플로를 실행하려면 Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

  2. Workflows 페이지에서 워크플로를 선택하여 세부정보 페이지로 이동합니다.

  3. 워크플로 세부정보 페이지에서 실행을 클릭합니다.

  4. '워크플로 실행' 페이지가 표시되면 매개변수 이름과 인수 값(예: {"firstName":"Workflows","lastName":"User"})이 포함된 JSON 문자열을 '입력' 영역에 입력합니다.

    예시 JSON 문자열로 채워진 입력 영역

  5. 실행을 클릭합니다.

    실행 세부정보 페이지에서 Hello, Workflows User! 출력, 실행 ID 및 상태, 워크플로 실행의 현재 또는 최종 단계를 포함하는 실행 결과를 볼 수 있습니다. 자세한 내용은 워크플로 실행 결과 액세스를 참조하세요.

gcloud

워크플로 실행에 사용되는 gcloud workflow run 명령어에 --data 플래그를 추가합니다. 이 플래그는 데이터의 JSON 문자열을 사용합니다. 예를 들어 이전 예시 워크플로에 firstNamelastName를 전달하려면 다음 안내를 따르세요.

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

클라이언트 라이브러리

클라이언트 라이브러리 언어에 따라 실행 요청에서 런타임 인수를 전달할 수 있습니다.

예를 들어 자바스크립트를 사용하는 경우는 다음과 같습니다.

// 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;

또는 자바를 사용하는 경우는 다음과 같습니다.

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

Google API 클라이언트 라이브러리를 사용한 워크플로 실행에 대한 자세한 내용은 워크플로 실행을 참조하세요.

REST API

  1. 워크플로 실행에 사용되는 명령어에 data 플래그를 추가합니다. data 값은 하나 이상의 해당 값이 이스케이프 처리된 매개변수-값 쌍인 인수를 포함하는 JSON 형식 문자열입니다. 예를 들어 이전 예시 워크플로에 firstNamelastName를 전달하려면 다음 안내를 따르세요.

    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를 첫 번째 명령어로 반환된 출력의 ID로 바꿉니다.

    이 출력에는 다음과 비슷한 줄이 포함됩니다.

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

REST API를 사용한 워크플로 실행에 대한 자세한 내용은 워크플로 실행을 참조하세요.

런타임 인수 액세스

이 샘플은 실행 요청 중에 워크플로에 전달된 런타임 인수에 액세스합니다. 모든 인수는 동일한 지도에 저장되며 기본 워크플로의 매개변수로 선언됩니다.

이 워크플로를 실행할 때 다음 형식을 사용하여 런타임 인수를 전달합니다.

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

표준 라이브러리 함수인 map.get과 함께 default를 사용하여 선택적 런타임 인수에 액세스하고 키를 찾을 수 없는 경우 기본값을 반환할 수 있습니다. 다음 예시에서는 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\")}"
              }
            ]
          }
        }
      ]
    }
  }

다음 단계