Workflows 예약


이 가이드에서는 Cloud Scheduler를 사용하여 워크플로가 특정 일정(이 경우 5분마다)으로 실행되도록 Workflows를 자동으로 실행하는 방법을 보여줍니다.

목표

  1. 런타임 인수를 수신할 수 있는 워크플로를 만들고 배포합니다.
  2. 워크플로를 트리거하고 5분마다 실행하는 Cloud Scheduler 작업을 만들어 JSON 인수를 올바른 형식으로 전달합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. App Engine 앱 만들기를 비롯하여 Cloud Scheduler의 환경을 설정합니다.
  2. Workflows API 사용 설정

    API 사용 설정

  3. 이 튜토리얼에서 사용한 기본 위치를 설정합니다.
      gcloud config set workflows/location REGION
    REGION을 지원되는 Workflows 위치 중 원하는 위치로 바꿉니다.
  4. Workflows에서 사용할 서비스 계정을 만듭니다. 예를 들면 sa-name입니다.
      gcloud iam service-accounts create sa-name
  5. 계정이 워크플로를 트리거할 수 있도록 서비스 계정에 workflows.invoker 역할을 부여합니다.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/workflows.invoker"
  6. PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
  7. 서비스 계정에 logging.logWriter 역할을 부여합니다.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/logging.logWriter"

런타임 인수를 수신하는 워크플로 만들기

워크플로 정의는 YAML 또는 JSON 형식으로 작성할 수 있는 Workflows 구문을 사용하여 기술되는 일련의 단계들로 구성됩니다. 워크플로를 만든 후 실행에 사용할 수 있도록 워크플로를 배포합니다.

콘솔

  1. Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

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

  3. 새 워크플로의 이름으로 myFirstWorkflow를 입력합니다.

  4. 리전에 us-central1을 선택합니다.

  5. 이전에 생성한 서비스 계정을 선택합니다.

  6. 다음을 클릭합니다.

  7. 워크플로 편집기에서 다음 워크플로 정의를 입력합니다.

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}
    

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      

    이 워크플로는 런타임 인수로 전달하는 이름 및 성에 해당하는 사람에 대해 'Hello' 인사를 반환합니다.

  8. 배포를 클릭합니다.

gcloud

  1. 터미널을 엽니다.
  2. 다음 워크플로 정의를 YAML 또는 JSON 파일(예: myFirstWorkflow.yaml 또는 myFirstWorkflow.json)로 저장합니다.

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}
    

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      

    이 워크플로는 런타임 인수로 전달하는 이름 및 성에 해당하는 사람에 대해 'Hello' 인사를 반환합니다.

  3. 다음 명령어를 입력하여 워크플로를 배포합니다.

    gcloud workflows deploy myFirstWorkflow \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com

    이전에 만든 Workflows 정의 파일의 형식에 따라 yaml_OR_jsonyaml 또는 json으로 바꿉니다.

워크플로 예약

