パスパターンについて

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Eventarc では、フィルタリングでパスパターンを適用できます。パスパターン構文を使用すると、イベントを照合する式を定義できます。これにより、作成する Eventarc トリガーの粒度を制御し、特定のイベントをキャプチャして処理できます。たとえば、特定のファイルに対する変更など、単一のイベントに適用されるトリガーを作成できます。また、パターンの範囲を拡張して、より広範囲に適用されるトリガーを作成することもできます。

パスパターンを適用する

トリガーの作成時に、Google Cloud コンソールの [Eventarc] ページを使用するか gcloud コマンドを実行することで、パスパターンを適用してイベントをフィルタリングできます。

たとえば、リソース名またはデータベース インスタンス(単一のインスタンスまたはパス)をフィルタリングするときに、パスパターンを適用できます。

  • リソース名のパスパターンは、Cloud Audit Logs イベントのトリガーを作成するときに、resourceName 値に指定します。リソース名は、監査ログを介して監査対象のリソースを示します。リソース名は、リソース自体の ID と親リソースの ID から構成される識別子を使用して、階層的に編成されます。/projects/_/buckets/bucket-id/objects/object-id のように、これらの ID はすべてスラッシュで区切られています。Eventarc によるフィルタリングでは、これらの識別子の値に基づいてパターンが照合されます。詳細については、リソース名をご覧ください。

  • データベース インスタンスのパスパターンは、Firebase Realtime Database イベントのトリガーを作成するときに、instance または ref 値に指定します。データベース インスタンスは Firebase Realtime Database インスタンスを示します。パスパターンは、データベース インスタンスのインスタンス名に適用できます。また、パスまたはその子でデータの作成、更新、削除が発生したときにイベントを受信するドキュメント パスに適用することもできます。

詳細については、Google Cloud コンソールでトリガーを作成するまたは gcloud CLI を使用してトリガーを作成するをご覧ください。

パスパターンを適用できるかどうかを確認する

プロバイダからのイベントの属性にパスパターンを適用できるかどうかを確認するには、イベント プロバイダの説明を確認します。次に例を示します。

gcloud eventarc providers describe cloudaudit.googleapis.com --location=us-central1

出力は次のようになります。pathPatternSupported 値が true の場合は、パスパターンを適用できることを示しています。

displayName: Cloud Audit Logs
eventTypes:
- description: An audit log is created that matches the trigger's filter criteria.
  filteringAttributes:
  - attribute: methodName
    description: The identifier of the service's operation.
    required: true
  - attribute: resourceName
    description: The complete path to a resource. Used to filter events for a specific
      resource.
    pathPatternSupported: true
  - attribute: serviceName
    description: The identifier of the Google Cloud service.
    required: true
  - attribute: type
    required: true
  type: google.cloud.audit.log.v1.written
name: projects/project-name/locations/us-central1/providers/cloudaudit.googleapis.com

または、次のようなコマンドを実行します。

gcloud eventarc providers describe firebasedatabase.googleapis.com --location=us-central1

出力は次のようになります。

displayName: Firebase Realtime Database
eventTypes:
- description: New data has been created in the database.
  filteringAttributes:
  - attribute: instance
    description: A single database instance.
    pathPatternSupported: true
    required: true
  - attribute: ref
    description: Pattern to match for the database instance.
    pathPatternSupported: true
    required: true
  - attribute: type
    required: true
  type: google.firebase.database.ref.v1.created
[...]

詳細については、gcloud eventarc providers describe をご覧ください。

パスパターンの構文

パスパターンの構文は次のように定義されます。

パスパターンの構文

パターン /? Segment (/Segment)*
セグメント CaptureGroup | Expression
キャプチャ グループ { ID (= Expression)? }
eval Wildcard | MultiSegmentWildcard | NameSegment
NameSegment (Character* Wildcard? Character*)
ID [a-zA-Z0-9_]+
ワイルドカード *
MultiSegmentWildcard **
文字1 [\\w\\s\\t~@#$%&.,?:;+='[]()-]

凡例:

? 0 または 1
* 0 以上。
+ 1 以上
| OR
1 リストにある ASCII 文字のみがサポートされています。

式は、次のいずれかのセグメント タイプに設定できます。空白にすることはできません。

  • * として定義された単一セグメント Wildcard は、パターン内の 0 個以上の文字に一致します。
  • ** として定義された MultiSegmentWildcard は、パターン内の 0 個以上のセグメントに一致します。
  • NameSegment は、0 または 1 つの * と他の文字で構成されます。この組み合わせを使用すると、接頭辞、接尾辞、ファイル拡張子でフィルタリングできます。例: file-*.txt

1 つのパスに、1 つのセグメント ワイルドカードを複数含めることができますが、複数セグメントのワイルドカードは 1 つだけ使用できます。たとえば、パス /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/* バケット内の任意のファイルと一致します。
/projects/_/buckets/bucket-1/objects/*.txt バケット内のすべての TXT ファイルと一致します。
/projects/_/buckets/bucket-1/objects/file-*.txt バケット内で、接頭辞が file- のすべての TXT ファイルと一致します。
/projects/_/buckets/bucket-1/objects/** バケット内のすべてのものと一致します。
/projects/_/buckets/bucket-1/objects/files/* bucket-1 バケットの files ディレクトリ内の任意のファイルと一致します。
/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.*}
同じフィルタの 3 つの表現。すべてのバケットを任意のタイプの file という名前のファイルと一致させます。最初の 2 つの例はバケットをキャプチャし、最後の例はファイル名をキャプチャします。

無効なパターン

パターン 説明
/projects/_/buckets/bucket-1/objects/ 空の式。
/projects//buckets/bucket-1/objects/file1.txt 空の式。
/projects/_/buckets/bucket**/objects/file1.txt 式に含めることができる * は 1 つのみです。
/projects/_/buckets/bucket-1/objects/file-*.* 式に含めることができる * は 1 つのみです。
/projects/**/buckets/** リソースパスには ** を 1 つだけ含めることができます。
/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

次のステップ