

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

# FIFO トピック所有者の Amazon SNS メッセージアーカイブ
<a name="message-archiving-and-replay-topic-owner"></a>

メッセージのアーカイブでは、トピックに発行されたすべてのメッセージの 1 つのコピーをアーカイブできます。トピックのメッセージアーカイブポリシーを有効にすることで、発行されたメッセージをトピック内に保存できます。これにより、そのトピックにリンクされているすべてのサブスクリプションのメッセージアーカイブが有効になります。メッセージのアーカイブ期間は、最短で 1 日、最長で 365 日です。

アーカイブポリシーを設定すると、追加料金がかかります。料金については、「[Amazon SNS 料金](https://aws.amazon.com/sns/pricing/)」を参照してください。

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

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

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

1. トピックを選択するか、新しいトピックを作成できます。トピックの作成の詳細については、「[Amazon SNS トピックを作成する](sns-create-topic.md)」を参照してください。
**注記**  
Amazon SNS メッセージのアーカイブとリプレイは、Application-to-Application (A2A) FIFO トピックでのみ使用できます。

1. **[トピックの編集]** ページで **[アーカイブポリシー]** セクションを展開します。

1. **アーカイブポリシー機能**を有効にし、トピック内でメッセージを**保存する日数**を入力します。

1. **[Save changes]** (変更の保存) をクリックします。

**メッセージアーカイブトピックポリシーを表示、編集、非アクティブ化するには**
+ **トピックの詳細**ページでは、設定されている日数などのアーカイブポリシーのステータスが**リテンションポリシー**に表示されます。**[アーカイブポリシー]** タブを選択すると、以下のメッセージアーカイブの情報が表示されます。
  + **ステータス** — アーカイブポリシーが適用されると、アーカイブとリプレイのステータスは **[有効]** と表示されます。アーカイブポリシーが空の JSON オブジェクトに設定されている場合は、アーカイブとリプレイのステータスは **[無効]** と表示されます。
  + **メッセージ保持期間** — 指定されたメッセージ保持日数。
  + **アーカイブ開始日** — サブスクライバーがメッセージを再生できる日付。
  + **JSON のプレビュー** — アーカイブポリシーの JSON プレビュー。
+ (オプション) アーカイブポリシーを**編集**するには、トピックの [概要] ページに移動して **[編集]** を選択します。
+ (オプション) アーカイブポリシーを**無効化**するには、トピックの [概要] ページに移動して **[編集]** を選択します。**アーカイブポリシー**を無効化し、**[変更の保存]** を選択します。
+ (オプション) アーカイブポリシーを含むトピックを**削除**するには、前に説明したように、アーカイブポリシーを無効化する必要があります。
**重要**  
メッセージが誤って削除されるのを防ぐため、メッセージアーカイブポリシーが有効なトピックは削除できません。トピックを削除する前に、トピックのメッセージアーカイブポリシーを無効化する必要があります。メッセージアーカイブポリシーを無効にすると、Amazon SNS ではアーカイブされたすべてのメッセージが削除されます。トピックを削除すると、サブスクリプションは削除され、転送中のメッセージが配信されない場合があります。

## API を使用するメッセージアーカイブポリシーを作成する
<a name="message-archiving-and-replay-topic-api"></a>

API を使用するメッセージアーカイブポリシーを作成するには、属性 `ArchivePolicy` をトピックに追加する必要があります。`ArchivePolicy` は、API アクション `CreateTopic` と `SetTopicAttributes` を使用して設定できます。 `ArchivePolicy` には Amazon SNS がメッセージを保持する日数を表す単一の値 `MessageRetentionPeriod` が含まれています。トピックのメッセージアーカイブを有効にするには、`MessageRetentionPeriod` を 0 より大きい整数値に設定します。たとえば、メッセージをアーカイブに 30 日間保持するには、`ArchivePolicy` を次のように設定します。

```
{
    "ArchivePolicy": {
        "MessageRetentionPeriod": "30"
    }
}
```

トピックのメッセージアーカイブを無効にしてアーカイブを消去するには、次のように `ArchivePolicy` の設定を解除します。

```
{}
```

## SDK を使用するメッセージアーカイブポリシーを作成する
<a name="message-archiving-and-replay-topic-sdk"></a>

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

次のコード例は、Amazon SNS トピック用にそのトピックに発行されたすべてのメッセージを 30 日間保持するように `ArchivePolicy` を設定する方法を示しています。

```
// Specify the ARN of the Amazon SNS topic to set the ArchivePolicy for.
String topicArn =
    "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo";

// Set the MessageRetentionPeriod to 30 days for the ArchivePolicy.
String archivePolicy =
    "{\"MessageRetentionPeriod\":\"30\"}";

// Set the ArchivePolicy for the Amazon SNS topic
SetTopicAttributesRequest request = new SetTopicAttributesRequest()
    .withTopicArn(topicArn)
    .withAttributeName("ArchivePolicy")
    .withAttributeValue(archivePolicy);
sns.setTopicAttributes(request);
```

## を使用してメッセージアーカイブポリシーを作成する CloudFormation
<a name="message-archiving-and-replay-topic-cfn"></a>

を使用してアーカイブポリシーを作成するには、 *AWS CloudFormation ユーザーガイド*[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-topic.html)の CloudFormation 「」を参照してください。

## 暗号化されたアーカイブにアクセス権を付与する
<a name="message-archiving-and-replay-topic-kms"></a>

暗号化されたトピックからのメッセージのリプレイをサブスクライバーが開始する前に、次の手順を完了する必要があります。過去のメッセージがリプレイされるため、Amazon SNS では、アーカイブ内のメッセージの暗号化に使用された KMS キーへの `Decrypt` アクセス権がプロビジョニングされている必要があります。

1. KMS キーを使用してメッセージを暗号化し、トピック内に保存する場合、キーポリシーを使用してこれらのメッセージを復号化する機能を Amazon SNS に付与する必要があります。詳細については、「[Amazon SNS に復号のアクセス権限を付与する](#message-archiving-and-replay-topic-decrypt-permissions)」を参照してください。

1. Amazon SNS AWS KMS で を有効にします。詳細については、「[AWS KMS アクセス許可の設定](sns-key-management.md#sns-what-permissions-for-sse)」を参照してください。

**重要**  
新しいセクションを KMS キーポリシーに追加するときは、ポリシー内の既存のセクションを変更しないでください。トピックの暗号化が有効で、KMS キーが無効か、または削除されている場合、または KMS キーポリシーが Amazon SNS に対して正しく設定されていない場合は、Amazon SNS はサブスクライバーに対してメッセージをリプレイできません。

### Amazon SNS に復号のアクセス権限を付与する
<a name="message-archiving-and-replay-topic-decrypt-permissions"></a>

Amazon SNS がトピックのアーカイブ内の暗号化されたメッセージにアクセスし、サブスクライブされたエンドポイントにリプレイするには、Amazon SNS サービスプリンシパルでこれらのメッセージを復号する必要があります。

トピック内からの履歴メッセージのリプレイ中に、保存されたメッセージを Amazon SNS サービスプリンシパルが復号することを許可するために必要なポリシーの例を次に示します。

```
{
    "Sid": "Allow SNS to decrypt archived messages",
    "Effect": "Allow",
    "Principal": {
        "Service": "sns.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*"
}
```

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

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


| メトリクス | 説明 | 
| --- | --- | 
| **ApproximateNumberOfMessagesArchived** | トピックアーカイブにアーカイブされたメッセージの総数を 60 分の解像度でトピック所有者に提供します。 | 
| **ApproximateNumberOfBytesArchived**  | トピックアーカイブのすべてのメッセージで、アーカイブされたバイトの総数を 60 分の解像度でトピック所有者に提供します。 | 
| **NumberOfMessagesArchiveProcessing**  | 1 分の解像度のインターバル中に、トピックアーカイブに保存されたメッセージの数をトピックの所有者に通知します。 | 
| **NumberOfBytesArchiveProcessing** | 1 分の解像度のインターバル中に、トピックアーカイブに保存されたバイトの総数をトピックの所有者に通知します。 | 

`GetTopicAttributes` API には、購読者がリプレイを開始できる最も古いタイムスタンプを表す `BeginningArchiveTime` プロパティが含まれています。以下に、この API アクションのレスポンスの例を示します。

```
{
 "ArchivePolicy": {
    "MessageRetentionPeriod": "{{<integer>}}"
  },
  "BeginningArchiveTime": "{{<timestamp>}}",
  ...
}
```