이전에 만든 서비스 계정을 사용하여 워크플로를 트리거하는 Cloud Scheduler 작업을 만듭니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.

    Cloud Scheduler로 이동

  2. 작업 만들기를 클릭합니다.

  3. 이름my-workflow-job로 설정합니다.

  4. 빈도에 다음을 입력합니다.

    */5 * * * *
    그러면 작업이 5분마다 실행됩니다. 간격은 unix-cron 형식으로 정의됩니다.

  5. 시간대에 국가와 시간대를 선택합니다.

    예를 들어 미국과 로스앤젤레스 또는 태평양 일광 절약 표준시(PDT)를 선택합니다.

  6. 계속을 클릭합니다.

  7. 대상 유형HTTP를 선택합니다.

  8. URL에 다음을 입력합니다.

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
    

  9. HTTP 메서드를 기본값인 POST로 둡니다.

  10. 다음 두 개의 HTTP 헤더를 추가합니다.

    • 이름: Content-Type 및 값: application/octet-stream
    • 이름: User-Agent 및 값: Google-Cloud-Scheduler
  11. 본문에 다음을 입력합니다.

    {"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
    

    이는 워크플로 인수의 JSON 인코딩을 전달합니다. 이 경우 이름은 'Sherlock', 성은 'Holmes'입니다. 문자열 내의 큰따옴표는 백슬래시(\)로 이스케이프 처리됩니다.

  12. 인증 헤더OAuth 토큰 추가를 선택합니다.

  13. 이전에 만든 서비스 계정을 입력합니다.

    sa-name@PROJECT_ID.iam.gserviceaccount.com
    
    https://www.googleapis.com/auth/cloud-platform의 기본값이 사용되므로 범위를 지정할 필요가 없습니다.

  14. 다른 기본값을 그대로 두고 만들기를 클릭합니다.

gcloud

다음 명령어를 입력하여 my-workflow-job이라는 작업을 예약합니다.

gcloud scheduler jobs create http my-workflow-job \
    --schedule="*/5 * * * *" \
    --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \
    --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \
    --time-zone="America/Los_Angeles" \
    --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"

간격은 unix-cron 형식으로 정의됩니다.

message-body 플래그는 워크플로 인수의 JSON 인코딩을 전달하는 데 사용됩니다. 이 경우 이름은 'Sherlock', 성은 'Holmes'입니다. 문자열 내의 큰따옴표는 백슬래시(\)로 이스케이프 처리됩니다.

이제 워크플로가 5분마다 실행됩니다.

gcloud scheduler 플래그에 대한 자세한 내용과 워크플로 실행 중 각 호출 단계가 로깅되도록 호출 로깅을 적용하는 방법은 워크플로 예약gcloud 참조를 확인하세요.

작업 실행 및 결과 확인

콘솔

  1. Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.

    Cloud Scheduler로 이동

    작업이 표시되지 않는 경우 페이지를 새로고침해야 할 수 있습니다.

  2. 이름이 my-workflow-job인 작업에서 지금 실행을 클릭합니다.

    결과 값이 성공으로 업데이트됩니다.

  3. Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

  4. 워크플로 목록에서 myFirstWorkflow를 클릭하여 세부정보 페이지를 엽니다.

    워크플로의 실행 상태가 성공이어야 합니다.

  5. 워크플로의 실행 ID를 클릭하여 세부정보 페이지를 열고 출력 창에서 워크플로 결과를 확인합니다.

    'Hello, Sherlock Holmes!'가 출력되어야 합니다.

gcloud

  1. Cloud Scheduler 작업을 실행하여 워크플로를 실행합니다.

    gcloud scheduler jobs run my-workflow-job
    
  2. 워크플로의 실행 ID를 검색합니다.

    gcloud workflows executions list myFirstWorkflow
    

    출력은 실행 ID가 굵게 표시된 다음과 유사해야 합니다.

    projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
  3. 워크플로의 실행 결과를 검색합니다.

    gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow

    EXECUTION_ID를 이전 단계에서 반환된 실행 ID로 바꿉니다.

    다음과 유사한 결과가 출력됩니다.

    argument: '{"firstName":"Sherlock","lastName":"Holmes"}'
    endTime: '2021-09-09T15:15:00.869350639Z'
    name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
    result: '"Hello, Sherlock Holmes!"'
    startTime: '2021-09-09T15:15:00.839175480Z'
    state: SUCCEEDED
    workflowRevisionId: 000001-4f9

축하합니다. 특정 일정에 따라 워크플로를 자동으로 실행하는 Cloud Scheduler 작업을 성공적으로 만들었습니다.

삭제

튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

Cloud 스케줄러 작업 삭제

  1. Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.

    Cloud Scheduler로 이동

  2. 작업 옆의 체크박스를 선택합니다.

  3. 페이지 상단의 삭제를 클릭하고 삭제를 확인합니다.

Workflows 워크플로 삭제

  1. Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

  2. 워크플로를 선택합니다.

  3. 페이지 상단에 있는 삭제를 클릭합니다. 워크플로 이름을 입력하고 삭제를 확인합니다.

App Engine 앱 중지

App Engine 앱을 사용 중지하면 애플리케이션 데이터 및 설정을 유지하면서 애플리케이션이 인스턴스 실행 및 요청 처리를 중지합니다.

  1. Google Cloud 콘솔에서 애플리케이션 설정 페이지로 이동합니다.

    애플리케이션 설정으로 이동

  2. 애플리케이션 사용 중지를 클릭합니다.

  3. 안내를 따릅니다.

다음 단계