了解路径模式

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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~@#$%&.,?:;+='[]()-]

图例:

? 零或一
* 零个或多个
+ 一个或多个
|
1 仅支持列出的 ASCII 字符。

表达式

表达式可以是以下片段类型之一,且不能为空:

  • 定义为 * 的单个分段 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

后续步骤