翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
を使用したカスタムイベントバスリソースの作成 CloudFormation
テンプレートから CloudFormation バス、そのサブスクライバー、イベントソース、およびそのリソースポリシーを作成できます。リソースタイプは AWS::EventsV2名前空間にあります。AWS::Events タイプはカスタムイベントバス - Classic に属し、カスタムイベントバスを設定できません。
リソースタイプ
-
AWS::EventsV2::EventBusは、保持期間とその暗号化キーを含む 1 つのバスです。これには が必要ですName。 -
AWS::EventsV2::Subscriberはバス上の 1 つのサブスクライバーです。フィルタ、変換、再試行ポリシー、および 1 つのターゲットです。これには、Name、EventBusArn、および が必要でありInvokeConfiguration、それ自体にはTargetArnと が必要ですRoleArn。 -
AWS::EventsV2::EventSourceは、 AWS サービスイベントまたはパートナーイベントのバスへの 1 つのマネージドフィードです。これには、Name、EventBusArn、および が必要ですConfiguration。「カスタムイベントバスのイベントソース」を参照してください。 -
AWS::EventsV2::ResourcePolicyは、既に存在するバスのリソースポリシーです。これには、EventBusArnと が必要ですPolicyDocument。「カスタムイベントバスのアクセスコントロール」を参照してください。
サブスクライバーの は、サブスクライバーと同じアカウントのロールに名前を付けるRoleArn必要があります。したがって、アカウント間で共有されるバスは複数のスタックです。所有者のアカウントのバス、ターゲット、配信ロール、各消費アカウントのサブスクライバーです。
例: バス、キュー、サブスクライバー
次のテンプレートは、イベントを 7 日間保持するバス、Amazon SQS キュー、デッドレターキュー、配信ロール、および 500 を超える注文をキューに配信するサブスクライバーを作成します。サブスクライバーは で参照するため、 はサブスクライバーの前にロールとキュー CloudFormation を作成しますFn::GetAtt。保持期間は、サブスクライバーが読み取りを開始できる距離を決定します。「」を参照してください保持されたイベントをサブスクライバーに再生する。
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配信ロールにも必要です。
戻り値
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。
リソースを置き換えるプロパティ
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 エポックからデプロイ前の秒数で PointInTimeConfigurationPointTypeTIMESTAMPを に渡します。その後、サブスクライバーはバスの保持期間内であれば、見逃したイベントを読み取ります。
バスでは、 Nameは作成専用であるため、保持期間、説明、暗号化キー、タグはすべて更新されます。イベントソースでは、 Nameと EventBusArnは作成専用で、リソースポリシーでは EventBusArnです。
別のスタックからバスを参照する
サブスクライバーには、バス名の後にサービスによって生成された識別子を含む完全なバス ARN が必要です。名前ではなく ARN を保存して渡します。「カスタムイベントバスの名前、エンドポイント、IAM アクセス許可」を参照してください。
1 つのアカウントとリージョン内で、例のようにバスを所有するスタックから ARN をエクスポートし、 でインポートしますEventBusArn: !ImportValue orders-bus-arn。 CloudFormation エクスポートされた値は、別のスタックがインポートしている間は変更または削除できません。バスの名前を変更すると置き換えられ、その ARN が変更されるため、インポートが存在する間、名前の変更は失敗します。インポートするサブスクライバーを最初に削除するか、新しい名前でエクスポートします。
エクスポートを別のアカウントまたは別のリージョンからインポートすることはできません。代わりに、バス ARN をテンプレートパラメータとして消費スタックに渡します。また、バス所有者は、リソースポリシーまたは AWS Resource Access Manager () を使用して、バスに対するアクセス許可を他のアカウントに付与する必要がありますAWS RAM。「カスタムイベントバスのアクセスコントロール」を参照してください。