Cloud Storage 이벤트를 Workflows로 라우팅

Eventarc 트리거는 특정 이벤트 또는 이벤트 집합에 관심이 있음을 선언합니다. 이벤트 소스나 대상 서비스 등의 트리거 필터를 지정하여 이벤트 라우팅을 구성할 수 있습니다.

이벤트는 HTTP 요청을 통해 CloudEvents 형식으로 전달됩니다. Workflows 서비스는 이벤트를 JSON 객체(CloudEvents 사양에 따름)로 변환하고 이벤트를 워크플로 실행에 워크플로 런타임 인수로 전달합니다. 이벤트 크기가 512KB를 초과하지 않도록 유의하세요. 이벤트가 최대 Workflows 인수 크기보다 큰 경우 워크플로 실행이 트리거되지 않습니다.

이 안내에서는 직접Cloud Storage 이벤트에 대한 응답으로 워크플로 실행이 트리거되도록 이벤트 라우팅을 구성하는 방법을 보여줍니다. 이는 Cloud Storage 이벤트 제공자에게 적용됩니다. 자세한 내용은 지원되는 직접 이벤트 목록을 참조하세요.

트리거 만들기 준비

대상 워크플로에 대한 Eventarc 트리거를 만들기 전에 다음 작업을 완료해야 합니다.

콘솔

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 만들거나 선택합니다.

    프로젝트 선택기로 이동

  2. Eventarc, Eventarc Publishing, Workflows, Workflow Executions API를 사용 설정합니다.

    API 사용 설정

  3. 해당하는 경우 직접 이벤트와 관련된 API를 사용 설정합니다. 예를 들어 Cloud Storage 이벤트의 경우Cloud Storage API를 사용 설정합니다.

  4. 아직 계정이 없는 경우 사용자 관리형 서비스 계정을 만들고 Eventarc가 대상 워크플로의 이벤트를 관리할 수 있도록 필요한 역할과 권한을 계정에 부여합니다.

    1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

      서비스 계정으로 이동

    2. 프로젝트를 선택합니다.

    3. 서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.

      서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면 Service account for event trigger입니다.

    4. 만들고 계속하기를 클릭합니다.

    5. 적절한 액세스 권한을 제공하기 위해 역할 선택 목록에서 서비스 계정에 부여할 필요한 Identity and Access Management(IAM) 역할을 선택합니다. 자세한 내용은 Workflows 대상의 역할 및 권한을 참조하세요.

      역할을 추가하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.

    6. 계속을 클릭합니다.

    7. 계정 만들기를 마치려면 완료를 클릭합니다.

  5. Cloud Storage 서비스 에이전트에 Pub/Sub 게시자 역할을 부여합니다. 일반적으로는 service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com입니다. Cloud Storage 서비스 에이전트의 이메일 주소를 가져올 수 있습니다.

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

      IAM으로 이동

    2. Cloud Storage 서비스 에이전트 행에서 주 구성원 수정을 클릭합니다. 서비스 에이전트가 나열되지 않는 경우 다음 단계를 진행합니다. 액세스 권한 수정 창이 열립니다.

      1. 다른 역할 추가를 클릭한 다음 Pub/Sub 게시자 역할을 검색합니다.
      2. 역할을 선택합니다.
      3. 저장을 클릭합니다.
    3. 서비스 에이전트가 나열되지 않으면 액세스 권한 부여를 클릭합니다. 액세스 권한 부여 창이 열립니다.

      1. 새 주 구성원 필드에 서비스 에이전트의 이메일 주소를 입력합니다.
      2. 역할 선택 목록에서 Pub/Sub 게시자 역할을 검색합니다.
      3. 역할을 선택합니다.
      4. 저장을 클릭합니다.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Eventarc, Eventarc Publishing, Workflows, Workflow Executions API를 사용 설정합니다.

    gcloud services enable eventarc.googleapis.com \
        eventarcpublishing.googleapis.com \
        workflows.googleapis.com \
        workflowexecutions.googleapis.com

  3. 해당하는 경우 직접 이벤트와 관련된 API를 사용 설정합니다. 예를 들어 Cloud Storage 이벤트의 경우 storage.googleapis.com를 사용 설정합니다.

  4. 아직 계정이 없는 경우 사용자 관리형 서비스 계정을 만들고 Eventarc가 대상 워크플로의 이벤트를 관리할 수 있도록 필요한 역할과 권한을 계정에 부여합니다.

    1. 서비스 계정을 만듭니다.

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

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

    2. 필요한 Identity and Access Management(IAM) 역할 또는 권한을 부여합니다. 자세한 내용은 Workflows 대상의 역할 및 권한을 참조하세요.

  5. 직접 Cloud Storage 이벤트에 대한 트리거를 만드는 경우 Cloud Storage 서비스 계정에 pubsub.publisher 역할을 부여합니다.

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role="roles/pubsub.publisher"
    

