Amazon EventBridge Pipes 入力変換 - Amazon EventBridge

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EventBridge Pipes 入力変換

Amazon EventBridge Pipes は、エンリッチメントとターゲットにデータを渡すときに、オプションの入力トランスフォーマーをサポートします。入力トランスフォーマーを使用して、エンリッチメントまたはターゲットサービスのニーズに対応するためにJSONイベント入力ペイロードを再形成できます。Amazon API Gateway とAPI送信先の場合、入力イベントを のRESTfulモデルに形成する方法は次のとおりですAPI。Input Transformer は InputTemplate パラメータとしてモデル化されます。フリーテキスト、イベントペイロードへのJSONパス、またはイベントペイロードへのインラインJSONパスを含むJSONオブジェクトを使用できます。エンリッチメントの場合、イベントペイロードはソースから送信されます。ターゲットの場合、イベントペイロードはエンリッチメントから返されるものです(パイプ上に設定されている場合)。イベントペイロード内のサービス固有のデータに加えて、InputTemplate予約変数を使用してパイプのデータを参照できます。

配列内の項目にアクセスするには、角括弧表記を使用します。

注記

EventBridge は、すべての Path JSON 構文をサポートしているわけではなく、実行時に評価します。サポートされている構文には以下が含まれます。

  • ドット表記 ($.detail など)

  • ダッシュ

  • 下線

  • アルファベットの文字

  • 配列インデックス

  • ワイルドカード (*)

Amazon SQSイベントペイロードを参照するInputTemplateパラメータの例を次に示します。

静的文字列

InputTemplate: "Hello, sender"

JSON パス

InputTemplate: <$.attributes.SenderId>

動的文字列

InputTemplate: "Hello, <$.attributes.SenderId>"

静的 JSON

InputTemplate: > { "key1": "value1", "key2": "value2", "key3": "value3", }

動的 JSON

InputTemplate: > { "key1": "value1" "key2": <$.body.key>, "d": <aws.pipes.event.ingestion-time> }

角括弧表記を使用して配列内の項目にアクセスします。

InputTemplate: > { "key1": "value1" "key2": <$.body.Records[3]>, "d": <aws.pipes.event.ingestion-time> }
注記

EventBridge は、有効なJSON出力を確保するために、実行時に入力トランスフォーマーを置き換えます。このため、JSONパスパラメータを参照する変数には引用符を付けますが、JSONオブジェクトや配列を参照する変数には引用符を付けません。

予約変数

入力テンプレートは次の予約変数を使用できます。

  • <aws.pipes.pipe-arn> – パイプの Amazon リソースネーム (ARN)。

  • <aws.pipes.pipe-name>— パイプの名前。

  • <aws.pipes.source-arn> – パイプARNのイベントソースの 。

  • <aws.pipes.enrichment-arn> – パイプARNのエンリッチメントの 。

  • <aws.pipes.target-arn> – パイプARNのターゲットの 。

  • <aws.pipes.event.ingestion-time>— Input Transformer によってイベントが受信された時間。これは ISO 8601 タイムスタンプです。この時間は、エンリッチメントがイベントの処理をいつ完了したかによって、エンリッチメント Input Transformer とターゲット Input Transformer で異なります。

  • <aws.pipes.event> — Input Transformerが受信したイベント。

    エンリッチメント Input Transformer の場合、これはソースからのイベントです。これには、ソースからの元のペイロードに加え、追加のサービス固有のメタデータが含まれます。このサービスに固有の例については、「Amazon EventBridge Pipes ソース」のトピックを参照してください。

    ターゲット Input Transformer の場合、これはエンリッチメントによって返されるイベントです (設定されている場合)。追加のメタデータはありません。そのため、エンリッチメントで返されたペイロードは 以外の場合がありますJSON。パイプにエンリッチメントが設定されていない場合、これはメタデータを含むソースからのイベントです。

  • <aws.pipes.event.json> – と同じですがaws.pipes.event、変数には、ソースから、またはエンリッチメントによって返される元のペイロードが である場合にのみ値がありますJSON。パイプに Amazon フィールドや Kinesis などのエンコードされたSQSbodyフィールドがある場合data、それらのフィールドはデコードされ、有効な になりますJSON。エスケープされないため、変数はJSONフィールドの値としてのみ使用できます。詳細については、「暗示的な本文データ解析」を参照してください。

入力変換の例

以下は、サンプルEC2イベント として使用できる Amazon イベントの例です。

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111" ], "detail": { "instance-id": "i-0123456789", "state": "RUNNING" } }

トランスフォーマー JSONとして以下を使用します。

