이 튜토리얼에서는 여러 하위 워크플로를 동시에 실행하는 상위 워크플로를 만들고 실행하는 방법을 보여줍니다.
다음 다이어그램에서는 하위 워크플로가 동시에 4번 실행되도록 호출됩니다. 이렇게 하면 상위 워크플로가 병렬 분기로 데이터를 처리할 수 있고 전체 실행 시간이 줄어듭니다. 상위 워크플로는 성공 및 실패한 실행에 대한 요약을 반환하기 전에 모든 하위 워크플로 실행이 완료될 때까지 기다려서 오류 감지를 간소화합니다.
하위 워크플로 만들기 및 배포
하위 워크플로는 상위 워크플로에서 데이터를 수신하고 처리할 수 있습니다. 하위 워크플로는 다음을 수행하여 이를 보여줍니다.
- 정수를 인수로 수신합니다.
- 10초 동안 절전 모드로 전환해서 일부 처리를 시뮬레이션합니다.
정수가 홀수 또는 짝수인지 여부에 따라 표시기를 반환해서 워크플로 실행의 성공 또는 실패를 시뮬레이션합니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로에 대해
workflow-child
이름을 입력합니다.리전 목록에서 us-central1을 선택합니다.
이전에 만든 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 다음 워크플로 정의를 입력합니다.
배포를 클릭합니다.
gcloud
워크플로의 소스 코드 파일을 만듭니다.
touch workflow-child.yaml
텍스트 편집기에서 소스 코드 파일을 열고 다음 워크플로를 파일에 복사합니다.
워크플로 배포:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
SERVICE_ACCOUNT_NAME
을 이전에 만든 서비스 계정의 이름으로 바꿉니다.
상위 워크플로 만들기 및 배포
상위 워크플로는 병렬 for
루프를 사용해서 하위 워크플로의 여러 분기를 실행합니다.
워크플로 정의에 대한 소스 코드를 복사합니다. 다음 부분으로 구성됩니다.
맵은 하위 워크플로 실행 결과를 저장하는 데 사용됩니다. 자세한 내용은 맵을 참조하세요.
하위 워크플로는 커넥터를 사용하여 호출됩니다. 하위 워크플로의 각 반복에
iteration
인수가 전달됩니다. 상위 워크플로가 각 하위 워크플로 실행 결과를 기다리고 저장합니다. 자세한 내용은 Workflows Executions API 커넥터 및 런타임 인수를 참조하세요.실행 결과가 반환됩니다. 자세한 내용은 워크플로 실행 완료를 참조하세요.
워크플로 배포:
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로에 대해
workflow-parent
이름을 입력합니다.리전 목록에서 us-central1을 선택합니다.
이전에 만든 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 상위 워크플로의 정의를 붙여넣습니다.
배포를 클릭합니다.
gcloud
워크플로의 소스 코드 파일을 만듭니다.
touch workflow-parent.yaml
텍스트 편집기에서 소스 코드 파일을 열고 상위 워크플로에 대한 정의를 붙여넣습니다.
워크플로 배포:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
SERVICE_ACCOUNT_NAME
을 이전에 만든 서비스 계정의 이름으로 바꿉니다.
상위 워크플로 실행
하위 워크플로 호출이 동시에 실행되도록 상위 워크플로를 실행합니다. 실행을 완료하는 데 약 10초 정도 걸립니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
Workflows 페이지에서 workflow-parent 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
Workflows 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
출력 창에서 워크플로 결과를 확인합니다.
결과는 다음과 비슷합니다. 반복 2와 4는 오류를 나타내고 반복 1과 3은 성공을 나타냅니다.
"failure": { "2": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":2}", "duration": "10.157992541s", "endTime": "2023-07-11T13:13:13.028424329Z", "error": { "context": "RuntimeError: \"Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 2\"", ... "4": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":4}", "duration": "10.157929734s", "endTime": "2023-07-11T13:13:13.061289142Z", "error": { "context": "RuntimeError: \"Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 4\"", ... "success": { "1": "Hello world1", "3": "Hello world3"
gcloud
워크플로를 실행합니다.
gcloud workflows run workflow-parent \ --location=us-central1
결과는 다음과 비슷합니다. 반복 2와 4는 오류를 나타내고 반복 1과 3은 성공을 나타냅니다.
Waiting for execution [06c753e4-6947-4c62-ac0b-2a9d53fb1b8f] to complete...done. argument: 'null' duration: 14.065415004s endTime: '2023-07-11T12:50:43.929023883Z' name: projects/386837416586/locations/us-central1/workflows/workflow-parent/executions/06c753e4-6947-4c62-ac0b-2a9d53fb1b8f result: '{"failure":{"2":{"message":"Execution failed or cancelled.","operation":{"argument":"{\"iteration\":2}","duration":"10.143718070s","endTime":"2023-07-11T12:50:40.673209821Z","error":{"context":"RuntimeError: ... "Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "success":{"1":"Hello world1","3":"Hello world3"}}' startTime: '2023-07-11T12:50:29.863608879Z' state: SUCCEEDED
지금까지 하위 워크플로를 실행하고, 병렬 분기로 하위 워크플로를 4번 반복 실행하고, 각 하위 워크플로 실행에 대해 성공 또는 실패 표시기를 반환하는 워크플로를 만들고 배포했습니다.