트리거 만들기

Google Cloud CLI(gcloud 또는 Terraform)를 사용하거나 Google Cloud 콘솔을 통해 배포된 워크플로를 이벤트 수신자로 사용하여 Eventarc 트리거를 만들 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Eventarc 트리거 페이지로 이동합니다.

    트리거로 이동

  2. 트리거 만들기를 클릭합니다.
  3. 트리거 이름을 입력합니다.

    트리거의 ID이며 문자로 시작해야 합니다. 최대 63자(영문 기준)의 소문자, 숫자, 하이픈을 포함할 수 있습니다.

  4. 트리거 유형으로 Google 소스를 선택합니다.
  5. 이벤트 제공자 목록에서 Cloud Storage를 선택합니다.

    연결된 Google Cloud 문서에 사용된 이벤트 제공자 이름에 Cloud 또는 Google Cloud 프리픽스가 없을 수 있습니다. 예를 들어 콘솔에서는 Redis용 MemorystoreRedis용 Google Cloud Memorystore라고 합니다.

  6. 이벤트 유형 목록의 직접 이벤트에서 이벤트 유형을 선택합니다.
    • google.cloud.storage.object.v1.archived: 객체의 라이브 버전이 보관처리되거나 삭제되면 이벤트가 전송됩니다. 이 이벤트는 버전 관리 버킷인 경우에만 전송됩니다.
    • google.cloud.storage.object.v1.delete: 객체가 영구적으로 삭제되면 이벤트가 전송됩니다. 버킷의 객체 버전 관리 설정에 따라 다음과 같은 결과가 발생합니다.
      • 버전 관리 버킷의 경우 버전이 영구적으로 삭제될 때에만 전송됩니다(객체를 보관처리할 때는 전송되지 않음).
      • 버전 관리 버킷이 아닌 경우 객체가 삭제되거나 덮어쓰여질 때 전송됩니다.
    • google.cloud.storage.object.v1.finalized: 버킷에서 새로운 객체를 만들거나 기존 객체를 덮어쓰고 해당 객체의 새로운 세대를 만들면 이벤트가 전송됩니다.
    • google.cloud.storage.object.v1.metadataUpdated: 기존 객체의 [메타데이터](/storage/docs/metadata)가 변경되면 이벤트가 전송됩니다.
  7. 이벤트 데이터 콘텐츠 유형 목록에서 이벤트 페이로드의 인코딩을 선택합니다.

    Cloud Storage의 직접 이벤트에서는 application/json이어야 합니다.

  8. Cloud Storage 버킷의 전역적으로 고유한 식별자를 지정하거나 찾습니다.

    Cloud Storage 버킷은 Eventarc 트리거와 동일한 Google Cloud 프로젝트 및 리전 또는 멀티 리전에 있어야 합니다.

  9. 리전을 선택합니다.

    Eventarc용 Cloud Storage 트리거는 단일 리전, 이중 리전, 멀티 리전 위치에서 사용할 수 있습니다. Cloud Storage 버킷은 Eventarc 트리거와 동일한 Google Cloud 프로젝트 및 리전 또는 멀티 리전에 있어야 합니다.

    이벤트는 Cloud Storage의 Pub/Sub 알림을 사용하여 전송됩니다. 같은 버킷에 등록된 알림을 너무 많이 설정하면 Cloud Storage bucket ...: Pub/Sub notification limit reached 오류로 표시된 버킷의 알림 한도가 소진될 수 있습니다. 특정 이벤트에 트리거되는 알림 구성은 10개까지 사용할 수 있습니다. Cloud Storage 할당량 및 한도 페이지에서 추가 할당량 및 제한사항을 참조하세요.

  10. 서비스 또는 워크플로를 호출할 서비스 계정을 선택합니다.

    또는 새 서비스 계정을 만들 수 있습니다.

    이는 트리거와 연결되어 있고 이전에 Eventarc에 필요한 특정 역할을 부여한 Identity and Access Management(IAM) 서비스 계정 이메일을 지정합니다.

  11. 이벤트 대상 목록에서 Workflows을 선택합니다.
  12. 워크플로를 선택합니다.

    이벤트를 전달할 워크플로의 이름입니다. 워크플로 실행 이벤트가 변환되어 런타임 인수로 워크플로에 전달됩니다.

    자세한 내용은 Workflows의 트리거 만들기를 참고하세요.

  13. 만들기를 클릭합니다.
  14. 트리거가 생성된 후에는 이벤트 소스 필터를 수정할 수 없습니다. 대신 새 트리거를 만들고 이전 트리거를 삭제합니다. 자세한 내용은 트리거 관리를 참조하세요.

