Amazon EventBridge 入力変換 - Amazon EventBridge

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

Amazon EventBridge 入力変換

EventBridge情報をルールのターゲットに渡す前にイベントのテキストをカスタマイズできます。コンソールまたは API の入力トランスフォーマーを使用すると、JSON パスを使用する変数を定義して、元のイベントソースの値を参照することができます。変換されたイベントは、元のイベントではなくターゲットに送信されます。ただし、動的パスパラメータは、変換されたイベントではなく、元のイベントを参照する必要があります。最大 100 の変数を定義して、それぞれに入力から値を割り当てることができます。その後、こうした変数は、<variable-name> 形式の入力テンプレートで使用できます。

入力トランスフォーマーの使い方については、「チュートリアル: Eventbridge がイベントターゲットに渡すものを Input Transformer を使用してカスタマイズする」を参照してください。

注記

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

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

  • ダッシュ

  • 下線

  • アルファベットの文字

  • 配列インデックス

  • ワイルドカード (*)

定義済みの変数

JSON パスを定義せずに使用できる、事前定義された変数があります。これらの変数は予約されており、これらの名前で変数を作成することはできません。

  • aws.events.rule-arn— EventBridge ルールの Amazon リソースネーム (ARN)。

  • aws.events.rule-name— EventBridge ルールの名前。

  • aws.events.event.ingestion-time— がイベントを受信した時刻 EventBridge。これは ISO 8601 タイムスタンプです。 EventBridge この変数はによって生成され、上書きすることはできません。

  • aws.events.event — JSON としての元のイベントペイロード (detail フィールドなし)。内容はエスケープされないため、JSON フィールドの値としてのみ使用できます。

  • aws.events.event.json — JSON としての完全な元のイベントペイロード (detail フィールドあり)。内容はエスケープされないため、JSON フィールドの値としてのみ使用できます。

入力変換の例

Amazon EC2 イベントの例を次に示します。

{ "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" } }

コンソールでルールを定義する際には、[Configure input] (入力の設定) の [Input Transformer] (入力トランスフォーマー) オプションを選択します。このオプションでは、2 つのテキストボックスが表示されます。1 つは入力パス用で、もう 1 つは入力テンプレート用です。

[Input Path] (入力パス) は、変数を定義するために使用されます。JSON パスを使用してイベント内の項目を参照し、それらの値を変数に格納します。たとえば、最初のテキストボックスに次のように入力すると、イベント例の値を参照する入力パスを作成できます。角かっことインデックスを使用して、配列から項目を取得することもできます。

注記

EventBridge JSON 出力が有効になるように、実行時に入力トランスフォーマーを置き換えます。このため、JSON パスパラメータを参照する変数は、引用符で囲んでください。JSON オブジェクトまたは配列を参照する変数は、引用符で囲まないでください。

{ "timestamp" : "$.time", "instance" : "$.detail.instance-id", "state" : "$.detail.state", "resource" : "$.resources[0]" }

これにより、<timestamp><instance><state>、および <resource> の 4 つの変数が定義されます。入力テンプレートの作成時にこれらの変数を参照できます。

入力テンプレートは、ターゲットに渡す情報のテンプレートです。文字列または JSON をターゲットに渡すテンプレートを作成できます。上のイベントと入力パスを使用した以下の入力テンプレートの例では、イベントを出力例に変換してからターゲットにルーティングしています。

説明 テンプレート 出力
単純な文字列
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

エスケープされた引用符を含む文字列

"instance \"<instance>\" is in <state>"
"instance \"i-0123456789\" is in RUNNING"

これはコンソールでの動作であることに注意してください。 EventBridge AWS CLI はスラッシュ文字をエスケープし、結果は "instance "i-0123456789" is in RUNNING" です。

単純な JSON

{ "instance" : <instance>, "state": <state> }
{ "instance" : "i-0123456789", "state": "RUNNING" }

文字列と変数を含む JSON

{ "instance" : <instance>, "state": "<state>", "instanceStatus": "instance \"<instance>\" is in <state>" }
{ "instance" : "i-0123456789", "state": "RUNNING", "instanceStatus": "instance \"i-0123456789\" is in RUNNING" }

変数と静的情報が混在した JSON

{ "instance" : <instance>, "state": [ 9, <state>, true ], "Transformed" : "Yes" }
{ "instance" : "i-0123456789", "state": [ 9, "RUNNING", true ], "Transformed" : "Yes" }

JSON に予約変数を含める

{ "instance" : <instance>, "state": <state>, "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }
{ "instance" : "i-0123456789", "state": "RUNNING", "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }

文字列に予約変数を含める

"<aws.events.rule-name> triggered"
"example triggered"

Amazon CloudWatch ロググループ

{ "timestamp" : <timestamp>, "message": "instance \"<instance>\" is in <state>" }
{ "timestamp" : 2015-11-11T21:29:54Z, "message": "instance "i-0123456789" is in RUNNING }

API を使用して入力を変換する EventBridge

EventBridge API を使用して入力を変換する方法については、「Input Transformer を使用してイベントからデータを抽出し、そのデータをターゲットに入力する」を参照してください。

を使用して入力を変換する AWS CloudFormation

AWS CloudFormation を使用して入力を変換する方法については、を参照してくださいAWS::Events::Rule InputTransformer

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

EventBridgeで入力を変換する際によくある問題は次のとおりです。

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

  • テンプレートの JSON パスを作成する場合、検証は行われません。

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

  • aws.events.event.json のような JSON プロパティは JSON フィールドの値としてのみ使用でき、他の文字列に埋め込んで使用することはできません。

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

  • JSON パスが JSON オブジェクトまたは JSON 配列を参照しているが、変数が文字列で参照されている場合は、 EventBridge 有効な文字列になるように内部引用符をすべて削除します。たとえば、「Detail is<detail>」<detail> を指定した変数では$.detail、 EventBridge オブジェクトから引用符が削除されます。

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

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

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

    { "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }

    正しい引用符で囲まれた有効な JSON が生成されます。

    { "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }
  • (JSON 以外の) テキストを複数行の文字列として出力する場合は、入力テンプレートの各行を二重引用符で囲みます。

    たとえば、Amazon Inspector Finding イベントを次のイベントパターンと照合したとします。

    { "detail": { "severity": ["HIGH"], "status": ["ACTIVE"] }, "detail-type": ["Inspector2 Finding"], "source": ["inspector2"] }

    そして、以下の入力パスを使います。

    { "account": "$.detail.awsAccountId", "ami": "$.detail.resources[0].details.awsEc2Instance.imageId", "arn": "$.detail.findingArn", "description": "$.detail.description", "instance": "$.detail.resources[0].id", "platform": "$.detail.resources[0].details.awsEc2Instance.platform", "region": "$.detail.resources[0].region", "severity": "$.detail.severity", "time": "$.time", "title": "$.detail.title", "type": "$.detail.type" }

    以下の入力テンプレートを使用して、複数行の文字列出力を生成できます。

    "<severity> severity finding <title>" "Description: <description>" "ARN: \"<arn>\"" "Type: <type>" "AWS Account: <account>" "Region: <region>" "EC2 Instance: <instance>" "Platform: <platform>" "AMI: <ami>"