Cloud Scheduler를 사용하여 워크플로 예약

이 페이지에서는 Cloud Scheduler를 사용하여 매주 월요일 오전 9시마다 또는 15분마다와 같은 특정 일정으로 워크플로를 실행하는 방법을 설명합니다. Google Cloud Console에서 또는 Google Cloud CLI를 사용하여 일정을 구성할 수 있습니다.

시작하기 전에

  1. 예약하려는 워크플로가 아직 없는 경우 워크플로를 만들고 배포합니다.
  2. Cloud Scheduler API 사용 설정

    API 사용 설정

  3. 또는 터미널에서 다음 명령어를 입력합니다.
    gcloud services enable cloudscheduler.googleapis.com

워크플로 예약

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

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

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

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

  3. 계정이 워크플로를 트리거할 수 있도록 새 서비스 계정에 workflows.invoker 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role roles/workflows.invoker

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • SERVICE_ACCOUNT_NAME: 이전에 만든 서비스 계정의 이름입니다.
  4. 인증을 위해 이전에 만든 서비스 계정을 사용하여 워크플로를 트리거하는 Cloud Scheduler 작업을 만듭니다.

    Console

    1. 워크플로를 예약하려면 Cloud Console의 워크플로 페이지로 이동합니다.

      Workflows로 이동

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

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

    4. 워크플로 수정 페이지에서 새 트리거 추가 > Cloud Scheduler를 선택합니다.

      스케줄러 작업 만들기 창이 열립니다.

    5. 일정을 정의합니다.

      1. 이름 필드에 Cloud Scheduler 작업의 이름을 입력합니다. 동일한 리전의 작업 간에 고유해야 합니다.

      2. 리전 목록에서 적절한 리전을 선택합니다(예: us-central1).

      3. 빈도 필드에서 unix-cron 형식으로 정의하는 시간 간격을 지정합니다. 예를 들어 워크플로가 5분마다 실행되도록 예약하려면 */5 * * * *를 입력합니다.

      4. 시간대 사용자가 제공한 일정을 해석하기 위해 Cloud Scheduler에서 사용되는 시간대를 선택합니다. 국가를 기준으로 검색할 수 있습니다.

    6. 계속을 클릭합니다.

    7. 실행을 구성합니다.

      1. 워크플로의 인수 필드에서 실행하기 전에 워크플로에 전달할 런타임 인수를 지정합니다. 인수는 JSON 형식이어야 합니다. 예를 들면 {"firstName":"Sherlock", "lastName":"Holmes"}입니다. 워크플로에 런타임 인수가 사용되지 않으면 기본값 {}를 사용하거나 필드를 비워 둡니다.

      2. 워크플로의 호출 로그 수준 목록에서 워크플로 실행 중에 적용할 호출 로깅 수준을 선택합니다. 기본값인 로그 없음을 수락하거나 다음 중 하나를 선택할 수 있습니다.

        • 모든 호출: 하위 워크플로 또는 라이브러리 함수에 대한 모든 호출과 결과를 로깅합니다.
        • 오류만: 예외로 인해 호출이 중지된 경우에만 로깅합니다.
      3. 서비스 계정 목록에서 이전에 만든 서비스 계정을 선택합니다.

    8. 만들기를 클릭합니다.

      기존 워크플로를 업데이트하는 경우 워크플로를 다시 배포할 필요가 없습니다.

      이제 Cloud Scheduler 작업이 워크플로 세부정보 페이지의 트리거 탭에 나열됩니다.

    9. 작업을 업데이트하거나 삭제하려면 워크플로를 수정해야 합니다.

      1. 워크플로 세부정보 페이지에서 수정을 클릭합니다.
      2. 트리거 섹션에서 업데이트하거나 삭제할 작업을 찾습니다.
      3. 리소스 수정 또는 리소스 삭제를 클릭합니다.

    gcloud

    1. 터미널을 열고 다음 명령어를 입력합니다.

      gcloud scheduler jobs create http JOB_NAME \
      --schedule="FREQUENCY" \
      --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \
      --message-body="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \
      --time-zone="TIME_ZONE" \
      --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"

      다음을 바꿉니다.

      • JOB_NAME: Cloud Scheduler 작업에 제공하는 이름입니다.
      • FREQUENCY: unix-cron 형식을 사용하여 정의한 시간 간격입니다. 예를 들어 워크플로가 5분마다 실행되도록 예약하려면 */5 * * * *를 입력합니다.
      • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
      • REGION_NAME: 워크플로가 있는 리전입니다(예: us-central1).
      • WORKFLOW_NAME: 실행 일정을 예약할 워크플로의 이름입니다.
      • DOUBLE_ESCAPED_JSON_STRING: 전달한 인수의 JSON 인코딩입니다. 따옴표로 묶인 문자열 내의 큰따옴표는 백슬래시(\)로 이스케이프 처리됩니다. 예를 들면 --message-body="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"입니다.
      • TIME_ZONE: 사용자가 제공한 일정을 해석하기 위해 Cloud Scheduler에서 사용되는 시간대입니다. 예를 들면 America/New_York입니다.
      • SERVICE_ACCOUNT_NAME: 이전에 만든 서비스 계정의 이름입니다.
    2. 프로젝트의 모든 작업을 나열하려면 다음 안내를 따르세요.

      gcloud scheduler jobs list

    3. 작업을 삭제하려면 다음 안내를 따르세요.

      gcloud scheduler jobs delete JOB_NAME

이제 워크플로가 정의된 빈도에 따라 실행됩니다.

다음 단계