gcloud

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-workflow=DESTINATION_WORKFLOW  \
    --destination-workflow-location=DESTINATION_WORKFLOW_LOCATION \
    --event-filters="type=EVENT_FILTER_TYPE" \
    --event-filters="bucket=BUCKET" \
    --service-account="MY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"

다음을 바꿉니다.

  • TRIGGER: 트리거의 ID 또는 정규화된 식별자입니다.
  • LOCATION: Eventarc 트리거 위치이며 단일 리전, 이중 리전, 멀티 리전 위치에서 사용할 수 있습니다. global Eventarc 트리거는 만들 수 없습니다. Cloud Storage 버킷은 Eventarc 트리거와 동일한 Google Cloud 프로젝트와 리전에 있어야 합니다. 자세한 내용은 Eventarc 위치를 참조하세요.
  • DESTINATION_WORKFLOW: 트리거에서 이벤트를 수신하는 배포된 워크플로의 ID입니다. 워크플로는 Workflows 지원 위치 중 하나에 있을 수 있으며 트리거와 동일한 위치에 있을 필요는 없습니다. 하지만 워크플로는 트리거와 동일한 프로젝트에 있어야 합니다.
  • DESTINATION_WORKFLOW_LOCATION(선택사항): 대상 워크플로가 배포되는 위치입니다. 지정하지 않으면 워크플로가 트리거와 동일한 위치에 있다고 가정합니다.
  • EVENT_FILTER_TYPE: Cloud Storage 이벤트의 식별자이며 다음 중 하나일 수 있습니다.
    • google.cloud.storage.object.v1.finalized: 버킷에서 새로운 객체를 만들거나 기존 객체를 덮어쓰고 해당 객체의 새로운 세대를 만들면 이벤트가 전송됩니다.
    • google.cloud.storage.object.v1.archived: 객체의 라이브 버전이 보관처리되거나 삭제되면 이벤트가 전송됩니다. 이 이벤트는 버전 관리 버킷인 경우에만 전송됩니다.
    • google.cloud.storage.object.v1.deleted: 객체가 영구적으로 삭제될 때 이벤트가 전송됩니다. 버킷의 객체 버전 관리 설정에 따라 다음과 같은 결과가 발생합니다.
      • 버전 관리 버킷의 경우 버전이 영구적으로 삭제될 때에만 전송됩니다(객체를 보관처리할 때는 전송되지 않음).
      • 버전 관리 버킷이 아닌 경우 객체가 삭제되거나 덮어쓰여질 때 전송됩니다.
    • google.cloud.storage.object.v1.metadataUpdated: 기존 객체의 메타데이터가 변경될 때 이벤트가 전송됩니다.
  • BUCKET: Cloud Storage 버킷의 전역 고유 식별자입니다.
  • SERVICE_ACCOUNT_NAME: Workflows에 필요한 특정 역할을 부여하여 만든 IAM 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.

