경로 패턴 이해

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Eventarc에서는 필터링할 때 경로 패턴을 적용할 수 있습니다. 예를 들어 리소스 이름을 필터링할 수 있습니다. 리소스 이름은 슬래시로 구분된 리소스 자체의 ID와 상위 리소스의 ID로 구성된 식별자를 통해 계층적으로 구성됩니다(예: /projects/_/buckets/bucket-id/objects/object-id). Eventarc에서 수행한 필터링은 이러한 식별자 값을 기준으로 패턴을 일치시킵니다. 자세한 내용은 리소스 이름을 참조하세요.

Eventarc의 경로 패턴 구문을 사용하면 이벤트와 일치하는 표현식을 정의할 수 있습니다. 이렇게 하면 만드는 Eventarc 트리거의 세부사항을 제어하고 특정 이벤트를 캡처하여 조치를 취할 수 있습니다. 예를 들어 특정 파일 변경과 같이 단일 이벤트에 적용되는 트리거를 만들거나 패턴 범위를 확장하고 더 광범위하게 적용되는 트리거를 만들 수 있습니다.

경로 패턴 적용

Eventarc 콘솔 페이지를 사용하거나 gcloud 명령어를 실행하면 트리거를 만들 때 경로 패턴을 적용하여 리소스를 필터링할 수 있습니다.

Console의 경로 패턴 텍스트 상자에 경로 패턴을 제공합니다. 자세한 내용은 Google Cloud Console을 통해 트리거 만들기를 참조하세요.

gcloud를 사용할 때는 --event-filters="resourceName=VALUE" 플래그 대신 --event-filters-path-pattern="resourceName=VALUE" 플래그를 사용합니다. 예를 들면 다음과 같습니다.

gcloud eventarc triggers create helloworld-trigger \
    --location=us-central1 \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=storage.googleapis.com" \
    --event-filters="methodName=storage.buckets.update" \
    --event-filters-path-pattern="resourceName=projects/_/buckets/**/r*.txt" \
    --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

자세한 내용은 Cloud Run 트리거 만들기 또는 Cloud Run for Anthos 트리거 만들기를 참조하세요.

경로 패턴 구문

경로 패턴 구문은 다음과 같이 정의됩니다.

경로 패턴 구문

패턴 /? Segment (/Segment)*
Segment CaptureGroup | Expression
CaptureGroup { ID (= Expression)? }
Expression Wildcard | MultiSegmentWildcard | NameSegment
NameSegment (Character* Wildcard? Character*)
ID [a-zA-Z0-9_]+
Wildcard *
MultiSegmentWildcard **
Character1 [\\w\\s\\t~@#$%&.,?:;+='[]()-]

범례:

? 0 또는 1
* 0 이상
+ 1 이상
| OR
1 나열된 ASCII 문자만 지원됩니다.

표현식

표현식은 다음 세그먼트 유형 중 하나일 수 있으며 비워 둘 수 없습니다.

  • *로 정의된 단일 세그먼트 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.*).

Examples

다음 예시에서는 구문을 사용하는 방법과 사용할 수 없는 방법을 보여줍니다.

유효한 패턴

패턴 설명
/projects/_/buckets/bucket-1/objects/file1.txt 특정 리소스 이름
/projects/_/buckets/bucket-1/objects/* objects 디렉터리의 모든 파일과 일치합니다.
/projects/_/buckets/bucket-1/objects/*.txt objects 디렉터리의 모든 TXT 파일과 일치합니다.
/projects/_/buckets/bucket-1/objects/file-*.txt objects 디렉터리에서 file- 프리픽스가 있는 모든 TXT 파일과 일치합니다.
/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/_/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

다음 단계