使用 Amazon EventBridge 和Amazon Serverless Application Model模板 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon EventBridge 和Amazon Serverless Application Model模板

您可以构建和测试规则手动在 EventBridge 控制台中,这可以帮助您完善开发过程事件模式. 但是,一旦你准备好部署你的应用程序,使用像Amazon SAM来始终如一地启动所有无服务器资源。

我们将使用这个示例应用程序以查看您可以使用的方法Amazon SAM模板来构建 EventBridge 资源。此示例中的模板 .yaml 文件是Amazon SAM模板,用于定义四个Amazon Lambda函数,并显示了两种将 Lambda 函数与 EventBridge 集成的不同方法。

有关此示例应用程序的演练,请参阅创建 Amazon EventBridge 示例应用程序.

有两种方法可使用 EventBridge 和Amazon SAM模板。对于一个规则调用一个 Lambda 函数的简单集成,组合模板建议采用这种方法. 如果您有复杂的路由逻辑,或者您正在连接到Amazon SAM模板,单独的模板方法是更好的选择。

组合模板

第一种方法使用Events属性配置 EventBridge 规则。以下示例代码定义了event调用 Lambda 函数。

注意

此示例自动在默认的事件总线,它存在于每个Amazonaccount. 要将规则与自定义事件总线关联,可以将EventBusName添加到模板。

atmConsumerCase3Fn: Type: AWS::Serverless::Function Properties: CodeUri: atmConsumer/ Handler: handler.case3Handler Runtime: nodejs12.x Events: Trigger: Type: CloudWatchEvent Properties: Pattern: source: - custom.myATMapp detail-type: - transaction detail: result: - "anything-but": "approved"

此 YAML 代码等效于 EventBridge 控制台中的事件模式。在 YAML 中,您只需要定义事件模式,并且Amazon SAM自动创建具有所需权限的 IAM 角色。

单独的模板

在定义 EventBridge 配置的第二种方法中,Amazon SAM,则资源在模板中更清晰地分离。

  1. 首先,定义 Lambda 函数:

    atmConsumerCase1Fn: Type: AWS::Serverless::Function Properties: CodeUri: atmConsumer/ Handler: handler.case1Handler Runtime: nodejs12.x
  2. 接下来,使用AWS::Events::Rule资源。这些属性定义了事件模式,并且还可以指定targets. 您可以显式定义多个目标。

    EventRuleCase1: Type: AWS::Events::Rule Properties: Description: "Approved transactions" EventPattern: source: - "custom.myATMapp" detail-type: - transaction detail: result: - "approved" State: "ENABLED" Targets: - Arn: Fn::GetAtt: - "atmConsumerCase1Fn" - "Arn" Id: "atmConsumerTarget1"
  3. 最后,定义AWS::Lambda::Permission资源,该资源将授予 EventBridge 调用目标的权限。

    PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: Ref: "atmConsumerCase1Fn" Action: "lambda:InvokeFunction" Principal: "events.amazonaws.com" SourceArn: Fn::GetAtt: - "EventRuleCase1" - "Arn"