참고:

  • Cloud Storage의 직접 이벤트에서는 이벤트 페이로드 인코딩이 application/json입니다.
  • 이 플래그들은 필수사항입니다.
    • --event-filters="type=EVENT_FILTER_TYPE"
    • --event-filters="bucket=BUCKET"
  • 트리거가 생성된 후에는 EVENT_FILTER_TYPE을 변경할 수 없습니다. 다른 이벤트 유형에서는 새 트리거를 만들어야 합니다.
  • --service-account: Eventarc 트리거에서 워크플로 실행을 호출하는 데 사용할 IAM 서비스 계정 이메일입니다. 필요한 리소스에 액세스하는 데 필요한 최소 권한이 포함된 서비스 계정을 사용하는 것이 좋습니다. 서비스 계정에 대한 자세한 내용은 서비스 계정 생성 및 관리를 참조하세요.
  • 이벤트는 Cloud Storage의 Pub/Sub 알림을 사용하여 전송됩니다. 같은 버킷에 등록된 알림을 너무 많이 설정하면 Cloud Storage bucket ...: Pub/Sub notification limit reached 오류로 표시된 버킷의 알림 한도가 소진될 수 있습니다. 특정 이벤트에 트리거되는 알림 구성은 10개까지 사용할 수 있습니다. Cloud Storage 할당량 및 한도 페이지에서 추가 할당량 및 제한사항을 참조하세요.
  • 각 트리거에 여러 이벤트 필터를 넣거나(한 개의 --event-filters=[ATTRIBUTE=VALUE,...] 플래그에 쉼표로 구분하여 입력) 플래그를 반복하여 필터를 추가할 수 있습니다. 모든 필터와 일치하는 이벤트만 대상으로 전송됩니다. 와일드 카드와 정규 표현식은 지원되지 않습니다.
  • Cloud Storage 버킷은 Eventarc 트리거와 동일한 Google Cloud 프로젝트 및 리전 또는 멀티 리전에 있어야 합니다.
  • 기본적으로 Eventarc용으로 생성된 Pub/Sub 구독은 활동과 관계없이 유지되며 만료되지 않습니다. 비활성 기간을 변경하려면 구독 속성을 참조하세요.

예:

gcloud eventarc triggers create helloworld-trigger \
    --location=us-central1 \
    --destination-workflow=my-workflow \
    --destination-workflow-location=europe-west4 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-project-bucket" \
    --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

이 명령어는 Cloud Storage 버킷 my-project-bucketgoogle.cloud.storage.object.v1.finalized로 식별된 이벤트에 대해 helloworld-trigger라는 트리거를 만듭니다.

Terraform

Terraform을 사용하여 워크플로에 대한 트리거를 만들 수 있습니다. 자세한 내용은 Eventarc 및 Terraform을 사용하여 워크플로 트리거를 참조하세요.

트리거 나열

Google Cloud CLI를 사용하거나 Google Cloud 콘솔을 통해 Eventarc 트리거를 나열하여 트리거 생성을 확인할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Eventarc 트리거 페이지로 이동합니다.

    트리거로 이동

    이 페이지에서는 모든 위치의 트리거를 나열하고 이름, 리전, 이벤트 제공자, 대상 등과 같은 세부정보를 포함합니다.

  2. 트리거를 필터링하려면 다음 안내를 따르세요.

    1. 필터 또는 트리거 필터링 필드를 클릭합니다.
    2. 속성 목록에서 트리거를 필터링하는 옵션을 선택합니다.

    단일 속성을 선택하거나 OR 논리 연산자를 사용하여 속성을 추가할 수 있습니다.

  3. 트리거를 정렬하려면 지원되는 열 제목 옆에 있는 정렬을 클릭합니다.

gcloud

다음 명령어를 실행하여 트리거를 나열합니다.

gcloud eventarc triggers list --location=-

이 명령어는 모든 위치의 트리거를 나열하고 이름, 유형, 대상, 상태와 같은 세부정보를 포함합니다.

다음 단계