本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
您可以在 EventBridge 控制台中手动构建和测试规则,这有助于完善事件模式的开发过程。但是,一旦您准备好部署应用程序,使用 AWS SAM 等框架一致地启动所有无服务器资源则更加方便。
我们将使用此示例应用程序
有关此示例应用程序的演练,请参阅教程:创建示例 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,在模板中对资源进行了更明确的分隔。
-
首先,您要定义 Lambda 函数:
atmConsumerCase1Fn: Type: AWS::Serverless::Function Properties: CodeUri: atmConsumer/ Handler: handler.case1Handler Runtime: nodejs12.x
-
接下来,使用
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"
-
最后,定义一个授予调 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"