

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

# を使用したカスタムイベントバスリソースの作成 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` は、保持期間とその暗号化キーを含む 1 つのバスです。これには が必要です`Name`。
+ `AWS::EventsV2::Subscriber` はバス上の 1 つのサブスクライバーです。フィルタ、変換、再試行ポリシー、および 1 つのターゲットです。これには、`Name`、`EventBusArn`、および が必要であり`InvokeConfiguration`、それ自体には `TargetArn`と が必要です`RoleArn`。
+ `AWS::EventsV2::EventSource` は、 AWS サービスイベントまたはパートナーイベントのバスへの 1 つのマネージドフィードです。これには、`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`で を付与します。デッドレターキューに対する許可がないと、失敗した配信を記録できず、何も観測できません。スタックをデプロイする ID は、`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`、`StartingPosition`、、 `InvokeConfiguration.TargetArn` `Type`が置き換えられます`PointInTimeConfiguration`。フィルター、変換、再試行ポリシー、デッドレターキューなど、他のすべてのサブスクライバープロパティは、更新されます。

**重要**  
サブスクライバー置換は、新しいサブスクライバーを作成する前に古いサブスクライバーを削除します。2 つのステップの間にサブスクライバーは存在しません。その後、新しいサブスクライバーは独自の から開始し`StartingPosition`、最新のイベントから`LATEST`開始するため、そのウィンドウ中に発行されたイベントを配信することはありません。したがって、ギャップを計画しない限り、ターゲット ARN、順序タイプ、または開始位置を変更すると、イベントは削除されます。

ギャップを回避するには、 を 2 回デプロイします。まず、代替サブスクライバーを新しい論理 ID に追加し、そのサブスクライバーが に到達する`State`のを待ちます`RUNNING`。次に、2 番目のデプロイで古いサブスクライバーを削除します。両方のサブスクライバーは重複中に配信するため、ターゲットは一致する各イベントを 2 回受信します。このアプローチは、重複が許容される場合にのみ使用します。

2 回デプロイできない場合は、新しいサブスクライバーの `StartingPosition`を に設定`POINT_IN_TIME`し`StartingPoint`、Unix エポックからデプロイ前の秒数で `PointInTimeConfiguration``PointType``TIMESTAMP`を に渡します。その後、サブスクライバーはバスの保持期間内であれば、見逃したイベントを読み取ります。

バスでは、 `Name`は作成専用であるため、保持期間、説明、暗号化キー、タグはすべて更新されます。イベントソースでは、 `Name`と `EventBusArn`は作成専用で、リソースポリシーでは `EventBusArn`です。

## 別のスタックからバスを参照する
<a name="eb-custom-bus-cloudformation-crossstack"></a>

サブスクライバーには、バス名の後にサービスによって生成された識別子を含む完全なバス ARN が必要です。名前ではなく ARN を保存して渡します。「[カスタムイベントバスの名前、エンドポイント、IAM アクセス許可](eb-custom-bus-names.md)」を参照してください。

1 つのアカウントとリージョン内で、例のようにバスを所有するスタックから ARN をエクスポートし、 でインポートします`EventBusArn: !ImportValue orders-bus-arn`。 CloudFormation エクスポートされた値は、別のスタックがインポートしている間は変更または削除できません。バスの名前を変更すると置き換えられ、その ARN が変更されるため、インポートが存在する間、名前の変更は失敗します。インポートするサブスクライバーを最初に削除するか、新しい名前でエクスポートします。

エクスポートを別のアカウントまたは別のリージョンからインポートすることはできません。代わりに、バス ARN をテンプレートパラメータとして消費スタックに渡します。また、バス所有者は、リソースポリシーまたは AWS Resource Access Manager () を使用して、バスに対するアクセス許可を他のアカウントに付与する必要がありますAWS RAM。「[カスタムイベントバスのアクセスコントロール](eb-custom-bus-access.md)」を参照してください。