FIFO 主題擁有者的 Amazon SNS 訊息封存 - Amazon Simple Notification Service

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

FIFO 主題擁有者的 Amazon SNS 訊息封存

訊息封存可讓您封存發佈至主題之所有訊息的單一副本。您可以對主題啟用訊息封存政策,以便將發佈的訊息儲存在主題內,如此就能對連結至該主題的所有訂閱啟用訊息封存。訊息可封存最短一天,最長 365 天。

設定封存政策需支付額外的費用。如需定價資訊,請參閱 Amazon SNS定價。

使用 建立訊息封存政策 AWS Management Console

使用此選項即可使用 AWS Management Console來建立新的訊息封存政策。

  1. 登入 Amazon SNS主控台

  2. 選擇主題或建立新主題。若要進一步了解如何建立主題,請參閱建立 Amazon SNS主題。

    注意

    Amazon SNS 訊息封存和重播僅適用於 application-to-application(A2A) FIFO主題。

  3. 編輯主題頁面上,展開封存政策區段。

  4. 啟用封存政策功能,然後輸入要在主題中封存訊息的天數

  5. 選擇 Save changes (儲存變更)。

若要檢視、編輯和停用郵件封存主題政策

  • 主題詳細資訊頁面上,保留政策會顯示封存政策的狀態,包括為其設定的天數。選取封存政策索引標籤,以檢視下列訊息封存詳細資訊:

    • 狀態 - 套用封存政策時,封存與重播功能狀態會顯示為作用中。當封存政策設定為空JSON物件時,封存和重播狀態會顯示為非作用中

    • 訊息保留期間 - 指定的訊息保留天數。

    • 封存開始日期 - 訂閱用戶可以開始重播訊息的日期。

    • JSON Preview – 封存政策的JSON預覽。

  • (選用) 若要編輯封存政策,請前往主題摘要頁面,然後選擇編輯

  • (選用) 若要停用封存政策,請前往主題摘要頁面,然後選擇編輯。停用封存政策,然後選擇儲存變更

  • (選用) 若要刪除具有封存政策的主題,您必須先如前述停用封存政策。

    重要

    為了避免意外刪除訊息,您無法刪除具有作用中訊息封存政策的主題。您必須先停用主題的訊息封存政策,才能刪除主題。當您停用訊息封存政策時,Amazon 會SNS刪除所有封存的訊息。刪除主題時,訂閱也會一併移除,且傳輸中的任何訊息都可能無法傳遞。

使用 建立訊息封存政策 API

若要使用 建立訊息封存政策API,您需要將 屬性新增至ArchivePolicy主題。您可以使用ArchivePolicyAPI動作 CreateTopic和 來設定 SetTopicAttributesArchivePolicy具有單一值 MessageRetentionPeriod,代表 Amazon SNS保留訊息的天數。若要啟用主題的訊息封存,請將 MessageRetentionPeriod 設定為大於零的整數值。例如,若要將訊息保留在封存中 30 天,請將 ArchivePolicy 設定為:

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

若要停用主題的訊息封存並清除封存,請取消設定 ArchivePolicy,如下所示:

{}

使用 建立訊息封存政策 SDK

若要使用 AWS SDK,您必須使用 憑證進行設定。如需詳細資訊,請參閱 config和 工具參考指南 中的共用 和 credentials 檔案 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);

使用 建立訊息封存政策 AWS CloudFormation

若要使用 建立封存政策, AWS CloudFormation 請參閱 使用者指南 AWS::SNS::Topic 中的 。 AWS CloudFormation

授權存取加密的封存

您必須先完成下列步驟,訂閱用戶才能開始重播來自加密主題的訊息。由於已重播過去的訊息,因此SNS需要佈建對用來加密封存中訊息的KMS金鑰的Decrypt存取權。

  1. 當您使用 KMS 金鑰加密訊息並將其存放在主題中時,您必須授予 Amazon 透過金鑰政策解密這些訊息SNS的能力。如需更多資訊,請參閱 將解密許可授予 Amazon SNS

  2. AWS KMS 為 Amazon 啟用 SNS。如需更多資訊,請參閱 設定 AWS KMS 許可

重要

當您將新區段新增至KMS金鑰政策時,請勿變更政策中的任何現有區段。如果在主題上啟用加密,且KMS金鑰已停用或刪除,或者KMS金鑰政策未針對 Amazon 正確設定SNS,則 Amazon SNS無法將訊息重播給您的訂閱者。

將解密許可授予 Amazon SNS

為了SNS讓 Amazon 從主題的封存中存取加密的訊息,並將其重播至訂閱的端點,您必須啟用 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

您可以使用 CloudWatch 下列指標,使用 Amazon 監控封存的訊息。若要收到工作負載異常的通知並協助避免影響,您可以在這些指標上設定 Amazon CloudWatch 警示。如需詳細資訊,請參閱在 Amazon 中記錄和監控 SNS

指標 描述

ApproximateNumberOfMessagesArchived

以 60 分鐘的解析度,為主題擁有者提供主題封存中封存的彙總訊息數。

ApproximateNumberOfBytesArchived

以 60 分鐘的解析度,為主題擁有者提供主題封存中封存的所有訊息的彙總位元組數。

NumberOfMessagesArchiveProcessing

以 1 分鐘解析度,為主題擁有者提供間隔期間儲存至主題封存的訊息數。

NumberOfBytesArchiveProcessing

以 1 分鐘解析度,為主題擁有者提供間隔期間儲存至主題封存的彙總位元組數。

GetTopicAttributes API 具有 BeginningArchiveTime 屬性,表示訂閱者可以開始重播的最舊時間戳記。下列代表此API動作的範例回應:

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