View a markdown version of this page

使用 AWS Serverless Application Model 部署亚马逊 EventBridge 资源的模板 - 亚马逊 EventBridge

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

使用 AWS Serverless Application Model 部署亚马逊 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"