FIFO トピックサブスクライバーのメッセージリプレイ - Amazon Simple Notification Service

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

FIFO トピックサブスクライバーのメッセージリプレイ

Amazon SNS リプレイでは、トピックサブスクライバーがトピックデータストアからアーカイブされたメッセージを取得し、サブスクライブされたエンドポイントに再配信 (または再生) できます。メッセージは、サブスクリプションが作成されるとすぐにリプレイできます。リプレイされたメッセージには、元のコピーと同じ内容、MessageId、および Timestamp があり、リプレイされたメッセージであることを特定するのに役立つ Replayed 属性も含まれています。特定のメッセージのみをリプレイするために、サブスクリプションにフィルターポリシーを追加できます。メッセージのフィルタリングの詳細については、「リプレイされたメッセージをフィルタリングする」を参照してください。

AWS Management Console を使用するメッセージリプレイポリシーを作成する

AWS Management Console を使用する新しいリプレイポリシーを作成するには、このオプションを使用します。

  1. Amazon SNS コンソールにサインインします。

  2. トピックのサブスクリプションを選択するか、新しいトピックを作成できます。サブスクリプションの作成の詳細については、「Amazon SNS トピックへサブスクライブする」を参照してください。

  3. メッセージのリプレイを開始するには、[再生] ドロップダウンに移動し、[再生を開始] を選択します。

  4. [リプレイ期間] モーダルから、次の選択を行います。

    1. リプレイ開始日時を選択 — アーカイブされたメッセージのリプレイを開始する日付 (YYYY/MM/DD 形式) と時刻 (24 時間の hh:mm:ss 形式) を選択します。開始時刻は、おおよそのアーカイブ時間の開始時刻よりも遅くする必要があります。

    2. (オプション) リプレイ終了日時を選択 — アーカイブされたメッセージのリプレイを停止する日付 (YYYY/MM/DD 形式) と時刻 (24 時間の hh:mm:ss 形式) を選択します。

    3. [Start replay] (再生を開始) を選択します。

  5. (オプション) メッセージのリプレイを停止するには、[サブスクリプション] ページに移動し、[再生] ドロップダウンから [リプレイ停止] を選択します。

  6. (オプション) CloudWatch を使用してこのワークフロー内からメッセージリプレイメトリクスをモニタリングするには、「Amazon CloudWatch を使用してメッセージリプレイメトリクスをモニタリングする」を参照してください。

メッセージリプレイポリシーを表示および編集するには

[サブスクリプションの詳細] ページでは、次のアクションを実行できます。

  • メッセージリプレイステータスについては、[再生ステータス] フィールドに表示される以下の値を確認します。

    • 完了済み — リプレイによりすべてのメッセージが正常に再配信され、現在、新しく発行されたメッセージが配信されています。

    • 進行中 — 現在、選択したメッセージがリプレイ中です。

    • 失敗 — リプレイを完了できませんでした。

    • 保留中 — リプレイ開始時のデフォルト状態です。

  • (オプション) メッセージのリプレイを辺クラウドするには、[サブスクリプションの詳細] ページに移動し、[再生] ドロップダウンから [再生を開始] を選択します。リプレイを開始すると、既存のリプレイが置き換えられます。

API を使用してサブスクリプションにリプレイポリシーを追加する

アーカイブされたメッセージをリプレイするには、ReplayPolicy 属性を使用します。ReplayPolicy は、Subscribe および SetSubscriptionAttributes API アクションで使用できます。このポリシーには以下の値があります。

  • StartingPoint (必須) — メッセージのリプレイを開始する場所を通知します。

  • EndingPoint (オプション) — メッセージのリプレイを停止するタイミングを通知します。EndingPoint を省略すると、現在の時刻に追いつくまでリプレイが続行されます。

  • PointType (必須) — 開始ポイントと終了ポイントの種類を設定します。現在、PointType でサポートされている値は Timestamp です。

たとえば、ダウンストリームの障害から回復し、2023 年 10 月 1 日に 2 時間にわたってすべてのメッセージを再送信するには、SetSubscriptionAttributes API アクションを使用して ReplayPolicy を次のように設定します。

{ "PointType":"Timestamp", "StartingPoint":"2023-10-01T10:00:00.000Z", "EndingPoint":"2023-10-01T12:00:00.000Z" }

2023 年 10 月 1 日時点でトピックに送信されたすべてのメッセージをリプレイし、そのトピックに新しく発行されたすべてのメッセージを引き続き受信するには、SetSubscriptionAttributes API アクションを使用してサブスクリプションで ReplayPolicy を次のように設定します。

{ "PointType":"Timestamp", "StartingPoint":"2023-10-01T00:00:00.000Z" }

メッセージがリプレイされたことを確認するため、リプレイされた各メッセージに boolean 属性 Replayed が追加されます。

SDK を使用してサブスクリプションにリプレイポリシーを追加する

AWS SDK を使用するには、認証情報を使用して設定する必要があります。詳細については、『AWS SDK とツールのリファレンスガイド』の「config ファイルおよび credentials ファイル」を参照してください。

次のコード例は、Amazon SNS FIFO トピックのアーカイブからのメッセージについて、2023 年 10 月 1 日に 2 時間の時間ウィンドウで再配信するようにサブスクリプションで ReplayPolicy を設定する方法を示しています。

// Specify the ARN of the Amazon SNS subscription to initiate the ReplayPolicy on. String subscriptionArn = "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo:1d2a3e9d-7f2f-447c-88ae-03f1c68294da"; // Set the ReplayPolicy to replay messages from the topic's archive // for a 2 hour time period on October 1st 2023 between 10am and 12pm UTC. String replayPolicy = "{\"PointType\":\"Timestamp\",\"StartingPoint\":\"2023-10-01T10:00:00.000Z\",\"EndingPoint\":\"2023-10-01T12:00:00.000Z\"}"; // Set the ArchivePolicy for the Amazon SNS topic SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest() .withSubscriptionArn(subscriptionArn) .withAttributeName("ReplayPolicy") .withAttributeValue(replayPolicy); sns.setSubscriptionAttributes(request);

リプレイされたメッセージをフィルタリングする

Amazon SNS メッセージフィルタリングにより、Amazon SNS がサブスクライバーエンドポイントにリプレイするリプレイメッセージを制御できます。メッセージフィルタリングとメッセージアーカイブの両方が有効になっている場合、Amazon SNS は最初にトピックのデータストアからメッセージを取得し、次にサブスクリプションの FilterPolicy に対してメッセージを適用します。メッセージは、一致した場合は、サブスクライブされたエンドポイントに配信され、それ以外の場合は、除外されます。詳細については、「Amazon SNS サブスクリプションフィルターポリシー」を参照してください。

Amazon CloudWatch を使用してメッセージリプレイメトリクスをモニタリングする

Amazon CloudWatch では、以下のメトリックスを使用してリプレイされたメッセージをモニタリングできます。ワークロードの異常を通知し、影響を回避するのに役立てるために、これらのメトリクスに Amazon CloudWatch アラームを設定できます。詳細については、「Amazon SNS でのログ記録とモニタリング」を参照してください。

メトリクス 説明

NumberOfReplayedNotificationsDelivered

1 分の解像度で、トピックアーカイブからリプレイされたメッセージの総数をサブスクライバーに提供します。

NumberOfReplayedNotificationsFailed

1 分の解像度で、リプレイされ、トピックアーカイブからの配信に失敗したメッセージの総数をサブスクライバーに提供します。