将事件发送到 CloudWatch
CloudWatch Events 提供几乎实时的系统事件流,这些事件描述 AWS 资源中对 Amazon EC2 实例、Lambda 函数、Kinesis 流、Amazon ECS 任务、Step Functions 状态机、Amazon SNS 主题、Amazon SQS 队列或内置目标的更改。通过使用简单的规则,您可以匹配事件并将事件路由到一个或多个目标函数或流。
注意
这些代码片段假定您了解适用于 C++ 的 AWS SDK 使用入门中的资料,并且已使用提醒 AWS 凭证中的信息配置了默认 AWS 凭证。
添加事件
要添加自定义 CloudWatch 事件,请使用包含一个或多个 PutEventsRequestEntry 对象(提供每个事件的详细信息)的 PutEventsRequest 对象调用 CloudWatchEventsClient 的 PutEvents 函数。您可以为条目指定多个参数,例如事件的来源和类型、与事件相关联的资源等等。
注意
对于每个 putEvents 调用,您最多可以指定 10 个事件。
包含
#include <aws/core/Aws.h> #include <aws/events/EventBridgeClient.h> #include <aws/events/model/PutEventsRequest.h> #include <aws/events/model/PutEventsResult.h> #include <aws/core/utils/Outcome.h> #include <iostream>
代码
Aws::CloudWatchEvents::EventBridgeClient cwe; Aws::CloudWatchEvents::Model::PutEventsRequestEntry event_entry; event_entry.SetDetail(MakeDetails(event_key, event_value)); event_entry.SetDetailType("sampleSubmitted"); event_entry.AddResources(resource_arn); event_entry.SetSource("aws-sdk-cpp-cloudwatch-example"); Aws::CloudWatchEvents::Model::PutEventsRequest request; request.AddEntries(event_entry); auto outcome = cwe.PutEvents(request); if (!outcome.IsSuccess()) { std::cout << "Failed to post CloudWatch event: " << outcome.GetError().GetMessage() << std::endl; } else { std::cout << "Successfully posted CloudWatch event" << std::endl; }
添加规则
要创建或更新规则,请使用包含规则名称和可选参数(如事件模式、与规则相关联的 IAM 角色以及描述规则运行频率的计划表达式)的 PutRuleRequest 调用 CloudWatchEventsClient 的 PutRule 函数。
包含
#include <aws/core/Aws.h> #include <aws/events/EventBridgeClient.h> #include <aws/events/model/PutRuleRequest.h> #include <aws/events/model/PutRuleResult.h> #include <aws/core/utils/Outcome.h> #include <iostream>
代码
Aws::CloudWatchEvents::EventBridgeClient cwe; Aws::CloudWatchEvents::Model::PutRuleRequest request; request.SetName(rule_name); request.SetRoleArn(role_arn); request.SetScheduleExpression("rate(5 minutes)"); request.SetState(Aws::CloudWatchEvents::Model::RuleState::ENABLED); auto outcome = cwe.PutRule(request); if (!outcome.IsSuccess()) { std::cout << "Failed to create CloudWatch events rule " << rule_name << ": " << outcome.GetError().GetMessage() << std::endl; } else { std::cout << "Successfully created CloudWatch events rule " << rule_name << " with resulting Arn " << outcome.GetResult().GetRuleArn() << std::endl; }
添加目标
目标是触发规则时调用的资源。示例目标包括 Amazon EC2 实例、Lambda 函数、Kinesis 流、Amazon ECS 任务、Step Functions 状态机和内置目标。
要向规则添加目标,请使用 PutTargetsRequest(包含要更新的规则和要添加到规则的目标列表)来调用 CloudWatchEventsClient 的 PutTargets 函数。
包含
#include <aws/core/Aws.h> #include <aws/events/EventBridgeClient.h> #include <aws/events/model/PutTargetsRequest.h> #include <aws/events/model/PutTargetsResult.h> #include <aws/core/utils/Outcome.h> #include <iostream>
代码
Aws::CloudWatchEvents::EventBridgeClient cwe; Aws::CloudWatchEvents::Model::Target target; target.SetArn(lambda_arn); target.SetId(target_id); Aws::CloudWatchEvents::Model::PutTargetsRequest request; request.SetRule(rule_name); request.AddTargets(target); auto putTargetsOutcome = cwe.PutTargets(request); if (!putTargetsOutcome.IsSuccess()) { std::cout << "Failed to create CloudWatch events target for rule " << rule_name << ": " << putTargetsOutcome.GetError().GetMessage() << std::endl; } else { std::cout << "Successfully created CloudWatch events target for rule " << rule_name << std::endl; }
请参阅完整示例
更多信息
-
《Amazon CloudWatch Events 用户指南》中的使用 PutEvents 添加事件
-
《Amazon CloudWatch Events 用户指南》中的规则的计划表达式
-
《Amazon CloudWatch Events 用户指南》中的 CloudWatch Events 的事件类型
-
《Amazon CloudWatch Events 用户指南》中的事件和事件模式
-
《Amazon CloudWatch Events API 参考》中的 PutEvents
-
《Amazon CloudWatch Events API 参考》中的 PutTargets
-
《Amazon CloudWatch Events API 参考》中的 PutRule