本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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至目標。使用先前的事件和輸入路徑,下列輸入範本範例會在將事件路由至目標之前,將事件轉換為範例輸出。
描述 | 範本 | 輸出 |
---|---|---|
簡單字串 |
|
|
具有溢出引號的字串 |
|
請注意,這是 EventBridge 主控台中的行為。 AWS CLI
會溢出斜線字元,結果是 |
簡單 JSON |
|
|
JSON 使用字串和變數 |
|
|
JSON 混合變數和靜態資訊 |
|
|
在 中包含預留變數 JSON |
|
|
在字串中包含保留變數 |
|
|
Amazon CloudWatch 日誌群組 |
|
|
使用 轉換輸入 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>"