

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Serverless Application Model テンプレートを使用した Amazon EventBridge リソースのデプロイ
<a name="eb-use-sam"></a>

EventBridge コンソールで[ルール](eb-rules.md)の構築とテストを手動で行うことができ、[イベントパターン](eb-event-patterns.md)を改良する時の開発プロセスに役立ちます。ただし、アプリケーションをデプロイする準備ができたら、すべてのサーバーレスリソースを一貫して起動できる [AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) のようなフレームワークを使用する方が簡単です。

この[サンプルアプリケーション](https://github.com/aws-samples/amazon-eventbridge-producer-consumer-example)を使用して、 AWS SAM テンプレートを使用して EventBridge リソースを構築する方法を確認します。この例の template.yaml ファイルは、4 つの[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)関数を定義する AWS SAM テンプレートであり、Lambda 関数を EventBridge と統合する 2 つの異なる方法を示しています。

このサンプルアプリケーションのチュートリアルについては、[チュートリアル: Amazon EventBridge サンプルアプリケーションを作成する](eb-tutorial-get-started.md) を参照してください。

 EventBridge と AWS SAM テンプレートを使用する方法は 2 つあります。1 つのルールによって 1 つの Lambda 関数が呼び出される単純な統合では、**[Combined template] (組み合わせテンプレート)** アプローチをお勧めします。複雑なルーティングロジックがある場合、または AWS SAM テンプレート外のリソースに接続する場合は、**分離されたテンプレート**アプローチの方が適しています。

**Topics**
+ [組み合わせテンプレート](#eb-combined-template)
+ [分離テンプレート](#eb-separated-template)

## 組み合わせテンプレート
<a name="eb-combined-template"></a>

最初のアプローチでは、`Events` プロパティを使用して、EventBridge ルールを設定します。次のサンプルコードでは、Lambda 関数を呼び出す[イベント](eb-events.md)を定義します。

**注記**  
この例では、すべての AWS アカウントに存在するデフォルトの[イベントバス](eb-event-bus.md)にルールを自動的に作成します。ルールをカスタムイベントバスに関連付けるには、`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 では、イベントパターンを定義するだけで、必要なアクセス許可を持つ IAM ロール AWS SAM が自動的に作成されます。

## 分離テンプレート
<a name="eb-separated-template"></a>

で EventBridge 設定を定義する 2 番目のアプローチでは AWS SAM、リソースはテンプレート内でより明確に分離されます。

1. まず、Lambda 関数を定義します。

   ```
   atmConsumerCase1Fn:
     Type: AWS::Serverless::Function
     Properties:
       CodeUri: atmConsumer/
       Handler: handler.case1Handler
       Runtime: nodejs12.x
   ```

1. 次に、`AWS::Events::Rule` リソースを使用してルールを定義します。プロパティはイベントパターンを定義し、[ターゲット](eb-targets.md)を指定することもできます。複数のターゲットを明示的に定義できます。

   ```
   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"
   ```

1. 最後に、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"
   ```