Comprendre les formats de chemin d'accès

Eventarc permet d'appliquer un format de chemin d'accès lors du filtrage. Par exemple, vous pouvez filtrer les noms de ressources. Un nom de ressource est organisé hiérarchiquement à l'aide des identifiants composés de l'ID de la ressource elle-même et des ID de toutes les ressources parentes, tous séparés par des barres obliques, comme ceci : /projects/_/buckets/bucket-id/objects/object-id. Le filtrage effectué par Eventarc correspond aux modèles en fonction des valeurs de ces identifiants. Pour en savoir plus, consultez la section Noms de ressources.

La syntaxe de modèle de chemin d'événement Eventarc vous permet de définir une expression qui correspond à des événements. Cela vous permet de contrôler la précision du déclencheur Eventarc que vous créez et de capturer et d'agir sur certains événements. Par exemple, vous pouvez créer un déclencheur qui s'applique à un seul événement, tel qu'une modification apportée à un fichier spécifique, ou étendre le champ d'application du modèle et créer un déclencheur plus large.

Appliquer un format de chemin d'accès

Vous pouvez appliquer un modèle de chemin d'accès pour filtrer les ressources lorsque vous créez un déclencheur à l'aide de la page Eventarc de la console ou en exécutant une commande gcloud.

Dans la console, indiquez le format de chemin d'accès dans la zone de texte Chemin d'accès. Pour en savoir plus, consultez la section Créer un déclencheur via Google Cloud Console.

À l'aide de gcloud, utilisez une option --event-filters-path-pattern="resourceName=VALUE" au lieu d'une option --event-filters="resourceName=VALUE". Exemple :

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

Pour en savoir plus, consultez les sections Créer un déclencheur pour Cloud Run ou Créer un déclencheur pour Cloud Run pour Anthos.

Syntaxe du format de chemin d'accès

La syntaxe du format de chemin d'accès est définie comme suit :

Syntaxe du format de chemin d'accès

Format /? Segment (/Segment)*
Segment CaptureGroup | Expression
CaptureGroup { ID (= Expression)? }
Expression Wildcard | MultiSegmentWildcard | NameSegment
NameSegment (Character* Wildcard? Character*)
Identifiant [a-zA-Z0-9_]+
Caractère générique *
MultiSegmentWildcard **
Character1 [\\w\\s\\t~@#$%&.,?:;+='[]()-]

Légende :

? zéro ou un
* zéro ou plus
+ un ou plusieurs
| OU
1 Seuls les caractères ASCII répertoriés sont acceptés.

Expressions

Une expression peut correspondre à l'un des types de segments suivants et ne peut pas être vide :

  • Un segment unique Wildcard défini sur * correspond à zéro ou plusieurs caractères du modèle.
  • Une valeur MultiSegmentWildcard définie sur ** correspond à zéro ou plusieurs segments du modèle.
  • Une chaîne NameSegment est constituée de zéro ou un *, et d'autres caractères. Cette combinaison vous permet de filtrer par préfixe, suffixe ou extension de fichier. Exemple : file-*.txt.

Notez qu'un chemin peut contenir de nombreux caractères génériques à un seul segment, mais un seul caractère générique. Par exemple, le chemin d'accès suivant n'est pas valide : /projects/**/buckets/**.

Régionalité des ressources

Les noms des ressources peuvent contenir des identifiants d'emplacement. Exemple :

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

Cependant, la correspondance des formats de chemin est limitée par la régionalisation des ressources. Par exemple, pour les déclencheurs Cloud Audit Logs, les caractères génériques d'emplacement ne correspondent qu'aux déclencheurs de la région Cloud Audit Logs ou aux déclencheurs globaux.

Groupes de capture

Un CaptureGroup vous permet de capturer le contenu d'une expression. Pour ce faire, affectez la valeur à un nom de variable entre accolades. Par exemple : buckets/{path=**}/files/{filename=file-*.txt}. Un seul caractère générique de segment peut omettre =* dans un groupe de capture. Par exemple : /projects/_/buckets/{bucket}/objects/file.*

Examples

Les exemples suivants montrent comment utiliser et ne pas utiliser la syntaxe.

Formats valides

Format Description
/projects/_/buckets/bucket-1/objects/file1.txt Nom de ressource spécifique.
/projects/_/buckets/bucket-1/objects/* Correspond à n'importe quel fichier du répertoire objects.
/projects/_/buckets/bucket-1/objects/*.txt Renvoie tous les fichiers TXT du répertoire objects.
/projects/_/buckets/bucket-1/objects/file-*.txt Renvoie tous les fichiers TXT comportant le préfixe file- dans le répertoire objects.
/projects/_/**/file-*.txt Correspond à n'importe quel fichier TXT avec le préfixe file- pour tous les buckets.
/projects/_/buckets/bucket-*/objects/file-*.txt Renvoie tous les fichiers TXT comportant le préfixe file- pour tout bucket portant le préfixe bucket-.
/projects/_/buckets/{bucket}/objects/file.*
/projects/_/buckets/{bucket=*}/objects/file.*
/projects/_/buckets/*/objects/{filename=file.*}
Trois représentations différentes du même filtre. Correspond à n'importe quel bucket avec un fichier nommé file de n'importe quel type. Les deux premiers exemples capturent également le bucket et le dernier exemple capture le nom du fichier.

Formats non valides

Format Description
/projects/_/buckets/bucket-1/objects/ Expression vide.
/projects//buckets/bucket-1/objects/file1.txt Expression vide.
/projects/_/buckets/bucket**/objects/file1.txt L'expression ne peut contenir qu'un seul *.
/projects/_/buckets/bucket-1/objects/file-*.* L'expression ne peut contenir qu'un seul *.
/projects/**/buckets/** Le chemin d'accès à la ressource ne peut contenir qu'un seul **.
/projects/_/buckets/{=*}/objects/file1.txt ID manquant dans le segment.
/projects/_/buckets/{bucket=}/objects/file1.txt Expression vide dans un groupe de capture.
/projects/_/buckets/{bucket/objects/file1.txt Le groupe de capture n'est pas fermé.

Correspondance de modèles

Format Resource Correspond ?
/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

Étape suivante