

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

# FIFO トピックサブスクライバーの Amazon SNS メッセージリプレイ
<a name="message-archiving-and-replay-subscriber"></a>

Amazon SNS リプレイでは、トピックサブスクライバーはトピックデータストアからアーカイブされたメッセージを取得し、サブスクライブされたエンドポイントに再配信できます。
+ メッセージは、サブスクリプションが作成されるとすぐにリプレイできます。
+ リプレイされたメッセージは、元のメッセージと同じコンテンツ、`MessageId`、および `Timestamp` を保持します。
+ メッセージには、リプレイされたメッセージであることを示す `Replayed` 属性が含まれています。
+ 特定のメッセージのみをリプレイするには、サブスクリプションにフィルターポリシーを適用します。

メッセージのフィルタリングの詳細については、「[リプレイされたメッセージをフィルタリングする](#message-archiving-and-replay-subscription-filtering)」を参照してください。

## を使用してメッセージ再生ポリシーを作成する AWS マネジメントコンソール
<a name="message-archiving-and-replay-replaying-console"></a>

 AWS マネジメントコンソールを使用する新しいリプレイポリシーを作成するには、このオプションを使用します。

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

1. トピックのサブスクリプションを選択するか、新しいトピックを作成できます。サブスクリプションの作成の詳細については、「[Amazon SNS トピックのサブスクリプションの作成](sns-create-subscribe-endpoint-to-topic.md)」を参照してください。

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

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

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

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

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

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

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

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

**[サブスクリプションの詳細]** ページでは、次のアクションを実行できます。
+ メッセージリプレイステータスについては、**[再生ステータス]** フィールドに表示される以下の値を**確認**します。
  + **完了済み** — リプレイによりすべてのメッセージが正常に再配信され、現在、新しく発行されたメッセージが配信されています。
  + **進行中** — 現在、選択したメッセージがリプレイ中です。
  + **失敗** — リプレイを完了できませんでした。
  + **保留中** — リプレイ開始時のデフォルト状態です。
+ (オプション) メッセージリプレイポリシーを**変更する**には、**[サブスクリプションの詳細]** ページに移動し、**[リプレイ]** ドロップダウンから **[リプレイ開始]** を選択します。リプレイを開始すると、既存のリプレイが置き換えられます。

## API を使用してサブスクリプションにリプレイポリシーを追加する
<a name="message-archiving-and-replay-subscription-api"></a>

アーカイブされたメッセージをリプレイするには、`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 を使用してサブスクリプションにリプレイポリシーを追加する
<a name="message-replay-sdk"></a>

 AWS SDK を使用するには、認証情報を使用して設定する必要があります。詳細については、 SDK [`config`およびツールリファレンスガイドの「共有ファイル」および`credentials`「ファイル](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)」を参照してください。 * AWS SDKs *

次のコード例は、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 について
<a name="message-archiving-and-replay-understanding-endpoint"></a>

`ReplayPolicy` を Amazon SNS サブスクリプションに適用する場合、`EndingPoint` の値はオプションです。`EndingPoint` が指定されていない場合、リプレイは指定された `StartingPoint` から開始され、新しく発行されたメッセージの処理を含め、現在の時刻になるまで続行されます。現在の時刻にキャッチアップすると、サブスクリプションは通常のサブスクリプションとして機能し、発行された新しいメッセージを受信します。

`EndingPoint` が指定されている場合、サービスは `StartingPoint` から `EndingPoint` までのメッセージをリプレイして停止します。**このアクションによってサブスクリプションは事実上一時停止します。**サブスクリプションが一時停止している間、新しく発行されたメッセージは、サブスクライブされたエンドポイントに配信されません。

メッセージ配信を再開するには、`EndingPoint` を指定せずに新しい `ReplayPolicy` を適用し、`StartingPoint`をメッセージの受信を継続する時点に設定します。例えば、以前のリプレイが終了したところからサブスクリプションを再開するには、新しい `StartingPoint` を以前に提供された `EndingPoint` に設定します。

## リプレイされたメッセージをフィルタリングする
<a name="message-archiving-and-replay-subscription-filtering"></a>

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

## Amazon CloudWatch を使用してメッセージリプレイメトリクスをモニタリングする
<a name="message-archiving-and-replay-subscription-cloudwatch"></a>

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


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