14.2. イベント変換の一般的な使用例
EventTransform を使用すると、システム要件に応じてさまざまな方法でイベントを操作および変更できます。最も一般的な使用例は次のとおりです。
14.2.1. フィールド抽出 リンクのコピーリンクがクリップボードにコピーされました!
イベントペイロードから特定のフィールドを抽出し、CloudEvent 属性として公開できます。これにより、ダウンストリームのイベントのフィルタリングとルーティングが容易になります。
イベントペイロードからユーザー ID を抽出する例
apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
name: extract-user-id
spec:
jsonata:
expression: |
{
"specversion": "1.0",
"id": id,
"type": "user.extracted",
"source": "transform.user-extractor",
"time": time,
"userid": data.user.id,
"data": $
}
14.2.2. イベント形式の変換 リンクのコピーリンクがクリップボードにコピーされました!
さまざまなコンシューマーシステムとの互換性を保つために、イベントの構造を別の形式に変換できます。
注文イベントをお客様中心の形式に変換する例
apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
name: format-converter
spec:
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: destination-service
jsonata:
expression: |
{
"specversion": "1.0",
"id": id,
"type": "order.converted",
"source": "transform.format-converter",
"time": time,
"data": {
"orderId": data.id,
"customer": {
"name": data.user.fullName,
"email": data.user.email
},
"items": data.items
}
}
14.2.3. イベントの補完 リンクのコピーリンクがクリップボードにコピーされました!
元のプロデューサーを変更することなく、環境やリージョンなどの固定メタデータまたは動的メタデータをイベントに追加できます。
イベントに環境とリージョンのメタデータを追加する例
apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
name: event-enricher
spec:
jsonata:
expression: |
{
"specversion": "1.0",
"id": id, /* Add the "id", "type", "source", and "time" attributes based on the input JSON object fields */
"type": type,
"source": source,
"time": time,
"environment": "production", /* Add fixed environment and region attributes to the event metadata */
"region": "us-west-1",
"data": $ /* Add the event transform input JSON body as CloudEvent "data" field */
}
14.2.4. イベント応答返信の変換 リンクのコピーリンクがクリップボードにコピーされました!
シンクに送信されたリクエストだけでなく、シンクから受信したレスポンスも変換できるため、エンドツーエンドのイベントシェーピングが可能になります。
要求メッセージと応答メッセージの両方を変換する例
apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:apiVersion: eventing.knative.dev/v1alpha1
kind: EventTransform
metadata:
name: request-reply-transform
spec:
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: processor-service
jsonata:
expression: |
# Request transformation
{
"specversion": "1.0",
"id": id,
"type": "request.transformed",
"source": source,
"time": time,
"data": data
}
reply:
jsonata:
expression: |
# Reply transformation
{
"specversion": "1.0",
"id": id,
"type": "reply.transformed",
"source": "transform.reply-processor",
"time": time,
"data": data
}