翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 をターゲットに渡すテンプレートを作成できます。上のイベントと入力パスを使用した以下の入力テンプレートの例では、イベントを出力例に変換してからターゲットにルーティングしています。
説明 | テンプレート | 出力 |
---|---|---|
単純な文字列 |
|
|
エスケープされた引用符を含む文字列 |
|
これはコンソールでの動作であることに注意してください。 EventBridge AWS CLI
はスラッシュ文字をエスケープし、結果は |
単純な JSON |
|
|
文字列と変数を含む JSON |
|
|
変数と静的情報が混在した JSON |
|
|
JSON に予約変数を含める |
|
|
文字列に予約変数を含める |
|
|
Amazon CloudWatch ロググループ |
|
|
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>"