适用于 FIFO 主题所有者的消息归档 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

适用于 FIFO 主题所有者的消息归档

通过消息归档,您可以归档发布到您的主题的所有消息的单个副本。您可以通过对主题启用消息归档策略将已发布的消息存储在主题中,该策略将为链接到该主题的所有订阅启用消息归档。消息可以归档至少一天,最多 365 天。

设置归档策略时需支付额外费用。有关定价信息,请参阅 Amazon SNS 定价

使用 Amazon Web Services Management Console创建消息归档策略

使用此选项,通过 Amazon Web Services Management Console创建新的消息归档策略。

  1. 登录 Amazon SNS 控制台

  2. 选择一个主题或创建一个新主题。要了解有关创建主题的更多信息,请参阅创建 Amazon SNS 主题

    注意

    Amazon SNS 消息归档与重播功能仅适用于应用程序对应用程序(A2A)FIFO 主题。

  3. 编辑主题页面上,展开归档策略部分。

  4. 启用归档策略特征,然后输入要在主题中归档消息的天数

  5. 选择保存更改

查看、编辑和停用消息归档主题策略

  • 主题详细信息页面上,保留策略显示归档策略的状态,包括设置该策略对应的天数。选择归档策略选项卡以查看以下消息归档详细信息:

    • 状态 - 应用归档策略后,归档与重播功能状态显示为活动。当归档策略设置为空的 JSON 对象时,归档与重播功能状态显示为不活动

    • 消息保留期 - 指定的消息保留天数。

    • 归档开始日期 - 订阅用户可以重播消息的起始日期。

    • JSON 预览 - 归档策略的 JSON 预览。

  • (可选)要编辑归档策略,请转到主题摘要页面并选择编辑

  • (可选)要停用归档策略,请转至主题摘要页面并选择编辑。停用归档策略并选择保存更改

  • (可选)要使用归档策略删除主题,必须先按照前面所述停用归档策略。

    重要

    为避免意外删除消息,您不能在具有有效消息归档策略的情况下删除主题。必须先停用主题的消息归档策略,然后才能删除该主题。当您停用消息归档策略时,Amazon SNS 会删除所有已归档的消息。删除主题时,订阅将被删除,并且任何传输中的消息都可能无法传送。

使用 API 创建消息归档策略

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

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

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

{}

使用 SDK 创建消息归档策略

要使用 Amazon 开发工具包,您必须使用您的凭证对其进行配置。有关更多信息,请参阅《Amazon SDK 和工具参考指南》中的共享 configcredentials 文件

以下代码示例展示如何为 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);

使用 Amazon CloudFormation 创建消息归档策略

要使用 Amazon CloudFormation 创建归档策略,请参阅《Amazon CloudFormation 用户指南》中的 AWS::SNS::Topic

授予对加密归档的访问权限

必须先完成以下步骤,然后订阅用户才能开始重播来自加密主题的消息。由于过去的消息会被重播,因此需要为 Amazon SNS 预调配对 KMS 密钥的 Decrypt 访问权限,此密钥用于加密归档中的消息。

  1. 当您使用 KMS 密钥加密消息并将其存储在主题中时,必须授予 Amazon SNS 通过密钥策略对这些消息解密的能力。有关更多信息,请参阅向 Amazon SNS 授予解密权限

  2. 为 Amazon SNS 启用 Amazon KMS。有关更多信息,请参阅配置 Amazon KMS 权限

重要

向 KMS 密钥策略添加新部分时,不要更改策略中任何已存在的部分。如果对主题启用了加密但禁用或删除了 KMS 密钥,或未针对 Amazon SNS 正确地配置 KMS 密钥策略,则 Amazon SNS 无法向您的订阅用户重播消息。

向 Amazon SNS 授予解密权限

要让 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 监控消息归档指标

您可以通过 Amazon CloudWatch 使用以下指标监控归档的消息。为了收到工作负载异常的通知并帮助避免影响,您可以根据这些指标配置 Amazon CloudWatch 警报。有关更多详细信息,请参阅Amazon SNS 中的日志记录和监控

指标 描述

ApproximateNumberOfMessagesArchived

以 60 分钟的分辨率向主题所有者提供在主题归档中归档的消息总数。

ApproximateNumberOfBytesArchived

以 60 分钟的分辨率向主题所有者提供对主题归档中的所有消息归档的总字节数。

NumberOfMessagesArchiveProcessing

以 1 分钟的分辨率向主题所有者提供在间隔期间保存到主题存档的消息数。

NumberOfBytesArchiveProcessing

以 1 分钟的分辨率向主题所有者提供在间隔期间保存到主题存档的总字节数。

GetTopicAttributes API 有一个 BeginningArchiveTime 属性,它表示订阅用户可以开始重播的最早时间戳。以下是此 API 操作的示例响应:

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