Cloud Tasks를 사용하여 워크플로를 큐에 추가하고 비동기식으로 실행할 수 있습니다.
Cloud Tasks는 다음과 같은 설정을 제공합니다.
- 특정 전송 시간 예약
- 전달 속도 관리
- 재시도 동작 구성
- 큐의 개별 태스크 액세스 및 관리
- 태스크 중복 삭제 사용
이러한 제어 장치는 예를 들어 워크플로를 트리거하고 Workflows 한도를 예기치 않게 초과할 수 있는 요청을 관리하는 데 유용할 수 있습니다. 비율 제한과 재시도로 Cloud Tasks 큐를 구성하여 이러한 모든 요청으로 워크플로를 실행하게 할 수 있습니다.
자세한 내용은 Cloud Tasks 이해를 참조하세요.
다음에 유의하세요.
비율 제한은 Execution API 쓰기 요청에 대한 Workflows의 한도를 기준으로 해야 합니다. 필요한 경우 Google Cloud console에서 대부분의 할당량 상향 조정을 요청할 수 있습니다. 할당량 상향 요청에 대해 자세히 알아보세요.
Cloud Tasks는 전송을 '최소 1회' 하도록 설계되었습니다. 그러나 Workflows는 Cloud Tasks의 중복 요청을 단 한 번만 처리할 것임을 보장하지 않습니다.
Workflows에서 실행 백로그를 사용 설정하여 실행 지연을 제거하고 처리량을 극대화할 수 있습니다. 백로그된 실행은 실행 동시 실행 할당량을 사용할 수 있게 되는 즉시 자동으로 실행됩니다. 자세한 내용은 실행 백로그 관리를 참조하세요.
시작하기 전에
- 아직 큐에 추가할 워크플로가 없다면 하나 만드세요.
-
Enable the Cloud Tasks API.
큐에 태스크를 추가하여 워크플로 실행
Cloud Tasks가 Workflows API에 요청을 보낼 수 있도록 서비스 계정을 만듭니다.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
을 6~30자(영문 기준) 사이의 이름으로 바꿉니다. 소문자 영숫자 문자와 대시를 포함할 수 있습니다. 서비스 계정을 만든 후에는 이름을 변경할 수 없습니다.Cloud Tasks 명령어를 실행할 주 구성원이 Identity and Access Management(IAM) 서비스 계정 역할을 할 수 있도록 허용하려면 주 구성원이 서비스를 가장할 수 있도록 역할을 부여합니다.
계정이 워크플로를 트리거할 수 있도록 새 서비스 계정에 workflows.invoker 역할을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/workflows.invoker
다음을 바꿉니다.
PROJECT_NAME
: Google Cloud 프로젝트 이름입니다.SERVICE_ACCOUNT_NAME
: 이전에 만든 서비스 계정의 이름입니다.
아직 Cloud Tasks 큐가 없다면 하나 만드세요.
이전에 인증을 위해 만든 서비스 계정을 사용하여 워크플로의 HTTP 엔드포인트를 대상으로 하는 태스크를 만듭니다.
gcloud tasks create-http-task \ --queue="QUEUE_ID" \ --url="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \ --body-content="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \ --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"
다음을 바꿉니다.
QUEUE_ID
: Cloud Tasks 큐에 할당한 식별자입니다(예:my-queue
).PROJECT_NAME
: Google Cloud 프로젝트 이름입니다.REGION_NAME
: 워크플로가 있는 리전입니다(예:us-central1
).WORKFLOW_NAME
: 태스크를 만들려는 워크플로의 이름입니다.DOUBLE_ESCAPED_JSON_STRING
: 전달한 인수의 JSON 인코딩입니다. 따옴표로 묶인 문자열 내의 큰따옴표는 백슬래시(\)로 이스케이프 처리됩니다. 예를 들면 입니다.--body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
SERVICE_ACCOUNT_NAME
: 이전에 만든 서비스 계정의 이름입니다.
태스크가 생성되어 Cloud Tasks 큐에 추가됩니다. 태스크는 워크플로 실행이 시작되고 HTTP
2xx
상태 코드를 반환할 때까지 큐에 유지되며 Cloud Tasks는 태스크가 완료된 것으로 간주합니다.