View a markdown version of this page

使用AWS Serverless Application Model用于部署 Amazon EventBridge 资源的模板 - Amazon EventBridge

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

使用AWS Serverless Application Model用于部署 Amazon EventBridge 资源的模板

您可以在 EventBridge 控制台中手动构建和测试规则,这有助于完善事件模式的开发过程。但是,一旦您准备好部署应用程序,使用 AWS SAM 等框架一致地启动所有无服务器资源则更加方便。

我们将使用此示例应用程序来研究如何使用AWS SAM模板来构建 EventBridge 资源。此示例中的 template.yaml 文件是一个AWS SAM模板,它定义了四个AWS Lambda函数,并显示了将 Lambda 函数与集成的两种不同方法。 EventBridge

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

有两种使用 EventBridge 和AWS SAM模板的方法。对于由一条规则调用一个 Lambda 函数的简单集成,建议使用组合模板方法。如果您的路由逻辑很复杂,或者您要连接到AWS SAM模板之外的资源,那么 “分离” 模板方法是更好的选择。

组合模板

第一种方法使用Events属性来配置 EventBridge 规则。以下示例代码定义了一个事件,它调用您的 Lambda 函数。

注意

此示例自动在默认事件总线上创建规则,该总线存在于每个AWS账户中。要将规则与自定义事件总线关联,可以将 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 中,您只需要定义事件模式,然后AWS SAM自动创建具有所需权限的 IAM 角色。

分开的模板

在中定义 EventBridge 配置的第二种方法中AWS SAM,在模板中对资源进行了更明确的分隔。

  1. 首先,您要定义 Lambda 函数:

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

    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. 最后,定义一个授予调 EventBridge 用目标权限的AWS::Lambda::Permission资源。

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