本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS Serverless Application Model 範本部署 Amazon EventBridge 資源
您可以在 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"
-
最後,定義一個
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"