Cloud Tasks를 사용한 워크플로 실행 큐

Cloud Tasks를 사용하여 워크플로를 큐에 추가하고 비동기식으로 실행할 수 있습니다.

Cloud Tasks는 다음과 같은 설정을 제공합니다.

  • 특정 전송 시간 예약
  • 전달 속도 관리
  • 재시도 동작 구성
  • 큐의 개별 태스크 액세스 및 관리
  • 태스크 중복 삭제 사용

이러한 제어 장치는 예를 들어 워크플로를 트리거하고 Workflows 한도를 예기치 않게 초과할 수 있는 요청을 관리하는 데 유용할 수 있습니다. 비율 제한과 재시도로 Cloud Tasks 큐를 구성하여 이러한 모든 요청으로 워크플로를 실행하게 할 수 있습니다.

다음에 유의하세요.

  • 비율 제한은 Execution API 쓰기 요청에 대한 Workflows의 한도를 기준으로 해야 합니다. 필요한 경우 Google Cloud console에서 대부분의 할당량 상향 조정을 요청할 수 있습니다. 할당량 상향 요청에 대해 자세히 알아보세요.

  • Cloud Tasks는 전송을 '최소 1회' 하도록 설계되었습니다. 그러나 Workflows는 Cloud Tasks의 중복 요청을 단 한 번만 처리할 것임을 보장하지 않습니다.

자세한 내용은 Cloud Tasks 이해를 참조하세요.

시작하기 전에

  1. 아직 큐에 추가할 워크플로가 없다면 하나 만드세요.
  2. Cloud Tasks API 사용 설정

    API 사용 설정

큐에 태스크를 추가하여 워크플로 실행

  1. Cloud Tasks가 Workflows API에 요청을 보낼 수 있도록 서비스 계정을 만듭니다.

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    SERVICE_ACCOUNT_NAME을 6~30자(영문 기준) 사이의 이름으로 바꿉니다. 소문자 영숫자 문자와 대시를 포함할 수 있습니다. 서비스 계정을 만든 후에는 이름을 변경할 수 없습니다.

  2. Cloud Tasks 명령어를 실행할 주 구성원이 Identity and Access Management(IAM) 서비스 계정 역할을 할 수 있도록 허용하려면 주 구성원이 서비스를 가장할 수 있도록 역할을 부여합니다.

  3. 계정이 워크플로를 트리거할 수 있도록 새 서비스 계정에 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: 이전에 만든 서비스 계정의 이름입니다.
  4. 아직 Cloud Tasks 큐가 없다면 하나 만드세요.

  5. 이전에 인증을 위해 만든 서비스 계정을 사용하여 워크플로의 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는 태스크가 완료된 것으로 간주합니다.

다음 단계