이 튜토리얼에서는 워크플로 실행 속도를 조절할 수 있는 Cloud Tasks 큐를 만드는 방법을 보여줍니다.
활성 워크플로 실행이 동시에 발생할 수 있는 최대 개수가 존재합니다. 이 할당량이 소진되고 실행 백로그가 사용 중지되었거나 백로그된 실행의 할당량에 도달하면 새 실행은 HTTP 429 Too many requests
상태 코드와 함께 실패합니다. 사용자가 정의한 속도로 하위 워크플로를 실행하도록 Cloud Tasks 큐를 사용 설정하면 Workflows 할당량 관련 문제를 방지하고 실행 속도를 더 높일 수 있습니다.
Cloud Tasks는 전송을 '최소 1회' 하도록 설계되었습니다. 그러나 Workflows는 Cloud Tasks의 중복 요청을 단 한 번만 처리할 것임을 보장하지 않습니다.
다음 다이어그램에서 상위 워크플로는 전달 비율이 적용된 Cloud Tasks 큐로 규제되는 하위 워크플로를 호출합니다.
목표
이 튜토리얼에서는 다음 단계를 진행합니다.
- 상하위 워크플로 사이에서 중개자 역할을 하는 Cloud Tasks 큐 만들기
- 상위 워크플로에서 데이터를 수신하는 하위 워크플로를 만들고 배포하기
- Cloud Tasks 큐를 통해 하위 워크플로를 실행하는 상위 워크플로를 만들고 배포하기
- 디스패치 비율 제한 없이 상위 워크플로를 실행하여 하위 워크플로 실행 호출하기
- Cloud Tasks 큐에 디스패치 한도를 적용하고 상위 워크플로를 실행하기
- 하위 워크플로가 Cloud Tasks 큐를 통해 정의된 속도로 실행되는지 확인하기
Google Cloud 콘솔에서 또는 터미널이나 Cloud Shell에서 Google Cloud CLI를 사용하여 다음 명령어를 실행할 수 있습니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
조직에서 정의한 보안 제약조건으로 인해 다음 단계를 완료하지 못할 수 있습니다. 문제 해결 정보는 제한된 Google Cloud 환경에서 애플리케이션 개발을 참조하세요.
콘솔
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
- Google Cloud 콘솔에서 IAM 페이지로 이동하여 Compute Engine 기본 서비스 계정의 권한을 설정합니다.
테스트 목적으로 이 튜토리얼의 워크플로와 연결할 것이므로 Compute Engine 기본 서비스 계정을 기록해 두세요. 이 서비스 계정은 Compute Engine을 사용하는 Google Cloud 서비스를 사용 설정하거나 사용하면 다음 이메일 형식으로 자동 생성됩니다.
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
를 Google Cloud 프로젝트 번호로 바꿉니다. 프로젝트 번호는 Google Cloud 콘솔의 시작 페이지에서 찾을 수 있습니다.프로덕션 환경의 경우 새 서비스 계정을 만들고 해당 계정에 필요한 최소한의 권한을 포함하고 최소 권한 원칙을 따르는 하나 이상 하나 이상의 IAM 역할을 부여하는 것을 강력하게 추천합니다.
- Compute Engine 기본 서비스 계정을 선택하고 해당 행에서 주 구성원 수정을 클릭합니다.
- 대화 상자가 나타나면
- 역할 선택 목록에서 Workflows > Workflows 호출자를 선택하여 계정에 워크플로 실행을 트리거할 권한을 부여합니다.
- 역할 선택 목록에서 Cloud Tasks > Cloud Tasks 큐 추가자를 선택하여 계정에 작업을 만들 권한을 부여합니다.
다른 역할 추가를 클릭하고 다음 역할을 추가합니다.
- 저장을 클릭합니다.
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com 테스트 목적으로 이 튜토리얼의 워크플로와 연결할 것이므로 Compute Engine 기본 서비스 계정을 기록해 두세요. 이 서비스 계정은 Compute Engine을 사용하는 Google Cloud 서비스를 사용 설정하거나 사용하면 다음 이메일 형식으로 자동 생성됩니다.
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
를 Google Cloud 프로젝트 번호로 바꿉니다. 다음 명령어를 실행하여 프로젝트 번호를 찾을 수 있습니다.gcloud projects describe PROJECT_ID --format='value(projectNumber)'
프로덕션 환경의 경우 새 서비스 계정을 만들고 해당 계정에 필요한 최소한의 권한을 포함하고 최소 권한 원칙을 따르는 하나 이상 하나 이상의 IAM 역할을 부여하는 것을 강력하게 추천합니다.
- Compute Engine 기본 서비스 계정에 프로젝트에 대한 Workflows 호출자 역할(
roles/workflows.invoker
)을 부여하여 계정에 워크플로 실행을 트리거할 권한을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트 IDPROJECT_NUMBER
: Google Cloud 프로젝트 번호
- Compute Engine 기본 서비스 계정에 프로젝트에 대한 Cloud Tasks 큐 추가자 역할(
roles/cloudtasks.enqueuer
)을 부여하여 계정에 작업을 만들 권한을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Cloud Tasks 큐 만들기
상위 워크플로에서 사용할 수 있으며 워크플로 실행 속도를 제어할 수 있는 Cloud Tasks 큐를 만듭니다.
콘솔
Google Cloud 콘솔에서 Cloud Tasks 페이지로 이동합니다.
push 큐 만들기를 클릭합니다.
큐 이름으로
queue-workflow-child
를 입력합니다.리전 목록에서 us-central1(아이오와)을 선택합니다.
만들기를 클릭합니다.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
하위 워크플로 만들기 및 배포
하위 워크플로는 상위 워크플로에서 데이터를 수신하고 처리할 수 있습니다. 다음을 수행하는 하위 워크플로를 만들고 배포합니다.
- 인수로
iteration
을 수신합니다. - 10초 동안 절전 모드로 전환해서 일부 처리를 시뮬레이션합니다.
실행 성공 시 문자열 반환
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로에 대해
workflow-child
이름을 입력합니다.리전 목록에서 us-central1(아이오와)을 선택합니다.
서비스 계정 목록에서 Compute Engine 기본 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 다음 워크플로 정의를 입력합니다.
배포를 클릭합니다.
gcloud
워크플로의 소스 코드 파일을 만듭니다.
touch workflow-child.yaml
텍스트 편집기에서 소스 코드 파일을 열고 다음 워크플로를 파일에 복사합니다.
워크플로를 배포합니다.
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
상위 워크플로 만들기 및 배포
상위 워크플로는 for
루프를 사용해서 하위 워크플로의 여러 분기를 실행합니다.
상위 워크플로를 정의하는 소스 코드를 복사합니다.
이 워크플로는 다음 단계로 구성됩니다.
하위 워크플로와 Cloud Tasks 큐 이름을 참조하는 상수를 할당하는 데 사용되는 맵입니다. 자세한 내용은 맵을 참조하세요.
하위 워크플로를 반복 호출하기 위해 실행되는
for
루프입니다. 자세한 내용은 반복을 참조하세요.하위 워크플로를 실행하기 위해 많은 수의 태스크를 만들어 Cloud Tasks 큐에 추가하는 워크플로 단계입니다. 자세한 내용은 Cloud Tasks API 커넥터를 참조하세요.
워크플로를 배포합니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로에 대해
workflow-parent
이름을 입력합니다.리전 목록에서 us-central1(아이오와)을 선택합니다.
서비스 계정 목록에서 Compute Engine 기본 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 상위 워크플로의 정의를 붙여넣습니다.
배포를 클릭합니다.
gcloud
워크플로의 소스 코드 파일을 만듭니다.
touch workflow-parent.yaml
텍스트 편집기에서 소스 코드 파일을 열고 상위 워크플로에 대한 정의를 붙여넣습니다.
워크플로를 배포합니다.
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
비율 제한 없이 상위 워크플로 실행
상위 워크플로를 실행하여 Cloud Tasks 큐를 통해 하위 워크플로를 호출합니다. 실행을 완료하는 데 약 10초 정도 걸립니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
Workflows 페이지에서 workflow-parent 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
Workflows 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
상위 워크플로가 실행 중일 때 Workflows 페이지로 돌아가 workflow-child 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
실행 탭을 클릭합니다.
다음과 비슷하게 하위 워크플로가 거의 동시에 실행됩니다.
gcloud
워크플로를 실행합니다.
gcloud workflows run workflow-parent \ --location=us-central1
워크플로 실행이 트리거되었는지 확인하려면 마지막의 4개 실행을 나열합니다.
gcloud workflows executions list workflow-child --limit=4
실행 횟수인 100이 Workflows 동시 실행 한도보다 낮으므로 결과는 다음과 유사합니다. 수천 개의 실행을 동시에 제출하면 할당량 문제가 발생할 수 있습니다.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
이제 하위 워크플로 100회 반복을 호출하는 워크플로를 만들고 배포했습니다.
비율 제한을 사용하여 상위 워크플로 실행
Cloud Tasks 큐에 초당 디스패치 1회의 비율 제한을 적용한 다음 상위 워크플로를 실행합니다.
콘솔
Google Cloud 콘솔에서 Cloud Tasks 페이지로 이동합니다.
생성된 Cloud Tasks 큐인 queue-workflow-child를 클릭하고 큐 수정을 클릭합니다.
작업 디스패치의 비율 제한 섹션에서 최대 디스패치 필드에 1을 입력합니다.
저장을 클릭합니다.
Workflows 페이지로 이동합니다.
workflow-parent 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
Workflows 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
상위 워크플로가 실행 중일 때 Workflows 페이지로 돌아가 workflow-child 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
실행 탭을 클릭합니다.
다음과 비슷하게 하위 워크플로가 초당 요청 1회로 실행됩니다.
gcloud
Cloud Tasks 큐를 업데이트하여 초당 디스패치 1회의 비율 제한을 적용합니다.
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
워크플로를 실행합니다.
gcloud workflows run workflow-parent \ --location=us-central1
워크플로 실행이 트리거되었는지 확인하려면 마지막의 4개 실행을 나열합니다.
gcloud workflows executions list workflow-child --limit=4
결과는 다음과 비슷하게 초당 워크플로 하나가 실행됩니다.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
초당 1회 실행의 디스패치 비율로 하위 워크플로 100회 반복을 호출하는 워크플로를 성공적으로 배포했습니다.
삭제
이 튜토리얼용으로 새 프로젝트를 만든 경우 이 프로젝트를 삭제합니다. 기존 프로젝트를 사용한 경우 이 튜토리얼에 추가된 변경사항은 제외하고 보존하려면 튜토리얼용으로 만든 리소스를 삭제합니다.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하려면 다음 안내를 따르세요.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
튜토리얼 리소스 삭제
이 튜토리얼에서 만든 워크플로와 Cloud Tasks 리소스를 삭제합니다.
콘솔
워크플로를 삭제하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
워크플로 목록에서 워크플로를 클릭하여 워크플로 세부정보 페이지로 이동합니다.
삭제를 클릭합니다.
워크플로 이름을 입력한 다음 확인을 클릭합니다.
Cloud Tasks 큐를 삭제하려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Cloud Tasks 페이지로 이동합니다.
삭제할 큐의 이름을 선택하고 큐 삭제를 클릭합니다.
삭제 작업을 확인합니다.
gcloud
워크플로를 삭제하려면 다음 명령어를 실행합니다.
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Cloud Tasks 큐를 삭제하려면 다음 명령어를 실행하세요.
gcloud tasks queues delete queue-workflow-child
다음 단계
- Cloud Tasks를 사용하여 워크플로를 큐에 추가하고 비동기식으로 실행하는 방법에 대한 자세한 내용은 Cloud Tasks를 사용한 워크플로 실행 큐를 참조하세요.
- Workflows 문법에 대한 자세한 내용은 Workflows 문법 참조를 확인하세요.