

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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 파일은 네 가지 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 함수를 정의하고 Lambda 함수를 EventBridge와 통합하는 두 가지 방법을 보여주는 AWS SAM 템플릿입니다.

이 예제 애플리케이션에 대한 자세한 내용은 [자습서: 샘플 Amazon EventBridge 애플리케이션 생성](eb-tutorial-get-started.md) 섹션을 참조하세요.

 EventBridge와 AWS SAM 템플릿을 사용하는 방법에는 두 가지가 있습니다. 하나의 규칙에 의해 하나의 Lambda 함수가 간접 호출되는 간단한 통합의 경우 **결합된 템플릿** 접근 방식을 사용하는 것이 좋습니다. 복잡한 라우팅 로직이 있거나 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 구성을 정의하는 두 번째 접근 방식에서는 템플릿에서 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"
   ```