Eventarc를 사용하면 데이터 레지던시 및 처리 지연 시간을 관리하면서 Google Cloud 서비스 간에 이벤트를 라우팅할 수 있습니다. 모든 이벤트 워크플로에는 이벤트가 시작되는 이벤트 소스, 라우팅을 관리하는 Eventarc 트리거, 페이로드를 처리하는 대상의 세 가지 위치 측정기준이 포함됩니다.
타겟 대상은 소스와 다른 리전에 있을 수 있지만 트리거 위치 요건은 이벤트 제공업체에 따라 다릅니다.
자세한 내용은 Eventarc 위치를 참조하세요.
소스 위치
이벤트 소스의 위치에 따라 트리거 위치가 결정되는 경우가 많습니다. 다음 예시에서 Cloud Storage 버킷이 europe-west1 리전에 있으므로 트리거도 europe-west1에 있어야 합니다.
gcloud eventarc triggers create trigger-storage \
--destination-run-service=hello \
--destination-run-region=us-central1 \
--location=europe-west1 \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=my-bucket-in-europe-west1-region" \
--service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
대상 위치
이벤트 대상(예: Cloud Run 서비스)을 배포할 때 지원되는 리전을 위치로 선택합니다. 일반적으로 지연 시간과 데이터 지역 이유로 인해 이벤트 소스와 동일한 리전에 있는 것이 좋습니다.
그러나 이는 필수가 아닙니다. 앞의 예시에서 이벤트 소스는 europe-west1에 있는 반면 --destination-run-region 플래그는 이벤트 대상이 us-central1에 있음을 나타냅니다.
트리거 위치
또한 생성하는 Eventarc 트리거의 유형은 ‑‑location 플래그를 통해 지정되는 트리거의 위치에 영향을 미칩니다.
Cloud 감사 로그
Cloud 감사 로그 트리거를 사용하면 감사 로그를 내보내는 모든 이벤트 소스를 이벤트 대상에 연결할 수 있습니다. Cloud 감사 로그 트리거는 단일 리전 위치에서 사용할 수 있으며 전역 Eventarc 트리거를 만들 수 있습니다. 그러나 이중 리전 및 멀티 리전 위치에서는 트리거가 지원되지 않습니다.
이벤트 소스의 위치에 따라 트리거 위치가 결정됩니다. 일반적으로 이 위치는 단일 리전 위치입니다. 예를 들어 감사 로그 트리거로 europe-west1 리전에 있는 버킷에서 발생한 Cloud Storage 이벤트를 캡처하려면 동일한 위치에 트리거를 만듭니다.
gcloud eventarc triggers create trigger-auditlog \
--destination-run-service=hello \
--destination-run-region=us-central1 \
--location=europe-west1 \
--event-filters="type=google.cloud.audit.log.v1.written" \
--event-filters="serviceName=storage.googleapis.com" \
--event-filters="methodName=storage.objects.create" \
--service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
Cloud 감사 로그 트리거를 사용하는 경우 버킷별 필터링이 없으므로 europe-west1 리전의 모든 버킷과 일치하게 됩니다. (버킷별로 필터링하려면 직접 Cloud Storage 트리거를 사용하면 됩니다.)
또는 eu와 같은 이중 리전이나 멀티 리전 버킷과 일치시키려면 global 위치를 사용하여 트리거를 만들면 됩니다. 그러면 모든 리전 내 모든 버킷이 다음과 일치하는 이벤트 필터와 일치합니다.
gcloud eventarc triggers create trigger-storage \
--destination-run-service=hello \
--destination-run-region=us-central1 \
--location=global \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=my-bucket-in-europe-west1-region" \
--service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
Cloud Storage
Cloud Storage 트리거는 객체 생성, 삭제, 보관처리, 메타데이터 업데이트와 같은 Cloud Storage 버킷 내 이벤트에 응답합니다. Cloud Storage 트리거는 단일 리전, 이중 리전, 멀티 리전 위치에서 사용할 수 있지만 전역 Eventarc 트리거를 만들 수는 없습니다.
Cloud Storage 버킷 위치는 Eventarc 트리거 위치를 결정하며 반드시 일치해야 합니다. 다음 예시에서 트리거 위치는 Cloud Storage 버킷(eu 멀티 리전 위치) 위치와 일치합니다.
gcloud eventarc triggers create trigger-storage \
--destination-run-service=hello \
--destination-run-region=us-central1 \
--location=eu \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=my-bucket-in-eu-multi-region" \
--service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
버킷과 트리거 리전이 일치하지 않으면 다음과 유사한 오류가 표시됩니다.
ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was
invalid: Bucket "my-bucket-in-eu-multi-region" location "eu" does not match
trigger location "europe-west1". Try again by creating the trigger in "eu".
Pub/Sub
Pub/Sub 트리거는 Pub/Sub 주제를 이벤트 대상에 연결합니다. 단일 리전 위치에서만 Pub/Sub 트리거를 사용할 수 있으며 전역 Eventarc 트리거를 만들 수 없습니다.
Pub/Sub 주제는 전역 리소스이며 단일 리전에 연결되지 않지만 Pub/Sub 트리거를 만들 때 --location 플래그를 사용하여 리전을 지정해야 합니다.
gcloud eventarc triggers create trigger-pubsub \
--destination-run-service=hello \
--destination-run-region=us-central1 \
--location=us-central1 \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--transport-topic=projects/your-projectid/topics/your-topic
Eventarc는 Pub/Sub 이벤트가 지정된 위치에서만 지속되도록 지오펜싱을 구성합니다. 또한 모든 데이터가 단일 리전에 유지되도록 리전 Pub/Sub 서비스 엔드포인트를 사용하여 주제에 게시할 수도 있습니다.
멀티 리전 배포 및 메시지 중복
Pub/Sub 주제에 대한 Eventarc 트리거를 만들면 Eventarc에서 해당 트리거에 대한 고유한 기본 Pub/Sub 구독을 자동으로 만듭니다. 이렇게 하면 Eventarc에서 구독의 수명 주기, 권한, 데이터 상주 규정 준수를 관리할 수 있습니다.
동일한 전역 Pub/Sub 주제를 가리키는 동일한 트리거를 여러 리전에 배포하면 각 트리거가 별도의 구독자로 작동합니다. Pub/Sub은 활성 상태의 모든 구독에 메시지를 전송하므로 (팬아웃) 모든 리전의 서비스가 동일한 메시지를 수신하고 처리하여 중복이 발생합니다.
메시지 중복 없이 멀티 리전 배포를 달성하려면 이벤트 수집을 리전 처리에서 분리하면 됩니다. 단일 리전에서 단일 Eventarc 트리거를 만들고 전역 외부 애플리케이션 부하 분산기를 가리키도록 트리거를 구성합니다. 그런 다음 리전 백엔드(예: 여러 리전의 Cloud Run 서비스)로 트래픽을 라우팅하도록 부하 분산기를 구성합니다.
이 접근 방식을 사용하면 메시지가 부하 분산기에 정확히 한 번 전송되고 부하 분산기는 리전 간에 이벤트를 분산합니다. 트리거는 지오펜싱을 충족하기 위해 리전으로 유지되지만 타겟은 전역 도달범위를 제공합니다.
아키텍처와 관계없이 Eventarc는 최소 한 번 이벤트 전송을 제공하므로 이벤트 핸들러가 잠재적인 중복을 처리할 수 있도록 멱등성을 갖도록 합니다.
다음 단계
- 여러 Google Cloud 프로젝트에 걸쳐 이벤트를 라우팅하는 방법을 알아보려면 튜토리얼을 참고하세요.