使用 PutEvents 添加事件
注意Amazon EventBridge 是管理事件的首选方式。CloudWatch Events 和 EventBridge 是相同的底层服务和 API,但 EventBridge 提供了更多功能。您在 CloudWatch 或 EventBridge 中所作的更改将显示在每个控制台中。有关更多信息,请参阅 Amazon EventBridge。 |
PutEvents
操作在一次请求中将多个事件发送到 CloudWatch Events。有关更多信息,请参阅 Amazon CloudWatch Events API 引用中的PutEvents 和 Amazon CLI 命令引用中的 put-events。
每个 PutEvents
请求可支持有限数目的条目。有关更多信息,请参阅CloudWatch Events 配额。PutEvents
操作将尝试按请求的自然顺序处理所有条目。在调用 PutEvents
后,每个事件均将获得由 CloudWatch Events 分配的唯一 ID。
以下示例 Java 代码将两个相同的事件发送到 CloudWatch Events:
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); PutEventsRequest request = new PutEventsRequest() .withEntries(requestEntry, requestEntry); PutEventsResult result = awsEventsClient.putEvents(request); for (PutEventsResultEntry resultEntry : result.getEntries()) { if (resultEntry.getEventId() != null) { System.out.println("Event Id: " + resultEntry.getEventId()); } else { System.out.println("Injection failed with Error Code: " + resultEntry.getErrorCode()); } }
PutEvents
结果包含响应条目的数组。响应数组中的每个条目按自然顺序(从请求和响应的顶部到底部)直接与请求数组中的一个条目关联。响应 Entries
数组包含的条目数量始终与请求数组相同。
处理使用 PutEvents 时出现的失败情况
默认情况下,请求内的单个条目的失败不会中止对请求中后续条目的处理。这意味着,响应条目数组包含处理成功和不成功的条目。您必须删除处理不成功的条目并在后续调用中包括它们。
成功的结果条目包含 ID 值,不成功的结果条目包含 ErrorCode
和 ErrorMessage
值。ErrorCode
参数反映错误的类型。ErrorMessage
提供有关错误的更多详细信息。以下示例具有针对 PutEvents
请求的三个结果条目。第二个条目失败,并且反映在响应中。
示例:PutEvents 响应语法
{ "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] }
处理不成功的条目可包含在后续 PutEvents
请求中。首先,查看 FailedRecordCount
中的 PutEventsResult
参数以确认请求中是否存在失败的记录。如果存在,则应将每个具有 Entry
(不为空) 的 ErrorCode
添加到后续请求中。有关此类处理程序的示例,请参阅以下代码。
示例:PutEvents 失败处理程序
PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); List<PutEventsRequestEntry> putEventsRequestEntryList = new ArrayList<>(); for (int i = 0; i < 3; i++) { putEventsRequestEntryList.add(requestEntry); } PutEventsRequest putEventsRequest = new PutEventsRequest(); putEventsRequest.withEntries(putEventsRequestEntryList); PutEventsResult putEventsResult = awsEventsClient.putEvents(putEventsRequest); while (putEventsResult.getFailedEntryCount() > 0) { final List<PutEventsRequestEntry> failedEntriesList = new ArrayList<>(); final List<PutEventsResultEntry> PutEventsResultEntryList = putEventsResult.getEntries(); for (int i = 0; i < PutEventsResultEntryList.size(); i++) { final PutEventsRequestEntry putEventsRequestEntry = putEventsRequestEntryList.get(i); final PutEventsResultEntry putEventsResultEntry = PutEventsResultEntryList.get(i); if (putEventsResultEntry.getErrorCode() != null) { failedEntriesList.add(putEventsRequestEntry); } } putEventsRequestEntryList = failedEntriesList; putEventsRequest.setEntries(putEventsRequestEntryList); putEventsResult = awsEventsClient.putEvents(putEventsRequest); }
使用 Amazon CLI 发送事件
可使用 Amazon CLI 发送自定义事件。以下示例将一个自定义事件放入 CloudWatch Events 中:
aws events put-events \ --entries '[{"Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": ["resource1", "resource2"], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"}]'
您还可以创建文件,例如 entries.json,如下所示:
[ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ]
可使用 Amazon CLI 读取该文件中的条目并发送事件。在命令提示符下,输入:
aws events put-events --entries file://
entries.json