

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 訊息封存與重播功能只適用於應用程式對應用程式 (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>

若要使用 AWS SDK，您必須使用登入資料進行設定。如需詳細資訊，請參閱 SDK [`config`和工具參考指南中的共用 和 `credentials` 檔案](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。 * AWS SDKs *

下列程式碼範例將示範如何設定 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 為 Amazon 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>

您可以使用下列指標與 Amazon CloudWatch 監控封存的訊息。若要收到工作負載異常的通知並協助避免受到影響，您可以對這些指標設定 Amazon CloudWatch 警示。如需詳細資訊，請參閱[在 Amazon SNS 中記錄和監控](sns-logging-monitoring.md)。


| 指標 | Description | 
| --- | --- | 
|  **ApproximateNumberOfMessagesArchived**  |  以 60 分鐘的解析度，為主題擁有者提供主題封存中封存的彙總訊息數。  | 
|  **ApproximateNumberOfBytesArchived**   |  以 60 分鐘的解析度，為主題擁有者提供主題封存中封存的所有訊息的彙總位元組數。  | 
|  **NumberOfMessagesArchiveProcessing**   |  以 1 分鐘解析度，為主題擁有者提供間隔期間儲存至主題封存的訊息數。  | 
|  **NumberOfBytesArchiveProcessing**  |  以 1 分鐘解析度，為主題擁有者提供間隔期間儲存至主題封存的彙總位元組數。  | 

`GetTopicAttributes` API 具有 `BeginningArchiveTime` 屬性，代表訂閱用戶可以開始重播的最早時間戳記。以下代表此 API 動作的範例回應：

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