

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 FIFO 主题所有者的 Amazon SNS 消息归档
<a name="message-archiving-and-replay-topic-owner"></a>

通过消息归档，您可以归档发布到您的主题的所有消息的单个副本。您可以通过对主题启用消息归档策略将已发布的消息存储在主题中，该策略将为链接到该主题的所有订阅启用消息归档。消息可以归档至少一天，最多 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. 选择**保存更改**。

**查看、编辑和停用消息归档主题策略**
+ 在**主题详细信息**页面上，**保留策略**显示归档策略的状态，包括设置该策略对应的天数。选择**归档策略**选项卡以查看以下消息归档详细信息：
  + **状态** - 应用归档策略后，归档与重播功能状态显示为**活动**。当归档策略设置为空的 JSON 对象时，归档与重播功能状态显示为**不活动**。
  + **消息保留期** - 指定的消息保留天数。
  + **归档开始日期** - 订阅用户可以重播消息的起始日期。
  + **JSON 预览** - 归档策略的 JSON 预览。
+ （可选）要**编辑**归档策略，请转到主题摘要页面并选择**编辑**。
+ （可选）要**停用**归档策略，请转至主题摘要页面并选择**编辑**。停用**归档策略**并选择**保存更改**。
+ （可选）要使用归档策略**删除**主题，必须先按照前面所述停用归档策略。
**重要**  
为避免意外删除消息，您不能在具有有效消息归档策略的情况下删除主题。必须先停用主题的消息归档策略，然后才能删除该主题。当您停用消息归档策略时，Amazon SNS 会删除所有已归档的消息。删除主题时，订阅将被删除，并且任何传输中的消息都可能无法传送。

## 使用 API 创建消息归档策略
<a name="message-archiving-and-replay-topic-api"></a>

要使用 API 创建消息归档策略，您需要将属性 `ArchivePolicy` 添加到主题中。您可以使用 API 操作 `CreateTopic` 和 `SetTopicAttributes` 设置 `ArchivePolicy`。`ArchivePolicy` 只有一个值 `MessageRetentionPeriod`，它表示 Amazon SNS 保留消息的天数。要为主题激活消息归档，请将 `MessageRetentionPeriod` 设置为大于零的整数值。例如，要将归档中的消息保留 30 天，请将 `ArchivePolicy` 设置为：

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

要对主题禁用消息归档并清除归档，请取消设置 `ArchivePolicy`，如下所示：

```
{}
```

## 使用 SDK 创建消息归档策略
<a name="message-archiving-and-replay-topic-sdk"></a>

要使用 S AWS DK，必须使用您的凭据对其进行配置。有关更多信息，请参阅《工具参考指南》[`config`和《*工具参考指南》中的共享 AWS SDKs 和`credentials`*文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。

以下代码示例展示如何为 Amazon SNS 主题设置 `ArchivePolicy`，以便将发布到该主题的所有消息保留 30 天。

```
// 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>

要使用创建存档策略， CloudFormation 请参阅*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)*中的。

## 授予对加密归档的访问权限
<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.  AWS KMS 为亚马逊 SNS 启用。有关更多信息，请参阅[配置 AWS KMS 权限](sns-key-management.md#sns-what-permissions-for-sse)。

**重要**  
向 KMS 密钥策略添加新部分时，不要更改策略中任何已存在的部分。如果对主题启用了加密但禁用或删除了 KMS 密钥，或未针对 Amazon SNS 正确地配置 KMS 密钥策略，则 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>

您可以使用以下指标在 Amaz CloudWatch on 上监控存档的邮件。为了收到工作负载异常的通知并帮助避免影响，您可以根据这些指标配置 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>",
  ...
}
```