

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

# 를 사용하여 사용자 지정 이벤트 버스 리소스 생성 CloudFormation
<a name="eb-custom-bus-cloudformation"></a>

템플릿에서 CloudFormation 버스, 구독자, 이벤트 소스 및 리소스 정책을 생성할 수 있습니다. 리소스 유형은 `AWS::EventsV2` 네임스페이스에 있습니다. `AWS::Events` 유형은 사용자 지정 이벤트 버스 - Classic에 속하며 사용자 지정 이벤트 버스를 구성할 수 없습니다.

## 리소스 유형
<a name="eb-custom-bus-cloudformation-types"></a>
+ `AWS::EventsV2::EventBus`는 보존 기간과 암호화 키를 포함한 하나의 버스입니다. 가 필요합니다`Name`.
+ `AWS::EventsV2::Subscriber`는 버스의 구독자 한 명입니다. 즉, 필터, 변환, 재시도 정책 및 단일 대상입니다. `Name`, `EventBusArn`및가 필요하며`InvokeConfiguration`, 자체적으로 `TargetArn` 및가 필요합니다`RoleArn`.
+ `AWS::EventsV2::EventSource`는 버스에 대한 AWS 서비스 이벤트 또는 파트너 이벤트의 관리형 피드입니다. `Name`, `EventBusArn`및가 필요합니다`Configuration`. [사용자 지정 이벤트 버스의 이벤트 소스](eb-custom-bus-event-sources.md) 섹션을 참조하세요.
+ `AWS::EventsV2::ResourcePolicy`는 이미 존재하는 버스의 리소스 정책입니다. 여기에는 `EventBusArn` 및가 필요합니다`PolicyDocument`. [사용자 지정 이벤트 버스에 대한 액세스 제어](eb-custom-bus-access.md) 섹션을 참조하세요.

구독자의는 구독자와 동일한 계정의 역할 이름을 지정`RoleArn`해야 합니다. 따라서 계정 간에 공유되는 버스는 소유자 계정의 버스와 각 소비 계정의 대상, 전송 역할 및 구독자 등 두 개 이상의 스택입니다.

## 예: 버스, 대기열 및 구독자
<a name="eb-custom-bus-cloudformation-example"></a>

다음 템플릿은 이벤트를 7일 동안 보관하는 버스, Amazon SQS 대기열, 배달 못한 편지 대기열, 배달 역할 및 500개 이상의 주문을 대기열에 전달하는 구독자를 생성합니다. 구독자가 로 참조하기 때문에는 구독자 앞에 역할과 대기열을 CloudFormation 생성합니다`Fn::GetAtt`. 보존 기간은 구독자가 읽기를 시작할 수 있는 거리를 결정합니다. 섹션을 참조하세요[구독자에게 보관된 이벤트 재생](eb-custom-bus-replay.md).

```
AWSTemplateFormatVersion: '2010-09-09'

Resources:
  OrdersBus:
    Type: AWS::EventsV2::EventBus
    Properties:
      Name: orders
      Description: Order events for the fulfillment platform
      StorageConfiguration:
        RetentionPeriodInDays: 7

  OrdersQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: large-orders

  OrdersDeadLetterQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: large-orders-dlq

  DeliveryRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: EventBusDeliveryRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: events.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: DeliverToQueues
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action: sqs:SendMessage
                Resource:
                  - !GetAtt OrdersQueue.Arn
                  - !GetAtt OrdersDeadLetterQueue.Arn

  LargeOrders:
    Type: AWS::EventsV2::Subscriber
    Properties:
      Name: large-orders
      EventBusArn: !Ref OrdersBus
      FilterConfiguration:
        Filters:
          - Scope: DATA
            Pattern: '{"detail":{"total":[{"numeric":[">",500]}]}}'
      InvokeConfiguration:
        TargetArn: !GetAtt OrdersQueue.Arn
        RoleArn: !GetAtt DeliveryRole.Arn
      RetryPolicy:
        MaxRetryAttempts: 10
        MaxEventAgeInSeconds: 3600
      OnFailureConfiguration:
        Arn: !GetAtt OrdersDeadLetterQueue.Arn

Outputs:
  OrdersBusArn:
    Value: !Ref OrdersBus
    Export:
      Name: orders-bus-arn
```

전송 역할은 `events.amazonaws.com` 서비스 보안 주체를 신뢰하고 두 대기열 `sqs:SendMessage` 모두에 권한을 부여합니다. 배달 못한 편지 대기열에 대한 권한 부여가 없으면 전송 실패를 기록할 수 없으며 아무것도 관찰할 수 없습니다. 스택을 배포하는 자격 증명은 `iam:PassRole` 전송 역할에도 필요합니다.

## 반환 값
<a name="eb-custom-bus-cloudformation-returns"></a>

