如何為 EventBridge 規則建立自訂事件模式?
我想使用 Amazon EventBridge 規則擷取 AWS 服務的某些事件。但是,我無法建立與事件相符的自訂事件模式。如何建立自訂的 EventBridge 事件模式?
解析度
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本。
EventBridge 接受來自 AWS 服務、EventBridge 合作夥伴和自訂事件的事件。本文討論源自 AWS 服務的 JSON 事件。您可以使用事件模式建立 EventBridge 規則,以篩選傳入的事件。如此一來,EventBridge 規則只會比對所需的事件,並將這些事件轉寄至目標。
確定傳入事件的 JSON 格式
有三種方法可確定傳入事件的 JSON 格式:
- 請參閱這份來自 EventBridge 接收到的 AWS 服務範例事件清單。
- EventBridge 提供 EventBridge 沙盒工具,可協助使用者建立和驗證事件模式。例如,如果您對 EC2 執行個體狀態變更事件感興趣,可以執行以下操作:
- 開啟 EventBridge 主控台。
- 從導覽窗格的 Developer resources (開發人員資源) 下,選取 Sandbox (沙盒)。
- 捲動至 Sample event (範例事件) 區段,然後選取 AWS events (AWS 事件)。
- 從 Sample events (範例事件) 功能表中,選取 EC2 Instance State-change Notification (EC2 執行個體狀態變更通知)。這會將第一個範例事件填入視窗中。對於指定的事件類型,可能有多個範例可用。
- 使用與特定 AWS 服務的所有事件相符的簡單事件模式建立 EventBridge 規則。例如,此事件模式與所有 Amazon Elastic Compute Cloud (Amazon EC2) 事件相符:
{ "source": [ "aws.ec2" ] }
**注意:**事件模式中不允許使用萬用字元和空白事件。
接下來,將 SNS 或 CloudWatch Log Group (CloudWatch 日誌群組) 目標與擷取傳入事件的規則建立關聯。目標必須將 Configure target input (設定目標輸入) 選項設定為 Matched events (相符事件),才能正確接收服務發出的 JSON。
以與傳入事件相同的 JSON 格式建立事件模式
以下規則適用於建立有效的相符事件模式:
- 您未在事件模式中指定的所有欄位皆會自動比對。例如,如果事件模式中未指定 Detail (詳細資訊),則事件模式會將每個事件與任何詳細資訊比對。
- 若要比對 JSON 結構中下一級的欄位,請使用大括號 { }。如果您在檢視較大的事件結構,JSON 檢視器可能會有所幫助。
- 要從 JSON 事件比對的字串必須放在方括號 [] 中。您可以在方括號中包含多個值,以便在傳入事件中存在任一值時叫用事件。例如,若要根據 Amazon EC2 或 Amazon DynamoDB 傳送的每個事件叫用事件,請使用以下篩選條件:
{ "source": [ "aws.ec2", "aws.dynamodb" ] }
步驟 1:使用 SNS / CloudWatch 目標取得傳入事件
此範例顯示發出至 EventBridge 的 Route 53 事件。ChangeResourceRecordSets (變更資源記錄集) API 呼叫代表在 Amazon Route 53 託管區域中建立 A 記錄。Amazon Simple Notification Service (Amazon SNS) 主題或 Amazon CloudWatch 日誌群組目標會擷取下列事件:
{ "version": "0", "id": "d857ae5c-cc83-3742-ab88-d825311ee4e9", "detail-type": "AWS API Call via CloudTrail", "source": "aws.route53", "account": "123456789012", "time": "2019-12-05T16:50:53Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAABCDEFGHIJKLMNOPQ:Admin", "arn": "arn:aws:sts::123456789012:assumed-role/Admin", "accountId": "123456789012", "accessKeyId": "ASIAABCDEFGH12345678", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAABCDEFGHIJKLMNOPQ", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2019-12-05T16:28:27Z" } } }, "eventTime": "2019-12-05T16:50:53Z", "eventSource": "route53.amazonaws.com", "eventName": "ChangeResourceRecordSets", "awsRegion": "us-east-1", "sourceIPAddress": "12.34.56.78", "userAgent": "console.amazonaws.com", "requestParameters": { "hostedZoneId": "Z1RP12345WXRQD", "changeBatch": { "changes": [ { "action": "CREATE", "resourceRecordSet": { "type": "A", "tTL": 300, "resourceRecords": [ { "value": "4.4.4.4" } ], "name": "test.example.us." } } ] } }, "responseElements": { "changeInfo": { "status": "PENDING", "id": "/change/C271P4WIKN511J", "submittedAt": "Dec 5, 2019 4:50:53 PM" } }, "additionalEventData": { "Note": "Do not use to reconstruct hosted zone" }, "requestID": "bbbf9847-96cb-45ef-b617-d535b9fe83d8", "eventID": "74e2d2c8-7497-4292-94d0-348272dbc4f7", "eventType": "AwsApiCall", "apiVersion": "2013-04-01" } }
第 2 步:建立相應的 EventPattern (事件模式)
此範例事件模式會篩選多個欄位。例如,eventName (事件名稱)、hostedZoneld (主機名稱)、action (動作) 和 type (類型)。匹配的事件必須包含所有欄位和相應的值。此模式會隔離針對特定託管區域建立的 A 記錄。
{ "source": [ "aws.route53" ], "detail": { "eventSource": [ "route53.amazonaws.com" ], "eventName": [ "ChangeResourceRecordSets" ], "requestParameters": { "hostedZoneId": [ "Z1RP12345WXRQD" ], "changeBatch": { "changes": { "action": [ "CREATE" ], "resourceRecordSet": { "type": [ "A" ] } } } } } }
測試事件模式
使用 EventBridge 主控台進行測試
利用 EventBridge 沙盒:
- 在 Sample event (範例事件) 區段中,選取或輸入範例事件。
- 在 Event pattern (事件模式) 區段下,提供事件模式。您可以透過使用事件模式表單中的功能表建立事件模式,或者透過使用自訂模式 (JSON 編輯器) 輸入自訂事件模式來執行此操作。
- 填入兩個區段之後,請選取 Test pattern (測試模式)以確認事件模式是否符合指定的範例事件。
使用 AWS CLI 進行測試
在 AWS CLI 中,執行 test-event-pattern 命令。若要確認事件模式相符,請確定結果為是。透過執行此操作,您可以識別 AWS 服務傳送的 JSON 事件,並有助於您的自訂事件模式擷取特定事件。
相關資訊
教學:使用 EventBridge 記錄 AWS API 呼叫
Amazon EventBridge – CloudWatch Events 與 EventBridge 之間有什麼差別?(影片)
相關內容
- 已提問 2 個月前lg...
- 已提問 2 個月前lg...
- 已提問 2 年前lg...
- AWS 官方已更新 10 個月前
- AWS 官方已更新 4 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前