5.7. 高度なトリガーフィルター
高度なトリガーフィルターを使用すると、より正確なイベントルーティングのための高度なオプションが提供されます。イベントは、完全一致、接頭辞、接尾辞、および CloudEvent 拡張機能によってフィルタリングできます。制御を追加することで、イベントのフローを微調整しやすくなり、関連するイベントのみが特定のアクションをトリガーできるようになります。
高度なトリガーフィルター機能は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
5.7.1. 高度なトリガーフィルターの概要
高度なトリガーフィルター機能により、CloudEvents Subscriptions
API で定義されたフィルター API フィールドと一致する新しい filters
フィールドがトリガーに追加されます。フィルター式を指定できます。各式は各イベントに対して true
または false
として評価されます。
次の例は、高度なフィルターフィールドを使用するトリガーを示しています。
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: my-service-trigger spec: broker: default filters: - cesql: "source LIKE '%commerce%' AND type IN ('order.created', 'order.updated', 'order.canceled')" subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: my-service
filters
フィールドにはフィルター式の配列が含まれ、各評価は true
または false
になります。いずれかの式が false
と評価された場合、イベントはサブスクライバーに送信されません。各フィルター式では、フィルターのタイプと式内で許可される追加プロパティーのセットを決定する特定の方言が使用されます。
5.7.2. サポートされているフィルター方言
方言を使用すると、特定のイベントを対象とする柔軟なフィルター式を定義できます。
高度なトリガーフィルターは、イベントを一致およびフィルター処理するさまざまな方法を提供する次の方言をサポートしています。
-
exact
-
prefix
-
suffix
-
all
-
any
-
not
-
cesql
各方言では、特定の基準に基づいてイベントをフィルタリングする方法が各種提供されており、処理するイベントを正確に選択できるようにします。
5.7.2.1. exact
フィルター方言
exact
方言は、CloudEvent 属性の文字列値が指定された文字列と正確に一致するかどうかを比較してイベントをフィルタリングします。比較では大文字と小文字が区別されます。属性が文字列でない場合、フィルターは指定された値と比較する前に、属性を文字列表現に変換します。
exact
フィルター方言の例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: ... filters: - exact: type: com.github.push
5.7.2.2. prefix
フィルター方言
prefix
方言は、指定された文字列で始まる CloudEvent 属性の文字列値を比較してイベントをフィルタリングします。この比較は、大文字と小文字が区別されます。属性が文字列でない場合、フィルターは指定された値と照合する前に、属性を文字列表現に変換します。
prefix
フィルター方言の例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: ... filters: - prefix: type: com.github.
5.7.2.3. suffix
フィルター方言
suffix
方言は、指定された文字列で終わる CloudEvent 属性の文字列値を比較してイベントをフィルタリングします。この比較では、大文字と小文字が区別されます。属性が文字列でない場合、フィルターは指定された値と照合する前に、属性を文字列表現に変換します。
suffix
フィルター方言の例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: ... filters: - suffix: type: .created
5.7.2.4. all
フィルター方言
all
フィルター方言では、イベントを処理するために、ネストされたすべてのフィルター式が true
と評価される必要があります。ネストされた式のいずれかが false
を返す場合、イベントはサブスクライバーに送信されません。
all
のフィルター方言の例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: ... filters: - all: - exact: type: com.github.push - exact: subject: https://github.com/cloudevents/spec
5.7.2.5. any
フィルター方言
any
フィルター方言では、ネストされたフィルター式の少なくとも 1 つが true
と評価される必要があります。ネストされた式がいずれも true
を返さない場合、イベントはサブスクライバーに送信されません。
any
フィルター方言の例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: ... filters: - any: - exact: type: com.github.push - exact: subject: https://github.com/cloudevents/spec
5.7.2.6. not
フィルター方言
not
フィルター方言では、イベントを処理するには、ネストされたフィルター式が false
と評価される必要があります。ネストされた式が true
と評価された場合、イベントはサブスクライバーに送信されません。
not
フィルター方言の例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: ... filters: - not: exact: type: com.github.push
5.7.2.7. cesql
フィルター方言
CloudEvents SQL 式 (cesql) を使用すると、構造化クエリー言語 (SQL) WHERE
句の構文に依存する複雑な式に対して CloudEvent 属性の値を計算し、一致させることができます。
cesql
フィルター方言は、CloudEvents SQL 式を使用してイベントをフィルターします。提供される CESQL 式は、イベントを処理するには true
と評価される必要があります。
cesql
フィルター方言の例
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: ... filters: - cesql: "source LIKE '%commerce%' AND type IN ('order.created', 'order.updated', 'order.canceled')"
cesql
フィルター方言の構文および機能の詳細は、CloudEvents SQL Expression Language を参照してください。
5.7.3. 既存のフィルターフィールドとの競合
filters
と既存の filter
フィールドを同時に使用できます。新しい new-trigger-filters
機能を有効にし、オブジェクトに filter
と filters
の両方が含まれている場合は、filters
フィールドが上書きされます。この設定により、既存のフィルターのサポートを維持しながら、新しい filters
フィールドをテストできます。新しいフィールドを既存のトリガーオブジェクトに徐々に導入できます。
filters
フィールドをオーバーライドする filter
フィールドの例:
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: my-service-trigger spec: broker: default # Existing filter field. This will be ignored when the new filters field is present. filter: attributes: type: dev.knative.foo.bar myextension: my-extension-value # New filters field. This takes precedence over the old filter field. filters: - cesql: "type = 'dev.knative.foo.bar' AND myextension = 'my-extension-value'" subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: my-service