Amazon EventBridge 輸入轉換 - Amazon EventBridge

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EventBridge 輸入轉換

您可以從事件自訂文字,然後再 EventBridge將資訊傳遞至規則 的目標。使用主控台或 中的輸入轉換器API,您可以定義使用JSON路徑來參考原始事件來源中值的變數。轉換後的事件會傳送至目標,而不是原始事件。但是,動態路徑參數必須參照原始事件,而不是轉換的事件。您可以定義多達 100 個變數,從輸入中為每個變數指定一個值。然後,您可以在輸入範本中將這些變數用作 <variable-name>.

如需使用輸入轉換器的教程,請參閱 教程:使用輸入變壓器轉換事件 EventBridge

注意

EventBridge 不支援所有 JSON Path 語法,並在執行階段對其進行評估。支援的語法包括:

  • 點符號 (例如 $.detail)

  • 破折號

  • 底線

  • 英數字元

  • 陣列索引

  • 萬用字元 (*)

預定義變數

有預先定義的變數,您可以在不定義JSON路徑的情況下使用。這些變數會被保留,而且您無法使用這些名稱建立變數。

  • aws.events.rule-arn — EventBridge 規則的 Amazon Resource Name (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" } }

在主控台中定義規則時,請選取設定輸入下的輸入轉換器選項。此選項會顯示兩個文字方塊:一個用於 Input Path (輸入路徑),另一個用於 Input Template (輸入範本)

輸入路徑

輸入路徑係用於定義變數。使用 JSON 路徑來參考事件中的項目,並將這些值儲存在變數中。例如,您可以在第一個文字方塊中輸入下列內容,建立輸入路徑以參照範例事件中的值。您還可以使用括號和索引從陣列中獲取項目。

注意

EventBridge 會在執行階段取代輸入轉換器,以確保有效的JSON輸出。因此,請將引號放在參考JSON路徑參數的變數上,但不要將引號放在參考JSON物件或陣列的變數上。

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

這會定義四個變數,<timestamp><instance><state><resource>。您可以在建立輸入範本時參考這些變數。

注意

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

如需使用 EventBridge API轉換輸入的資訊,請參閱使用輸入轉換器從事件擷取資料,並將該資料輸入目標

使用 轉換輸入 AWS CloudFormation

如需使用 AWS CloudFormation 轉換輸入的資訊,請參閱AWS::Events::Rule InputTransformer

轉換輸入的常見問題

以下是在 中轉換輸入時的一些常見問題 EventBridge:

  • 針對字串,引號是必要的。

  • 為範本建立JSON路徑時,不會進行驗證。

  • 如果您指定變數以符合事件中不存在的JSON路徑,則不會建立該變數,也不會出現在輸出中。

  • JSON 像 這樣的屬性aws.events.event.json只能用作JSON欄位的值,不能在其他字串中內嵌。

  • EventBridge 在填入目標的輸入範本時, 不會逸出由輸入路徑 擷取的值。

  • 如果JSON路徑參考JSON物件或陣列,但在字串中參考變數, 會 EventBridge 移除任何內部引號,以確保有效的字串。例如,對於<detail>指向 的變數$.detail,「Detail is <detail>」將導致從物件 EventBridge 中移除引號。

    因此,如果您想要根據單一JSON路徑變數輸出JSON物件,則必須將物件放置為金鑰。在此範例中,{"detail": <detail>}

  • 代表字串的變數不需要引號。它們是允許的,但在轉換期間 EventBridge 會自動將引號新增至字串變數值,以確保轉換輸出有效JSON。 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 尋找事件與下列事件模式比對:

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