如何為 EventBridge 規則建立自訂事件模式?
我想使用 Amazon EventBridge 規則擷取 AWS 服務事件。但是,我無法建立與事件相符的自訂事件模式。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,那麼請參閱 AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
EventBridge 接受來自 AWS Services、EventBridge 合作夥伴的事件和自訂事件的事件。本文討論來自 AWS 服務的 JSON 事件。您可以使用事件模式建立 EventBridge 規則,以篩選傳入的事件。如此一來,EventBridge 規則只會配對想要的事件,並將這些事件轉寄到目標。
判斷傳入事件的 JSON 格式
有三種方法可用於判斷傳入事件的 JSON 格式:
請參閱此來自 EventBridge 接收的 AWS 服務範例事件清單。
EventBridge 提供 EventBridge 沙盒工具,可協助使用者建立和驗證事件模式。例如,若要建立 ** EC2 執行個體狀態變更**事件,請完成下列步驟:
- 開啟 EventBridge 主控台。
- 在導覽窗格中,展開 Developer resources (開發人員資源),然後選取 Sandbox (沙箱)。
- 在 Event pattern (事件模式) 索引標籤下的 Sample event (範例事件) 區段中,選取 AWS events (AWS 事件)。
- 在 Sample events (範例事件) 欄位中,選取 EC2 Instance State-change Notification (EC2 執行個體狀態變更通知)。這會將第一個範例事件填入視窗。針對指定的事件類型,可能有多個可用範本。
- 在 Creation method (建立方法) 區段中,選擇測試事件模式。
- 使用與指定 AWS 服務所有事件相符的簡單事件模式建立 EventBridge 規則。例如,此事件模式與所有 Amazon Elastic Compute Cloud (Amazon EC2) 事件相符:
**注意:**事件模式中不允許空事件。<{ "source": [ "aws.ec2" ] }
接下來,將 ** SNS ** 或 CloudWatch 日誌群組目標與規則相關聯,以擷取輸入事件。目標必須將 Configure target input (設定目標輸入) 選項設定為 Matched events (相符的事件),以正確接收服務發出的 JSON。
簡麗與傳入事件相同的 JSON 格式事件模式
先決條件:
- 您未在事件模式中指定的任何欄位都會自動配對。例如,如果事件模式中未指定 Detail (詳細資料),則事件模式會將每個事件與任何詳細資料配對。
- 若要配對 JSON 結構中低一層的欄位,請使用**大括弧 {} **。如果您正在查看更大的事件結構,JSON 檢視器非常實用。
- 要從 JSON 事件配對的字串必須在**方括號中\ [] **。您可以在方括號中包含多個值,當傳入事件中存在其中一個值時,事件便會調用。例如,若要根據 Amazon EC2 或 Amazon DynamoDB 傳送的每個事件來調用事件,請使用下列命令:
{ "source": [ "aws.ec2", "aws.dynamodb" ] }
使用 SNS 或 CloudWatch 目標來獲取傳入的事件
此範例顯示發出至 EventBridge 的 Route 53 (路由 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" } }
建立對應的事件模式
此範例事件模式會對數個欄位進行篩選。例如,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 (事件模式) 區段下,提供事件模式。您可以使用 Event pattern (事件模式) 表單中的功能表來建立事件模式。或者,您可以使用 Custom patterns (JSON editor) (自訂事件模式編輯器) 輸入自訂事件模式。
- 填入兩個區段後,選取 Test pattern (測試模式) 以確認事件模式是否與指定的範例事件相符。
使用 AWS CLI 測試事件模式
在 AWS CLI 中,執行測試事件模式命令。若要確認事件模式是否相符,請確定結果為 true。您可以識別 AWS 服務傳送的 JSON 事件,並協助自訂事件模式擷取特定事件。
相關資訊
教學課程: 建立使用 CloudTrail 對 AWS API 呼叫做出回應的 EventBridge 規則
Amazon EventBridge - CloudWatch Event 和 EventBridge 之間的差異 (YouTube 網站)
- 語言
- 中文 (繁體)

相關內容
- 已提問 1 年前
- 已提問 2 年前
