Eventarc 支持在过滤时应用路径模式。例如,您可以按资源名称进行过滤。资源名称使用标识符按层级进行排列,标识符由资源本身的 ID 和任何父资源的 ID 组成,所有 ID 使用正斜杠分隔,例如:/projects/_/buckets/bucket-id/objects/object-id
。Eventarc 所执行的过滤会根据这些标识符的值来匹配模式。如需了解详情,请参阅资源名称。
Eventarc 的路径模式语法允许您定义与事件匹配的表达式。这样,您就可以控制正在创建的 Eventarc 触发器的粒度,捕获某些事件并对其执行操作。例如,您可以创建一个适用于单个事件的触发器(例如对特定文件的更改),也可以扩展模式的范围并创建更广泛适用的触发器。
应用路径模式
您可以在使用 Eventarc 控制台页面或通过运行 gcloud
命令来创建触发器时应用路径模式来过滤资源。
通过控制台,在路径模式文本框中提供路径模式。 如需了解详情,请参阅通过 Google Cloud Console 创建触发器。
使用 gcloud
时,请使用 --event-filters-path-pattern="resourceName=VALUE"
标志,而不是 --event-filters="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 )* |
片段 | CaptureGroup | Expression |
CaptureGroup | { ID (= Expression )? } |
表达式 | Wildcard | MultiSegmentWildcard | NameSegment |
NameSegment | ( Character * Wildcard ? Character *) |
ID | [a-zA-Z0-9_]+ |
通配符 | * |
MultiSegmentWildcard | ** |
字符1 | [\\w\\s\\t~@#$%&.,?:;+='[]()-] |
图例:
? |
零或一 |
* |
零个或多个 |
+ |
一个或多个 |
| |
或 |
表达式
表达式可以是以下片段类型之一,且不能为空:
- 定义为
*
的单个分段Wildcard
与模式中的零个或多个字符匹配。 - 定义为
**
的MultiSegmentWildcard
与模式中的零个或多个分段匹配。 NameSegment
由零个或一个*
和其他字符组成。这种组合允许您按前缀、后缀或文件扩展名进行过滤;例如file-*.txt
。
请注意,一个路径可以包含许多单段通配符,但只能包含一个多段通配符。例如,以下路径无效:/projects/**/buckets/**
。
资源区域性
资源名称可以包含位置标识符。例如:
/projects/$PROJECT_ID/locations/$REGION/triggers/my-trigger
但是,路径模式匹配受资源区域性限制。例如,对于 Cloud Audit Logs 触发器,位置通配符仅匹配来自 Cloud Audit Logs 区域的触发器或全局触发器。
捕获组
CaptureGroup
允许您捕获表达式的内容。为此,您可以将值分配给大括号中的变量名称;例如 buckets/{path=**}/files/{filename=file-*.txt}
。单段通配符可以省略捕获组中的 =*
;例如 /projects/_/buckets/{bucket}/objects/file.*
示例
以下示例演示了在什么情况下可以和不可以使用语法。
有效模式
模式 | 说明 |
---|---|
/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.*}
|
同一过滤条件的三种不同表示法。匹配包含名为 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 |
后续步骤
- 如需查看 Eventarc 支持的事件列表,请参阅 Eventarc 支持的事件类型。