`Ref`는 리소스의 기본 식별자인 ARN을 반환합니다.는 읽기 전용 속성을 `Fn::GetAtt` 반환합니다. 다음 표에는 각 리소스 유형의 값이 나열되어 있습니다.


| 리소스 유형 | `Ref` 반환 | `Fn::GetAtt` 속성 | 
| --- | --- | --- | 
| AWS::EventsV2::EventBus | EventBusArn | EventBusArn, State, CreationTime, LastModifiedTime | 
| AWS::EventsV2::Subscriber | SubscriberArn | SubscriberArn, BusName, CreationTime, LastModifiedTime | 
| AWS::EventsV2::EventSource | EventSourceArn | EventSourceArn, State, Revoked, CreationTime, LastModifiedTime | 
| AWS::EventsV2::ResourcePolicy | EventBusArn | RevisionId | 

구독자의 `State`는 읽은 속성이 아니라 설정한 속성입니다. 전송을 일시 중지`STOPPED`하려면 로 설정하고 다시 재개`RUNNING`하려면 로 설정합니다. 버스`State`는 읽기 전용이며 정해진 값은 입니다`ACTIVE`.

## 리소스를 대체하는 속성
<a name="eb-custom-bus-cloudformation-replacement"></a>

6개의 구독자 속성은 생성 전용이므로 템플릿에서 이러한 속성을 변경하면 구독자가 `Name`, `EventBusArn`, `InvokeConfiguration.TargetArn`, `Type`, 및 `StartingPosition`로 바뀝니다`PointInTimeConfiguration`. 필터, 변환, 재시도 정책, 배달 못한 편지 대기열을 포함한 다른 모든 구독자 속성은 그대로 업데이트됩니다.

**중요**  
구독자 교체는 새 구독자를 생성하기 전에 이전 구독자를 삭제합니다. 두 단계 사이에 구독자가 없습니다. 그러면 새 구독자는 자체에서 시작하여 최신 이벤트에서 `StartingPosition` `LATEST` 시작하므로 해당 기간 동안 게시된 이벤트를 전달하지 않습니다. 따라서 공백을 계획하지 않는 한 대상 ARN, 순서 유형 또는 시작 위치를 변경하면 이벤트가 삭제됩니다.

격차를 방지하려면를 두 번 배포합니다. 먼저 새 논리적 ID에 대체 구독자를 추가하고이 `State`에 도달할 때까지 기다립니다`RUNNING`. 그런 다음 두 번째 배포에서 이전 구독자를 제거합니다. 두 구독자 모두 겹치는 동안를 전송하므로 대상은 일치하는 각 이벤트를 두 번 수신합니다. 중복이 허용되는 경우에만이 접근 방식을 사용합니다.

두 번 배포할 수 없는 경우 새 구독자의를 `StartingPosition` 로 설정하고 배포 전에 Unix epoch 이후 몇 초 `StartingPoint`만에를 `PointInTimeConfiguration` `PointType` `TIMESTAMP` 사용하여의를 `POINT_IN_TIME` 제공합니다. 그런 다음 버스의 보존 기간 내에 있는 경우 구독자는 놓친 이벤트를 읽습니다.

버스에서는 `Name`만 생성 전용이므로 보존 기간, 설명, 암호화 키 및 태그가 모두 업데이트됩니다. 이벤트 소스 `Name` 및 `EventBusArn`는 생성 전용이고 리소스 정책은 `EventBusArn`입니다.

## 다른 스택의 버스 참조
<a name="eb-custom-bus-cloudformation-crossstack"></a>

구독자에게는 버스 이름 뒤에 서비스 생성 식별자가 포함된 전체 버스 ARN이 필요합니다. 이름이 아닌 ARN을 저장하고 전달합니다. [사용자 지정 이벤트 버스에 대한 이름, 엔드포인트 및 IAM 권한](eb-custom-bus-names.md) 섹션을 참조하세요.

한 계정 및 리전 내에서 예제와 같이 버스를 소유한 스택에서 ARN을 내보내고 로 가져옵니다`EventBusArn: !ImportValue orders-bus-arn`. 다른 스택에서 가져오는 동안 내보낸 값을 변경하거나 제거할 수 CloudFormation 없습니다. 버스 이름을 바꾸면 버스가 교체되고 ARN이 변경되므로 가져오기가 있는 동안 이름 변경에 실패합니다. 먼저 가져오기 구독자를 제거하거나 새 이름으로 내보냅니다.

다른 계정 또는 다른 리전에서 내보내기를 가져올 수 없습니다. 대신 버스 ARN을 소비 스택에 템플릿 파라미터로 전달합니다. 또한 버스 소유자는 리소스 정책 또는 AWS Resource Access Manager()를 사용하여 버스에 대한 다른 계정 권한을 부여해야 합니다AWS RAM. [사용자 지정 이벤트 버스에 대한 액세스 제어](eb-custom-bus-access.md) 섹션을 참조하세요.