使用 AWS Serverless Application Model 範本部署 Amazon EventBridge 資源 - Amazon EventBridge

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Serverless Application Model 範本部署 Amazon EventBridge 資源

您可以在 EventBridge 控制台中手動構建和測試規則,這可以在調整事件模式時幫助開發過程。不過,您準備好部署應用程式後,即可以更輕鬆地使用架構,例如 AWS SAM,以一致地啟動所有無伺服器資源。

我們將使用此示例應用程序來研究您可以使用 AWS SAM 模板來構建 EventBridge 資源的方式。此範例中的範 AWS SAM 本 .yaml 檔案是一個範本,它會定義四個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. 最後,定義一個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"