Eventarc에서는 필터링할 때 경로 패턴을 적용할 수 있습니다. 경로 패턴 문법을 사용하면 이벤트와 일치하는 표현식을 정의할 수 있습니다. 이렇게 하면 만드는 Eventarc 트리거의 세부사항을 제어하고 특정 이벤트를 캡처하여 조치를 취할 수 있습니다. 예를 들어 특정 파일 변경과 같이 단일 이벤트에 적용되는 트리거를 만들거나 패턴 범위를 확장하고 더 광범위하게 적용되는 트리거를 만들 수 있습니다.
경로 패턴 적용
Eventarc Google Cloud 콘솔 페이지를 사용하거나 gcloud
명령어를 실행하면 트리거를 만들 때 경로 패턴을 적용하여 이벤트를 필터링할 수 있습니다.
예를 들어 리소스 이름 또는 데이터베이스 인스턴스(단일 인스턴스 또는 경로)를 필터링할 때 경로 패턴을 적용할 수 있습니다.
리소스 이름 경로 패턴은 Cloud 감사 로그 이벤트 트리거를 만들 때와
resourceName
값에 지정됩니다. 리소스 이름은 감사 로그를 통해 감사되는 리소스를 나타냅니다. 리소스 이름은 슬래시로 구분된 리소스 자체의 ID와 상위 리소스의 ID로 구성된 식별자를 통해 계층적으로 구성됩니다(예:/projects/project-1/datasets/dataset-id
). Eventarc에서 수행한 필터링은 이러한 식별자 값을 기준으로 패턴을 일치시킵니다. 자세한 내용은 이 문서의 리소스 이름 형식을 참조하세요.데이터베이스 인스턴스 경로 패턴을 지정하면 Firebase 실시간 데이터베이스 패턴에 대한 트리거를 만들 때, 그리고
instance
또는ref
값에 적용됩니다. 데이터베이스 인스턴스는 Firebase 실시간 데이터베이스 인스턴스를 나타냅니다. 데이터베이스 인스턴스의 인스턴스 이름 또는 해당 경로나 모든 하위 항목에서 데이터가 생성, 업데이트 또는 삭제될 때 이벤트를 수신할 문서 경로에 경로 패턴을 적용할 수 있습니다.리소스 ID 경로 패턴 지정은 Cloud IoT 이벤트에 대한 트리거를 만들 때 그리고
registry
및device
값에 적용됩니다. 경로 패턴을 적용하여 와일드 카드 일치를 통해 레지스트리와 레지스트리의 기기의 변경사항을 필터링할 수 있습니다.
자세한 내용은 특정 제공업체, 이벤트 유형, 대상에 대한 트리거 만들기 안내를 참조하세요.
경로 패턴 적용 가능 여부 확인
제공업체의 이벤트 속성에 경로 패턴을 적용할 수 있는지 확인하려면 이벤트 제공업체를 설명합니다. 예를 들면 다음과 같습니다.
gcloud eventarc providers describe cloudaudit.googleapis.com --location=us-central1
출력은 다음과 비슷하며, pathPatternSupported
값이 true
이면 경로 패턴을 적용할 수 있음을 나타냅니다.
displayName: Cloud Audit Logs eventTypes: - description: An audit log is created that matches the trigger's filter criteria. filteringAttributes: - attribute: methodName description: The identifier of the service's operation. required: true - attribute: resourceName description: The complete path to a resource. Used to filter events for a specific resource. pathPatternSupported: true - attribute: serviceName description: The identifier of the Google Cloud service. required: true - attribute: type required: true type: google.cloud.audit.log.v1.written name: projects/project-name/locations/us-central1/providers/cloudaudit.googleapis.com
또는, 예를 들어 다음과 같습니다.
gcloud eventarc providers describe firebasedatabase.googleapis.com --location=us-central1
출력은 다음과 비슷합니다.
displayName: Firebase Realtime Database eventTypes: - description: New data has been created in the database. filteringAttributes: - attribute: instance description: A single database instance. pathPatternSupported: true required: true - attribute: ref description: Pattern to match for the database instance. pathPatternSupported: true required: true - attribute: type required: true type: google.firebase.database.ref.v1.created [...]
자세한 내용은 gcloud eventarc providers describe
를 참조하세요.
경로 패턴 문법
경로 패턴 문법은 다음과 같이 정의됩니다.
패턴 | /? Segment (/ Segment )* |
Segment | CaptureGroup | Expression |
CaptureGroup | { ID (= Expression )? } |
표현식 | Wildcard | MultiSegmentWildcard | NameSegment |
NameSegment | ( Character * Wildcard ? Character *) |
ID | [a-zA-Z0-9_]+ |
Wildcard | * |
MultiSegmentWildcard | ** |
Character1 | [\\w\\s\\t~@#$%&.,?:;+='[]()-] |
범례:
? |
0 또는 1 |
* |
0 이상 |
+ |
1 이상 |
| |
또는 |
표현식
표현식은 다음 세그먼트 유형 중 하나일 수 있으며 비워 둘 수 없습니다.
*
로 정의된 단일 세그먼트Wildcard
는 패턴의 문자 0개 이상과 일치합니다.**
로 정의된MultiSegmentWildcard
는 패턴의 세그먼트 0개 이상과 일치합니다.NameSegment
는*
0개나 1개 및 다른 문자로 구성됩니다. 이 조합을 사용하면 프리픽스, 서픽스 또는 파일 확장자를 기준으로 필터링할 수 있습니다(예:file-*.txt
).
경로에는 다양한 단일 세그먼트 와일드 카드가 포함될 수 있지만 여러 세그먼트 와일드 카드 하나만 포함될 수 있습니다. 예를 들어 /projects/**/buckets/**
경로는 유효하지 않습니다.
리소스 리전성
리소스 이름에는 위치 식별자가 포함될 수 있습니다. 예를 들면 다음과 같습니다.
/projects/$PROJECT_ID/locations/$REGION/triggers/my-trigger
그러나 경로 패턴 일치는 리소스 리전성에 의해 제한됩니다. 예를 들어 Cloud 감사 로그 트리거의 경우 위치 와일드 카드는 Cloud 감사 로그 리전의 트리거나 전역 트리거만 일치합니다.
캡처 그룹
CaptureGroup
를 사용하면 표현식의 콘텐츠를 캡처할 수 있습니다. 이렇게 하려면 중괄호로 값을 변수 이름에 할당합니다(예: buckets/{path=**}/files/{filename=file-*.txt}
). 단일 세그먼트 와일드 카드는 캡처 그룹의 =*
를 생략할 수 있습니다(예: /projects/_/buckets/{bucket}/objects/file.*
).
리소스 이름 형식
다음 표에는 일반적으로 사용되는 Google Cloud 서비스의 전체 리소스 이름 예시가 나와 있습니다. 전체 목록이 아닙니다. 전체 리소스 이름 형식에 대한 자세한 내용은 API 설계 가이드의 리소스 이름 섹션을 참조하세요.
리소스 유형 | 전체 리소스 이름 형식 |
---|---|
BigQuery 데이터세트 | //bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID |
Cloud Billing 계정 | //cloudbilling.googleapis.com/billingAccounts/BILLING_ACCOUNT_ID |
Cloud Run 서비스 | //run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID |
Cloud SQL 인스턴스 | //sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID |
Cloud Storage 버킷1 | //storage.googleapis.com/projects/_/buckets/BUCKET_ID |
Cloud Storage 객체1,2 | //storage.googleapis.com/projects/_/buckets/BUCKET_ID/objects/OBJECT_ID |
Compute Engine 인스턴스 | //compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID |
Compute Engine 네트워크 | //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK |
Compute Engine 서브네트워크 | //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK |
Google Kubernetes Engine 클러스터 | //container.googleapis.com/projects/PROJECT_ID/clusters/CLUSTER_ID |
IAP(Identity-Aware Proxy) App Engine 앱 서비스 | //iap.googleapis.com/projects/PROJECT_NUMBER/iap_web/appengine-PROJECT_ID/services/APP_SERVICE_ID |
IAP Compute Engine 백엔드 서비스 | //iap.googleapis.com/projects/PROJECT_NUMBER/iap_web/compute/services/BACKEND_SERVICE_ID_OR_NAME |
Pub/Sub 주제 | //pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID |
Resource Manager 조직 | //cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_NUMBER |
Resource Manager 폴더 | //cloudresourcemanager.googleapis.com/folders/FOLDER_NUMBER |
Resource Manager 프로젝트 | //cloudresourcemanager.googleapis.com/projects/PROJECT_ID |
1 Cloud Storage에서는 리소스 이름에 프로젝트 ID가 아닌 밑줄(_
)이 포함됩니다. 밑줄을 프로젝트 ID, 프로젝트 이름 또는 프로젝트 번호로 바꿀 수 없습니다.
2 슬래시를 포함하여 전체 객체 이름을 사용합니다. Cloud Storage에서 이러한 문자는 경로 구분자가 아닌 객체 이름의 일부입니다.
예시
다음 예시에서는 문법을 사용하는 방법과 사용할 수 없는 방법을 보여줍니다.
유효한 패턴
패턴 | 설명 |
---|---|
/projects/project-1/datasets/dataset-1 |
특정 리소스 이름 |
/projects/project-1/regions/region-1/subnetworks/* |
project-1 및 region-1 의 모든 서브네트워크와 일치합니다. |
/projects/_/buckets/bucket-1/objects/*.txt |
버킷의 모든 TXT 파일과 일치합니다. |
/projects/_/buckets/bucket-1/objects/file-*.txt |
버킷에서 file- 프리픽스가 있는 모든 TXT 파일과 일치합니다. |
/projects/project-1/serviceAccounts/service-account-email-1/keys/** |
특정 서비스 계정 이메일의 모든 키와 일치합니다. |
/projects/_/**/file-*.txt |
모든 버킷의 file- 프리픽스가 있는 모든 TXT 파일과 일치합니다. |
/projects/_/buckets/bucket-*/objects/file-*.txt |
bucket- 프리픽스가 있는 버킷의 file- 프리픽스가 있는 모든 TXT 파일과 일치합니다. |
/projects/_/buckets/{bucket}/objects/file.* /projects/_/buckets/{bucket=*}/objects/file.* /projects/_/buckets/*/objects/{filename=file.*}
|
동일한 필터의 3가지 표현. 모든 유형의 file 이라고 하는 파일이 있는 버킷과 일치합니다. 처음 두 예시는 버킷도 캡처하고 마지막 예시는 파일 이름을 캡처합니다.
|
/projects/project-1/zones/zone-1/instances/** |
project-1 및 zone-1 의 모든 항목과 일치합니다. |
/projects/*/zones/zone-1/instances/** |
모든 프로젝트의 zone-1 에 있는 모든 항목과 일치합니다. |
잘못된 패턴
패턴 | 설명 |
---|---|
/projects/_/buckets/bucket-1/objects/ |
빈 표현식 |
/projects//buckets/bucket-1/objects/file1.txt |
빈 표현식 |
/projects/_/buckets/bucket**/objects/file1.txt |
표현식에는 * 하나만 포함될 수 있습니다. |
/projects/_/buckets/bucket-1/objects/file-*.* |
표현식에는 * 하나만 포함될 수 있습니다. |
/projects/**/buckets/** |
리소스 경로에는 ** 하나만 포함될 수 있습니다. |
/projects/_/buckets/{=*}/objects/file1.txt |
세그먼트에 ID 누락 |
/projects/_/buckets/{bucket=}/objects/file1.txt |
캡처 그룹 내의 빈 표현식 |
/projects/_/buckets/{bucket/objects/file1.txt |
캡처 그룹이 닫혀 있지 않습니다. |
패턴 일치
패턴 | 리소스 | 일치 여부 |
---|---|---|
/buckets/bucket-1/objects/file1.txt |
/buckets/bucket-1/objects/file1.txt |
|
/buckets/bucket-1/objects/file2.txt |
||
/buckets/bucket-1/objects/* |
/buckets/bucket-1/objects/file3.txt |
|
/buckets/bucket-1/objects/file4.jpg |
||
/buckets/bucket-1/objects/files/file4.jpg |
||
/buckets/bucket-1/objects |
||
/buckets/bucket-1/objects/*.txt |
/buckets/bucket-1/objects/file5.txt |
|
/buckets/bucket-1/objects/file6.jpg |
||
/buckets/bucket-1/objects/file-*.txt |
/buckets/bucket-1/objects/file-777.txt |
|
/buckets/bucket-1/objects/file-.txt |
||
/buckets/bucket-1/objects/file.txt |
||
/projects/_/**/{filename=file-*.txt} |
/projects/_/objects/object-1/files/file-9.txt |
|
/projects/_/{ob}jects/**/-+=*/file-9.txt |
||
/projects/_/file-10.txt |
||
/projects/_/files-1/file-1.txt/files-2/file-2.txt |
||
/projects/_//file-1234.txt |
||
/projects/_/files/file-5.txt/file.txt |
다음 단계
- Eventarc에서 지원하는 이벤트 목록은 Eventarc에서 지원하는 Google 이벤트 유형을 참고하세요.