Entenda os padrões de caminho

O Eventarc permite a aplicação de um padrão de caminho durante a filtragem. Por exemplo, é possível filtrar por nomes de recursos. Um nome de recurso é organizado hierarquicamente usando identificadores compostos pelo ID do recurso em si e pelos IDs de qualquer recurso pai, todos separados por barras, desta forma: /projects/_/buckets/bucket-id/objects/object-id. A filtragem feita pelo Eventarc corresponde a padrões com base nos valores desses identificadores. Para mais informações, consulte Nomes de recursos.

A sintaxe de padrão de caminho do Eventarc permite definir uma expressão que corresponda aos eventos. Isso permite que você controle a granularidade do gatilho do Eventarc que está criando, além de capturar e realizar ações em determinados eventos. Por exemplo, é possível criar um gatilho que se aplique a um único evento, como uma mudança em um arquivo específico, ou ampliar o escopo do padrão e criar um gatilho mais abrangente.

Aplicar um padrão de caminho

É possível aplicar um padrão de caminho para filtrar recursos quando você cria um gatilho usando a página do Eventarc no Console do Cloud ou executando um comando gcloud.

No console, informe o padrão de caminho na caixa de texto Padrão de caminho. Para detalhes, consulte Criar um gatilho com o Console do Google Cloud.

Com o gcloud, use uma sinalização --event-filters-path-pattern="resourceName=VALUE", e não --event-filters="resourceName=VALUE". Exemplo:

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

Veja detalhes em Criar um gatilho para o Cloud Run ou Criar um gatilho para o Cloud Run for Anthos.

Sintaxe do padrão de caminho

A sintaxe do padrão de caminho é definida da seguinte maneira:

Sintaxe do padrão de caminho

Padrão /? Segment (/Segment)*
Segmento CaptureGroup | Expression
CaptureGroup { ID (= Expression)? }
Expressão Wildcard | MultiSegmentWildcard | NameSegment
NameSegment (Character* Wildcard? Character*)
Código [a-zA-Z0-9_]+
Curinga *
MultiSegmentWildcard **
Caractere1 [\\w\\s\\t~@#$%&.,?:;+='[]()-]

Legenda:

? zero ou um
* zero ou mais
+ um ou mais
| OU
1 Somente caracteres ASCII listados são compatíveis.

Expressões

Uma expressão pode ser um dos seguintes tipos de segmento e não pode estar em branco:

  • Um único segmento Wildcard definido como * corresponde a zero ou mais caracteres no padrão.
  • Uma MultiSegmentWildcard definida como ** corresponde a zero ou mais segmentos no padrão.
  • Uma NameSegment consiste em zero ou um * e outros caracteres. Essa combinação permite filtrar por prefixo, sufixo ou extensão de arquivo: por exemplo, file-*.txt.

Um caminho pode conter muitos caracteres curinga de segmento único, mas apenas um caractere curinga múltiplo. Por exemplo, o seguinte caminho é inválido: /projects/**/buckets/**.

Regionalidade do recurso

Os nomes dos recursos podem conter identificadores de local. Exemplo:

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

No entanto, a correspondência do padrão de caminho é restrita pela regionalidade dos recursos. Por exemplo, para gatilhos de registros de auditoria do Cloud, os caracteres curinga de local correspondem apenas aos acionadores da região dos registros de auditoria do Cloud ou aos gatilhos globais.

Grupos de captura

Um CaptureGroup permite capturar o conteúdo de uma expressão. Para fazer isso, atribua o valor a um nome de variável entre chaves: por exemplo, buckets/{path=**}/files/{filename=file-*.txt}; Um caractere curinga de segmento único pode omitir =* em um grupo de captura; por exemplo, /projects/_/buckets/{bucket}/objects/file.*

Examples

Os exemplos a seguir demonstram como as permissões e restrições de uso da sintaxe.

Padrões válidos

Padrão Descrição
/projects/_/buckets/bucket-1/objects/file1.txt Nome específico do recurso.
/projects/_/buckets/bucket-1/objects/* Corresponde a qualquer arquivo no diretório objects.
/projects/_/buckets/bucket-1/objects/*.txt Todos os arquivos TXT no diretório objects são correspondentes.
/projects/_/buckets/bucket-1/objects/file-*.txt Retorna todos os arquivos TXT com o prefixo file- no diretório objects.
/projects/_/**/file-*.txt Corresponde a qualquer arquivo TXT com o prefixo file- para todos os buckets.
/projects/_/buckets/bucket-*/objects/file-*.txt Corresponde todos os arquivos TXT com o prefixo file- para qualquer bucket com o prefixo bucket-.
/projects/_/buckets/{bucket}/objects/file.*
/projects/_/buckets/{bucket=*}/objects/file.*
/projects/_/buckets/*/objects/{filename=file.*}
Três representações diferentes do mesmo filtro. Corresponde a qualquer bucket com um arquivo chamado file de qualquer tipo. Os dois primeiros exemplos também capturam o bucket, e o último captura o nome do arquivo.

Padrões inválidos

Padrão Descrição
/projects/_/buckets/bucket-1/objects/ Expressão vazia.
/projects//buckets/bucket-1/objects/file1.txt Expressão vazia.
/projects/_/buckets/bucket**/objects/file1.txt A expressão pode conter apenas um *.
/projects/_/buckets/bucket-1/objects/file-*.* A expressão pode conter apenas um *.
/projects/**/buckets/** O caminho do recurso pode conter apenas um **.
/projects/_/buckets/{=*}/objects/file1.txt ID ausente no segmento.
/projects/_/buckets/{bucket=}/objects/file1.txt Expressão vazia dentro de um grupo de captura.
/projects/_/buckets/{bucket/objects/file1.txt O grupo de captura não foi fechado.

Correspondência de padrões

Padrão Recurso Corresponde?
/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

A seguir