Amazon EventBridge 入力変換 - Amazon EventBridge

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

Amazon EventBridge 入力変換

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

入力トランスフォーマーの使い方については、「チュートリアル: 入力トランスフォーマーを使用して でイベントを変換する EventBridge」を参照してください。

注記

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

  • ドット表記 ($.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 つの変数が定義されます。入力テンプレートの作成時にこれらの変数を参照できます。

注記

Amazon CloudWatch Logs とSSMターゲットは、入力トランスフォーマーInputPathでの Inputと の使用をサポートしていません。

入力テンプレート

入力テンプレートは、ターゲットに渡す情報のテンプレートです。文字列またはターゲット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 }

を使用した入力の変換 EventBridge API

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

を使用した入力の変換 AWS CloudFormation

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

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

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

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

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

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

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

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

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

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

  • 文字列を表す変数に引用符は必要ありません。これらは許可されますが、変換中に文字列変数値に引用符 EventBridge を自動的に追加して、変換出力が有効なことを確認しますJSON。 JSON オブジェクトまたは配列を表す変数に引用符は追加 EventBridge されません。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 検出結果イベントを次のイベントパターンと照合する場合です。

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