{ "instance" : <$.detail.instance-id>, "state": <$.detail.state>, "pipeArn" : <aws.pipes.pipe-arn>, "pipeName" : <aws.pipes.pipe-name>, "originalEvent" : <aws.pipes.event.json> }

次はその出力です。

{ "instance" : "i-0123456789", "state": "RUNNING", "pipeArn" : "arn:aws:pipe:us-east-1:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }

暗示的な本文データ解析

受信ペイロードの次のフィールドは、Amazon SQS body オブジェクトなどの JSONエスケープ、または Kinesis data オブジェクトなどの base64 エンコードできます。フィルタリングと入力変換の両方で、 はこれらのフィールドを有効な EventBridge に変換JSONし、サブ値を直接参照できるようにします。例えば、<$.data.someKey> は Kinesis 場合です。

追加のメタデータなしでターゲットが元のペイロードを受け取れるようにするには、ソース固有のこの本文データを含む Input Transformer を使用します。例えば、Amazon <$.body>の場合は SQS、Kinesis <$.data>の場合は です。元のペイロードが有効なJSON文字列 (例: {"key": "value"}) である場合、ソース固有の本文データで入力トランスフォーマーを使用すると、元のソースペイロード内の引用符が削除されます。例えば、{"key": "value"} は、ターゲットに配信されたとき "{key: value}" になります。ターゲットに有効なJSONペイロード ( EventBridge Lambda や Step Functions など) が必要な場合は、配信に失敗します。無効な を生成せずにターゲットに元のソースデータを受信させるにはJSON、ソースボディデータ入力トランスフォーマーを でラップしますJSON。例えば、{"data": <$.data>} と指定します。

また、暗示的な本文解析を使用すると、ほとんどのパイプターゲットまたはエンリッチメントパラメータの値を動的に入力することができます。詳細については、「動的パスパラメータ」を参照してください

注記

元のペイロードが有効な場合JSON、このフィールドにはエスケープされていない、base64 エンコードされていない が含まれますJSON。ただし、ペイロードが有効でない場合はJSON、Amazon を除く以下のフィールドの EventBridge base64 エンコードSQS。

  • Active MQdata

  • Kinesisdata

  • Amazon MSKkeyおよび value

  • Rabbit MQdata

  • セルフマネージド Apache Kafkakey および value

  • Amazon SQSbody

入力変換に関する一般的な問題

EventBridge パイプの入力を変換する際の一般的な問題は次のとおりです。

  • 文字列の場合は、引用符が必要です。

  • テンプレートのJSONパスを作成するときの検証はありません。

  • イベントに存在しないJSONパスに一致する変数を指定すると、その変数は作成されず、出力に表示されません。

  • JSON などのプロパティは、他の文字列ではインラインではなく、JSONフィールドの値としてaws.pipes.event.jsonのみ使用できます。

  • EventBridge は、ターゲットの入力テンプレートを入力するときに、入力パス によって抽出された値をエスケープしません。

  • JSON パスがJSONオブジェクトまたは配列を参照しているが、変数が文字列で参照されている場合、 は有効な文字列を確保するために内部引用符 EventBridge を削除します。例えば、「Body が <$.body>」 の場合、オブジェクトから引用符 EventBridge が削除されます。

    したがって、単一のJSONパス変数に基づいてJSONオブジェクトを出力する場合は、キーとして配置する必要があります。この例では、{"body": <$.body>} です。

  • 文字列を表す変数に引用符は必要ありません。これらは許可されますが、 EventBridge Pipes は変換中に文字列変数値に引用符を自動的に追加し、変換出力が有効な であることを確認しますJSON。 EventBridge Pipes はJSONオブジェクトまたは配列を表す変数に引用符を追加しません。JSON オブジェクトまたは配列を表す変数の引用符を追加しないでください。

    例えば、次の入力テンプレートには、文字列とJSONオブジェクトの両方を表す変数が含まれています。

    { "pipeArn" : <aws.pipes.pipe-arn>, "pipeName" : <aws.pipes.pipe-name>, "originalEvent" : <aws.pipes.event.json> }

    適切な引用符JSONで有効になります。

    { "pipeArn" : "arn:aws:events:us-east-2:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Lambda または Step Functions のエンリッチメントまたはターゲットの場合、バッチサイズが 1 であっても、バッチはJSON配列としてターゲットに配信されます。ただし、入力トランスフォーマーはJSON配列全体ではなく、配列内の個々のレコードに適用されます。詳細については、「Amazon EventBridge Pipes のバッチ処理と同時実行」を参照してください。