FIFO トピックサブスクライバーの Amazon SNS メッセージリプレイ
Amazon SNS リプレイでは、トピックサブスクライバーがトピックデータストアからアーカイブされたメッセージを取得し、サブスクライブされたエンドポイントに再配信 (または再生) できます。メッセージは、サブスクリプションが作成されるとすぐにリプレイできます。リプレイされたメッセージには、元のコピーと同じ内容、MessageId
、および Timestamp
があり、リプレイされたメッセージであることを特定するのに役立つ Replayed
属性も含まれています。特定のメッセージのみをリプレイするために、サブスクリプションにフィルターポリシーを追加できます。メッセージのフィルタリングの詳細については、「リプレイされたメッセージをフィルタリングする」を参照してください。
AWS Management Console を使用するメッセージリプレイポリシーを作成する
AWS Management Console を使用する新しいリプレイポリシーを作成するには、このオプションを使用します。
Amazon SNS コンソール
にサインインします。 -
トピックのサブスクリプションを選択するか、新しいトピックを作成できます。サブスクリプションの作成の詳細については、「Amazon SNS トピックのサブスクリプションの作成」を参照してください。
-
メッセージのリプレイを開始するには、[再生] ドロップダウンに移動し、[再生を開始] を選択します。
-
[リプレイ期間] モーダルから、次の選択を行います。
-
リプレイ開始日時を選択 — アーカイブされたメッセージのリプレイを開始する日付 (YYYY/MM/DD 形式) と時刻 (24 時間の hh:mm:ss 形式) を選択します。開始時刻は、おおよそのアーカイブ時間の開始時刻よりも遅くする必要があります。
-
(オプション) リプレイ終了日時を選択 — アーカイブされたメッセージのリプレイを停止する日付 (YYYY/MM/DD 形式) と時刻 (24 時間の hh:mm:ss 形式) を選択します。
-
[Start replay] (再生を開始) を選択します。
-
-
(オプション) メッセージのリプレイを停止するには、[サブスクリプション] ページに移動し、[再生] ドロップダウンから [リプレイ停止] を選択します。
-
(オプション) 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);
EndingPoint について
ReplayPolicy
を Amazon SNS サブスクリプションに適用する場合、EndingPoint
の値はオプションです。EndingPoint
が指定されていない場合、リプレイは指定された StartingPoint
から開始され、新しく発行されたメッセージの処理を含め、現在の時刻になるまで続行されます。現在の時刻にキャッチアップすると、サブスクリプションは通常のサブスクリプションとして機能し、発行された新しいメッセージを受信します。
EndingPoint
が指定されている場合、サービスは StartingPoint
から EndingPoint
までのメッセージをリプレイして停止します。このアクションによってサブスクリプションは事実上一時停止します。サブスクリプションが一時停止している間、新しく発行されたメッセージは、サブスクライブされたエンドポイントに配信されません。
メッセージ配信を再開するには、EndingPoint
を指定せずに新しい ReplayPolicy
を適用し、StartingPoint
をメッセージの受信を継続する時点に設定します。例えば、以前のリプレイが終了したところからサブスクリプションを再開するには、新しい StartingPoint
を以前に提供された EndingPoint
に設定します。
リプレイされたメッセージをフィルタリングする
Amazon SNS メッセージフィルタリングにより、Amazon SNS がサブスクライバーエンドポイントにリプレイするリプレイメッセージを制御できます。メッセージフィルタリングとメッセージアーカイブの両方が有効になっている場合、Amazon SNS は最初にトピックのデータストアからメッセージを取得し、次にサブスクリプションの FilterPolicy
に対してメッセージを適用します。メッセージは、一致した場合は、サブスクライブされたエンドポイントに配信され、それ以外の場合は、除外されます。詳細については、「Amazon SNS サブスクリプションフィルターポリシー」を参照してください。
Amazon CloudWatch を使用してメッセージリプレイメトリクスをモニタリングする
Amazon CloudWatch では、以下のメトリックスを使用してリプレイされたメッセージをモニタリングできます。ワークロードの異常を通知し、影響を回避するのに役立てるために、これらのメトリクスに Amazon CloudWatch アラームを設定できます。詳細については、「Amazon SNS でのログ記録とモニタリング」を参照してください。
メトリクス | 説明 |
---|---|
NumberOfReplayedNotificationsDelivered |
1 分の解像度で、トピックアーカイブからリプレイされたメッセージの総数をサブスクライバーに提供します。 |
NumberOfReplayedNotificationsFailed |
1 分の解像度で、リプレイされ、トピックアーカイブからの配信に失敗したメッセージの総数をサブスクライバーに提供します。 |