Informationen zu Pfadmustern

Eventarc unterstützt das Anwenden eines Pfadmusters beim Filtern. Beispielsweise können Sie nach Ressourcennamen filtern. Ein Ressourcenname wird hierarchisch mit Kennungen organisiert, die aus der ID der Ressource und den IDs aller übergeordneten Ressourcen bestehen, getrennt durch Schrägstriche wie in diesem Beispiel: /projects/_/buckets/bucket-id/objects/object-id. Die von Eventarc durchgeführte Filterung gleicht Muster anhand der Werte dieser Kennungen ab. Weitere Informationen finden Sie unter Ressourcennamen.

Mit der Pfadmustersyntax von Eventarc können Sie einen Ausdruck definieren, der Ereignissen entspricht. Auf diese Weise können Sie den Detaillierungsgrad des von Ihnen erstellten Eventarc-Triggers steuern und bestimmte Ereignisse erfassen und darauf reagieren. Sie können beispielsweise einen Trigger erstellen, der für ein einzelnes Ereignis gilt, z. B. eine Änderung an einer bestimmten Datei, oder Sie können den Umfang des Musters erweitern und einen Trigger erstellen, der breiter angewendet wird.

Pfadmuster anwenden

Sie können ein Pfadmuster anwenden, um Ressourcen zu filtern, wenn Sie einen Trigger auf der Console-Seite von Eventarc erstellen oder einen gcloud-Befehl ausführen.

Geben Sie in der Konsole das Pfadmuster im Textfeld Pfadmuster an. Weitere Informationen finden Sie unter Trigger über die Google Cloud Console erstellen.

Verwenden Sie mit gcloud ein --event-filters-path-pattern="resourceName=VALUE"-Flag anstelle eines --event-filters="resourceName=VALUE"-Flags. Beispiel:

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

Weitere Informationen finden Sie unter Trigger für Cloud Run erstellen oder Trigger für Cloud Run for Anthos erstellen.

Pfadmustersyntax

Die Pfadmustersyntax ist so definiert:

Pfadmustersyntax

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

Legende:

? null oder eins
* null oder mehr
+ eins oder mehr
| OR
1 Es werden nur die aufgeführten ASCII-Zeichen unterstützt.

Ausdrücke

Ein Ausdruck kann einen der folgenden Segmenttypen haben und nicht leer sein:

  • Eine Einzelsegment-Wildcard, definiert als *, entspricht null oder mehr Zeichen im Muster.
  • Eine als ** definierte MultiSegmentWildcard entspricht null oder mehr Segmenten im Muster.
  • Ein NameSegment besteht aus null oder einem * und anderen Zeichen. Mit dieser Kombination können Sie nach Präfix, Suffix oder Dateiendung filtern. Beispiel: file-*.txt.

Beachten Sie, dass ein Pfad viele Einzelsegment-Platzhalter enthalten kann, aber nur einen Platzhalter mit mehreren Segmenten. Der folgende Pfad ist beispielsweise ungültig: /projects/**/buckets/**.

Ressourcenregionalität

Ressourcennamen können Standortkennungen enthalten. Beispiel:

/projects/$PROJECT_ID/locations/$REGION/triggers/my-trigger

Der Pfadmusterabgleich ist jedoch durch die Ressourcenregionalität eingeschränkt. Bei Cloud-Audit-Logs-Triggern können beispielsweise Standortplatzhalter nur mit Triggern aus der Cloud-Audit-Logs-Region oder mit globalen Triggern übereinstimmen.

Erfassungsgruppen

Mit einer CaptureGroup können Sie den Inhalt eines Ausdrucks erfassen. Weisen Sie dazu den Wert einem Variablennamen in geschweiften Klammern zu. Beispiel: buckets/{path=**}/files/{filename=file-*.txt}. Ein Einzelsegment-Platzhalter kann =* in einer Erfassungsgruppe weglassen. Beispiel: /projects/_/buckets/{bucket}/objects/file.*

Beispiele

In den folgenden Beispielen wird gezeigt, wie Sie die Syntax verwenden und nicht verwenden können.

Gültige Muster

Muster Beschreibung
/projects/_/buckets/bucket-1/objects/file1.txt Spezifischer Ressourcenname.
/projects/_/buckets/bucket-1/objects/* Stimmt mit einer beliebigen Datei im Verzeichnis objects überein.
/projects/_/buckets/bucket-1/objects/*.txt Entspricht allen TXT-Dateien im Verzeichnis objects.
/projects/_/buckets/bucket-1/objects/file-*.txt Entspricht allen TXT-Dateien mit dem Präfix file- im Verzeichnis objects.
/projects/_/**/file-*.txt Entspricht einer beliebigen TXT-Datei mit dem Präfix file- für alle Buckets.
/projects/_/buckets/bucket-*/objects/file-*.txt Entspricht allen TXT-Dateien mit dem Präfix file- für jeden Bucket mit dem Präfix bucket-.
/projects/_/buckets/{bucket}/objects/file.*
/projects/_/buckets/{bucket=*}/objects/file.*
/projects/_/buckets/*/objects/{filename=file.*}
Drei verschiedene Darstellungen desselben Filters. Entspricht einem beliebigen Bucket mit einer Datei namens file eines beliebigen Typs. In den ersten beiden Beispielen wird auch der Bucket erfasst und im letzten Beispiel wird der Dateiname erfasst.

Ungültige Muster

Muster Beschreibung
/projects/_/buckets/bucket-1/objects/ Leerer Ausdruck.
/projects//buckets/bucket-1/objects/file1.txt Leerer Ausdruck.
/projects/_/buckets/bucket**/objects/file1.txt Der Ausdruck kann nur ein * enthalten.
/projects/_/buckets/bucket-1/objects/file-*.* Der Ausdruck kann nur ein * enthalten.
/projects/**/buckets/** Der Ressourcenpfad darf nur ein ** enthalten.
/projects/_/buckets/{=*}/objects/file1.txt Fehlende ID im Segment.
/projects/_/buckets/{bucket=}/objects/file1.txt Leerer Ausdruck in einer Erfassungsgruppe.
/projects/_/buckets/{bucket/objects/file1.txt Erfassungsgruppe nicht geschlossen.

Musterabgleich

Muster Ressource Stimmt überein?
/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

Nächste Schritte