概览

问:什么是 Amazon Simple Notification Service (Amazon SNS)?

Amazon Simple Notification Service (Amazon SNS) 是一种 Web 服务,让用户能够简易设置、运行并从云中发送通知。它为开发人员提供高度可扩展、灵活并且经济高效的从应用程序发布消息的功能,并立即将它们发送给订阅者或其他应用程序。该服务旨在让开发人员能更轻松地进行 Web 规模级计算。Amazon SNS 遵循“发布-订阅” (pub-sub) 消息收发模式,使用“推送”机制向客户发送通知,无需定期检查或“轮询”新的信息和更新。Amazon SNS 使用简单的 API,只需极少的前期开发工作、无维护或管理开销,并且随用随付,它为开发人员提供了一种简单的机制,可以将功能强大的通知系统整合到其应用程序中。

问:如何开始使用 Amazon SNS?

通过完成我们的 10 分钟教程,只需几个步骤即可创建 Amazon SNS 主题并发布消息。

有关其他详细信息,请参阅 Amazon SNS 开发人员指南资源中心中的示例代码。

问:使用 Amazon SNS 有哪些好处?

Amazon SNS 具有多项优势,使其成为构建和集成松散耦合的分布式应用程序的通用选项:

  • 即时、基于推送的交付(无轮询)
  • 简单的 API,可与应用程序轻松集成
  • 通过多种传输协议灵活传送消息
  • 价格低廉、随用随付模式,无前期成本
  • 基于 Web 的 Amazon Web Services 管理控制台提供简单易用的点击式界面

问:Amazon SNS 通知有哪些示例用途?

Amazon SNS 服务可以支持各种需求,包括事件通知、监控应用程序、工作流程系统、时间敏感型信息更新、移动应用程序以及任何其他生成或使用通知的应用程序。例如,Amazon SNS 可以在工作流程系统中用于在分布式计算机应用程序之间中继事件、在数据存储之间移动数据或更新业务系统中的记录。有关验证、批准、库存变更和发货状态的事件更新和通知将立即发送给相关系统组件和最终用户。一种常见的模式是使用 SNS 将消息发布到 Amazon SQS 消息队列,以便可靠地向一个或多个系统组件发送异步消息。Amazon SNS 的另一个示例是将时间紧迫的事件中继到移动应用程序和设备。由于 Amazon SNS 具有高度的可靠性和可扩展性,因此为开发依赖实时事件的应用程序的开发人员提供了显著的优势。

问:Amazon SNS 是如何工作的?

Amazon SNS 上手很简单。首先,开发人员必须创建一个“主题”,它是一个“接入点”,用于标识特定的主题或事件类型,以便发布消息并允许客户端订阅通知。创建主题后,主题所有者可以为其设置策略,例如限制谁可以发布消息或订阅通知,或者指定将支持哪些通知协议(例如 HTTP/HTTPS、SQS、Lambda)。订阅者是有兴趣接收来自感兴趣主题的通知的客户;他们可以订阅主题或由主题所有者订阅。订阅者指定要发送的通知的协议和终端节点(URL、电子邮件地址等)。当发布者有信息或更新要通知其订阅者时,可以向该主题发布消息,这会立即触发 Amazon SNS 将消息传送给所有适用的订阅者。

问:Amazon SNS 与 Amazon SQS 有何不同?

Amazon Simple Queue Service (SQS) 和 Amazon SNS 都是 Amazon Web Services 中的消息收发服务,它们为开发人员提供了不同的好处。Amazon SNS 允许应用程序通过“推送”机制向多个订阅者发送时间紧迫的消息,无需定期检查或“轮询”以进行更新。Amazon SQS 是一种用于分布式应用程序的消息队列服务,通过轮询模型交换消息,可用于解耦发送和接收组件。Amazon SQS 使应用程序的分布式组件能够灵活收发消息,而无需每个组件同时可用。

一种常见的模式是使用 SNS 将消息发布到 Amazon SQS 队列,以便可靠地向一个或多个系统组件发送异步消息。

问:Amazon SNS 与 Amazon MQ 有何不同?

Amazon MQ、Amazon SQS 和 Amazon SNS 是消息收发服务,适合从初创公司到企业的任何人。如果您在现有应用程序中使用消息收发,并希望快速轻松地将消息迁移到云中,我们建议您考虑使用 Amazon MQ。它支持行业标准的 API 和协议,因此您可以从任何基于标准的消息代理切换到 Amazon MQ,而无需重写应用程序中的消息代码。如果您要在云中构建全新的应用程序,我们建议您考虑使用 Amazon SQS 和 Amazon SNS。Amazon SQS 和 SNS 是轻量级、完全托管的消息队列和主题服务,几乎可以无限扩展,并提供简单易用的 API。您可以使用 Amazon SQS 和 SNS 分离和扩展微服务、分布式系统和无服务器应用程序,并提高可靠性。

问:如何开始使用 Amazon SNS?

要注册 Amazon SNS,请点击 Amazon SNS 详情页面上的“注册 Amazon SNS”按钮。您必须拥有 Amazon Web Services 账户才能访问此服务;如果您还没有账户,系统将在您开始 Amazon SNS 注册过程时提示您创建账户。注册后,请参阅 Amazon SNS 文档和入门指南,开始使用 Amazon SNS。使用 Amazon Web Services 管理控制台,您可以轻松地在浏览器中创建主题、添加订阅者、发送通知和编辑主题策略。

问:Amazon Web Services 管理控制台是否支持 Amazon SNS?

Amazon Web Services 管理控制台支持 Amazon SNS,该控制台提供了一个点击式、基于 Web 的界面来访问和管理 Amazon SNS。使用 Amazon Web Services 管理控制台,您可以通过浏览器创建主题、添加订阅者和发送通知。此外,借助 Amazon Web Services 管理控制台,您可以轻松地将消息发布到所选的终端节点(HTTP、SQS、Lambda 或电子邮件),并编辑主题策略以控制发布者和订阅者的访问。

问:每个区域的 Amazon SNS 服务接入终端节点是什么?

有关所有 Amazon SNS 服务接入点的最新列表,请参阅 Amazon Web Services 文档的 Amazon Web Services 区域和终端节点部分。

问:我能否获得从我的账户发起的所有 SNS API 调用的历史记录,以便用于安全分析和运营故障排除?

可以。SNS 支持 Amazon CloudTrail,这是一项 Web 服务,用于记录账户的 Amazon API 调用,并向您发送日志文件。通过 CloudTrail,您可以获取 API 调用者的身份、API 调用的时间、API 调用者的源 IP 地址、请求参数,以及 SNS 返回的响应元素等信息的历史记录。

SNS 目前仅支持对经过身份验证的调用进行 CloudTrail 审计。未经验证的 ConfirmSubscription 和 Unsubscribe 调用的 CloudTrail 审核日志目前不可用。有关更多信息,请参阅 SNS 开发人员指南的 CloudTrail 部分

要获取通过您账户发起的 SNS API 调用的历史记录,您只需在 Amazon Web Services 管理控制台打开 Amazon CloudTrail 即可。要了解有关 Amazon CloudTrail 定价的更多信息,请单击此处。 

计费

问:使用 Amazon SNS 如何收费和计费?

开始使用服务时,没有安装费。在月底,系统会自动从您的信用卡中扣除该月的使用费。您可以随时在 Amazon Web Services 网站上查看当前账单期的费用,只需登录您的 Amazon Web Services 账户,并单击“您的 Web Services 账户”下的“账户活动”即可。

问:我的 Amazon SNS 的账单周期怎么计算?

您的 Amazon SNS 账单周期从每月的第一天开始,到每月的最后一天结束。您的月度费用将在每个月底合计。

特性和功能

问:Amazon SNS 主题的格式是什么?

主题名称不得超过 256 个字符。允许使用字母数字字符加上连字符 (-) 和下划线 (_)。主题名称在 Amazon Web Services 账户中必须是唯一的。删除主题后,您可以重复使用该主题名称。创建主题后,Amazon SNS 将为该主题分配一个唯一的 ARN(Amazon Web Services 资源名称),其中包括服务名称 (SNS)、区域、用户的 Amazon Web Services ID 和主题名称。ARN 将作为创建主题的 API 调用的一部分返回。每当发布者或订阅者需要对主题执行任何操作时,都应该引用唯一的主题 ARN。

问:Amazon SNS 有哪些可用操作?谁可以执行这些操作?

Amazon SNS 提供了一组简单的 API,用于为主题所有者、订阅者和发布者启用事件通知。

所有者操作:

  • CreateTopic – 创建新主题。
  • DeleteTopic – 删除之前创建的主题。
  • ListTopics – 特定用户拥有的主题列表 (Amazon Web Services ID)。
  • ListSubscriptionsByTopic – 特定主题的订阅列表
  • SetTopicAttributes – 设置/修改主题属性,包括设置和修改发布者/订阅者权限、支持的传输等
  • GetTopicAttributes – 获取/查看主题的现有属性
  • AddPermission — 授予选定用户对指定操作的访问权限
  • RemovePermission – 删除选定用户对指定操作的权限

订阅者操作:

  • Subscribe – 注册特定主题的新订阅,这将生成来自 Amazon SNS 的确认消息
  • ConfirmSubscription – 回复订阅确认消息,确认订阅请求以接收来自已订阅主题的通知
  • UnSubscribe – 取消之前注册的订阅
  • ListSubscriptions – 列出特定用户拥有的订阅 (Amazon Web Services ID)

发布者操作:

  • Publish:向主题发布新消息。

问:为什么使用两种不同的 API 来列出订阅?

列出订阅的两个 API 执行不同的功能并返回不同的结果:

ListSubscriptionsByTopic API 允许主题所有者查看在活跃状态下注册某个主题的所有订阅者的列表。

ListSubscriptions API 允许用户获取其所有活动订阅(一个或多个主题)的列表。

问:接收通知的传送格式/传输方式有哪些?

  • “SQS” – 用户可以指定 SQS 标准或 FIFO 队列作为终端节点;Amazon SNS 会将通知消息排入指定队列(订阅者随后可以使用 ReceiveMessage、DeleteMessage 等 SQS API 来处理该队列)。
  • “HTTP”、“HTTPS” – 订阅者指定一个 URL 作为订阅注册的一部分;通知将通过 HTTP POST 发送到指定的 URL。
  • “Email”、“Email-JSON” – 消息以电子邮件的形式发送到注册地址。Email-JSON 以 JSON 对象的形式发送通知,而 Email 则发送基于文本的电子邮件。
  • “SQS” – 用户可以指定 SQS 标准队列作为终端节点;Amazon SNS 会将通知消息排入指定队列(订阅者随后可以使用 ReceiveMessage、DeleteMessage 等 SQS API 来处理该队列)。

问:主题所有者能否控制他们创建/拥有的主题所允许的传输?

主题所有者可以通过访问控制策略设置适当的权限,从而为其主题配置特定的传输。

问:所有者如何设置访问控制策略?

有关设置访问控制策略的概述,请参阅 Amazon SNS 入门指南。

问:单个主题是否支持通过多个协议/传输进行订阅?

Amazon SNS 主题的订阅者可以接收有关该主题支持的任何传输的通知。一个主题可以支持通过多个传输进行订阅和通知传送。

问:订阅者可以选择性地只接收发布到主题的消息子集吗?

可以,您可以在 Amazon Simple Notification Service (SNS) 上使用消息筛选功能来构建更简单、更合理的发布/订阅架构。借助消息筛选功能,Amazon SNS 主题订阅者无需再接收发布到某个主题的全部消息,而能选择仅接收其中自己感兴趣的部分消息。要监控 SNS 订阅筛选策略的使用情况,请使用自动为您收集的 Amazon CloudWatch 指标。您也可以在 Amazon CloudFormation 模板中使用 Amazon::SNS::Subscription 资源类型来快速部署使用 SNS 消息筛选的解决方案。有关更多详细信息,请参阅我们文档中的“使用 Amazon SNS 筛选消息”部分。

问:是否可以将 Amazon SNS 与其他 Amazon Web Services 服务配合使用?

Amazon SNS 可以与 Amazon SQS、Amazon EC2 和 Amazon S3 等 Amazon Web Services 服务一起使用。以下是订单处理工作流程系统如何将 Amazon SNS 与 Amazon EC2、SQS 和 SimpleDB 结合使用的示例。在该工作流程系统中,每当交易发生或订单在订单处理管道中推进时,都会在应用程序组件之间发送消息。客户初次下订单时,首先会在 Amazon SimpleDB 中记录交易,然后在 Amazon EC2 上运行的应用程序会将订单请求转发给付款处理商,进而从客户的信用卡或银行账户中扣款。获得批准后,系统会向 Amazon SNS 主题发布订单确认消息。在这种情况下,主题拥有各种通过电子邮件/HTTP 进行订阅的订阅者(商家、客户和供应链合作伙伴),Amazon SNS 为该主题发送的通知可以立即更新所有付款处理成功的订阅者。通知还可用于编排 EC2 上运行的订单处理系统,通过 HTTP 发送的通知可以在库存系统或配送服务等相关组件中触发实时处理。将 Amazon SNS 与 Amazon SQS 集成后,发送的所有通知也将保留在 Amazon SQS 队列中,将来由审计应用程序处理。

问:Amazon SNS 是否在提供 Amazon Web Services 服务的所有地区都可用?

有关 Amazon SNS 可用性的最新信息,请参阅 Amazon Web Services 文档的“亚马逊云科技区域和终端节点”部分。

问:客户多久后可以使用以前使用过的主题名称重新创建主题?

主题名称通常应该在上一个同名主题被删除约 30-60 秒后可重复使用。确切的时间将取决于在该主题上处于活动状态的订阅数量 — 只有少数订阅者的主题将立即可供重复使用,订阅者列表较大的主题可能需要更长的时间。

FIFO 队列

问:什么是 SNS FIFO 主题?

与标准 SNS 主题类似,SNS FIFO 主题允许用户向主题发布消息,以便将其传送到一系列订阅终端节点。如果必须按顺序向订阅者传送这些消息(先进先出),而且只能传送一次,并且您希望通过 SNS 进行处理,则必须采用 SNS FIFO 主题。Amazon SNS FIFO 主题将排序消息传送到 Amazon Simple Queue Service (Amazon SQS) FIFO 队列,以便为分布式应用程序提供一致的端到端消息排序。现在,您可以减少处理高吞吐量、一致排序的事务所需的工作量,并简化消息传递架构。使用案例示例包括银行交易记录、股票行情自动收录器、航班跟踪器、价格更新、新闻广播和库存管理。

问:SNS FIFO 主题和 Kinesis Data Streams 分别适用于哪些情况?

借助 SNS FIFO 主题和 Kinesis Streams,您可以构建需要严格排序、多对多消息收发的应用程序。SNS FIFO 主题可以进一步解锁需要大量有序扇出(最多 100 个订阅者)的应用程序集成用例。另一方面,Kinesis Streams 支持最多 5 个订阅者的有序扇出,通常用于分析和异常检测用例。

运输

问:用户如何订阅通过电子邮件发送的通知?

要接收特定主题的电子邮件通知,订阅者应指定“Email”或“Email-JSON”作为协议,并提供有效的电子邮件地址作为终端节点。这可以通过 Amazon Web Services 管理控制台或直接调用 Amazon SNS API 来完成。然后,Amazon SNS 将向指定的电子邮件地址发送一封带有确认链接的电子邮件,并要求监控该电子邮件地址的用户明确选择接收来自该特定主题的电子邮件通知。用户通过单击提供的链接确认订阅后,发布到该主题的所有消息都将发送到该电子邮件地址。

问:为什么 Amazon SNS 提供两种不同的传输方式来通过电子邮件接收通知?

这两种电子邮件传输是为两种不同类型的客户/最终用户提供的。“Email-JSON”以 JSON 对象的形式发送通知,用于应用程序以编程方式处理电子邮件。“Email”传输面向最终用户/消费者,通知是普通的、基于文本的消息,易于阅读。

问:用户能否更改通过 Email/Email-JSON 发送的通知的主题和显示名称?

Amazon SNS 允许用户将电子邮件的“主题”字段指定为传递给 Publish API 调用的参数,对于发布的每条消息,该字段可以不同。可以使用 SetTopicAttributes API 设置主题的显示名称 – 此名称适用于从该主题发送的所有电子邮件。

问:订阅者是否需要专门配置其电子邮件设置才能接收来自 Amazon SNS 的通知?

在大多数情况下,用户应该能够接收来自 Amazon SNS 的订阅确认和通知,而无需执行任何特定操作。但是,在某些情况下,电子邮件提供商的默认设置或其他用户特定配置可能会错误地将电子邮件重定向到垃圾邮件/垃圾邮件文件夹。

问:如果将 SQS 队列作为终端节点传入,用户是否需要在订阅之前创建队列? 队列需要什么权限?

使用 SQS 控制台时,用户应先创建 SQS 队列,然后再为其订阅主题。在控制台上选择此队列,然后在菜单栏的“队列操作”中,从下拉列表中选择“为队列订阅 SNS 主题”。在“订阅”对话框中,从“选择主题”下拉列表中选择主题,然后单击“订阅”按钮。有关完整的分步说明,请参阅 Amazon SNS 文档

问:开发人员如何设置 Amazon SQS 队列以接收 Amazon SNS 通知?

要让 Amazon SNS 向 SQS 队列发送通知,开发人员应订阅一个主题,指定“SQS”作为传输协议并将有效的 SQS 标准队列指定为终端节点。为了允许 SQS 队列接收来自 Amazon SNS 的通知,SQS 队列所有者必须为 SQS 队列订阅适用于 Amazon SNS 的主题,以便成功向队列传送消息。

如果用户同时拥有订阅的 Amazon SNS 主题和接收通知的 SQS 队列,则无需进一步操作。发布到该主题的任何消息都将自动传送到指定的 SQS 队列。如果拥有 SQS 队列的用户不是该主题的所有者,则 Amazon SNS 将要求明确确认订阅请求。

请参阅 Amazon SNS 文档,了解有关为 SQS 队列订阅主题和为 SQS 队列设置访问控制策略的更多详细信息。

问:如何将相同的消息扇出到多个 SQS 队列?

首先使用 SNS 创建一个 SNS 主题。然后创建多个 SQS 标准队列并为其订阅 SNS 主题。现在,无论何时向 SNS 主题发送消息,该消息都会扇出到 SQS 队列,即 SNS 会将该消息传送到订阅该主题的所有 SQS 队列。

问:Amazon SNS 发送的结构化通知消息的格式是什么?

Amazon SNS 为通过 HTTP、HTTPS、Email-JSON 和 SQS 传输协议进行传输而发送的通知消息将包含一个简单的 JSON 对象,其中包含以下信息:

  • MessageId:通用唯一标识符,对于发布的每个通知都是唯一的。
  • Timestamp:发布通知的时间(格林威治标准时间)。
  • TopicArn:此消息发布到的主题
  • Type:传递消息的类型,对于通知传送,设置为“通知”。
  • UnsubscribeURL:用于取消订阅此主题的终端节点并阻止接收任何进一步通知的链接。
  • Message:从发布者接收的消息的有效负载(正文)。
  • Subject:“主题”字段 – 如果将某个字段作为可选参数与消息一起包含在发布 API 调用中。
  • Signature:消息、消息 ID、主题(如果存在)、类型、时间戳和主题值的 Base64 编码的“SHA1withRSA”签名。
  • SignatureVersion:使用的 Amazon SNS 签名的版本。

通过“Email”传输发送的通知消息仅包含从发布者那里收到的有效负载(消息正文)。

安全性

问:用户如何确保发送到我的主题的消息的安全?

对 Amazon SNS 进行的所有 API 调用都将针对用户的 Amazon Web Services ID 和签名进行验证。此外,建议用户通过连接到我们的安全 SSL 终端来保护其数据安全。

问:谁可以创建主题?

主题只能由具有有效 Amazon Web Services ID 且已注册 Amazon SNS 的用户创建。创建主题最简单的方法是使用 Amazon Web Services 管理控制台。也可以通过 CreateTopic API 创建。Amazon Web Services 管理控制台可从以下网址获得:https://console.amazonaws.cn/

问:多个用户是否可以向一个主题发布信息?

主题所有者可以设置显式权限,以允许多个用户(具有有效的 Amazon Web Services ID)向一个主题发布信息。默认情况下,只有主题所有者才有权发布主题。

问:所有者如何授予/撤销主题的发布或订阅权限?

AddPermission 和 RemovePermission API 为开发人员提供了一个简单的界面,用于添加和删除主题的权限。但是,对于条件访问和更高级的用例,用户应使用访问控制策略来管理权限。管理权限最简单的方法是使用 Amazon Web Services 管理控制台。Amazon Web Services 管理控制台可从以下网址获得:https://console.amazonaws.cn/

问:主题所有者如何向订阅者授予访问权限? 订阅者是否必须拥有有效的 Amazon Web Services ID?

无论用户是否拥有 Amazon Web Services ID,都可以通过 Amazon SNS 轻松接收通知。主题的所有者可以通过使用访问控制策略为主题设置适当的权限,从而授予/限制订阅者的访问权限。用户可以通过两种方式接收来自 Amazon SNS 的通知:

  • 拥有 Amazon Web Services ID 的用户:拥有有效 Amazon Web Services ID 的订阅者(请参阅此链接了解有关获取 Amazon Web Services ID 的详细信息)可以直接订阅任何主题,只要主题所有者已向他们授予订阅权限。Amazon Web Services ID 将作为订阅注册的一部分进行验证。
  • 其他用户:主题所有者可以代表没有 Amazon Web Services ID 的用户订阅和注册终端节点。

在这两种情况下,订阅终端节点的所有者都需要明确选择加入并通过回复 Amazon SNS 发送的确认消息来确认订阅。

问:Amazon SNS 将如何对 API 调用进行身份验证?

对 Amazon SNS 进行的所有 API 调用都将通过要求使用 Amazon Web Services ID 账户的密钥签署请求并验证请求中包含的签名来验证真实性。

问:Amazon SNS 如何验证订阅请求,以确保不会将通知作为垃圾邮件发送给用户?

作为订阅注册的一部分,Amazon SNS 将确保仅向有效的已注册订阅者/终端节点发送通知。为了防止垃圾邮件并确保订阅者终端节点确实有兴趣接收来自特定主题的通知,Amazon SNS 要求订阅者使用两部分握手明确选择加入:

i.当用户首次调用订阅 API 并订阅终端节点时,Amazon SNS 将向指定的终端节点发送一则确认消息。

ii.在终端节点收到确认消息后,订阅者应通过发送有效的响应来确认订阅请求。这时,Amazon SNS 才会认为订阅请求有效。如果质询没有获得响应,Amazon SNS 将不会向该终端节点发送任何通知。确认订阅的确切机制因所选的传输协议而异:

  • 对于 HTTP/HTTPS 通知,Amazon SNS 会首先将确认消息(包含令牌)发布到指定的 URL。监控 URL 的应用程序必须使用包含令牌的令牌调用 ConfirmSubscription API。
  • 对于 Email 和 Email-JSON 通知,Amazon SNS 将向指定地址发送一封包含嵌入链接的电子邮件。用户需要点击嵌入的链接来确认订阅请求。
  • 对于 SQS 通知,Amazon SNS 会将包含令牌的质询消息排入指定队列。监控队列的应用程序必须使用令牌调用 ConfirmSubscription API。

注意:对于为 Amazon SQS 队列订阅 Amazon SNS 主题的特定情况,上述明确的“选择加入”步骤不是必需的,而且两者都归同一个 Amazon Web Services 账户所有。

问:订阅请求在等待确认期间将保持待处理状态多长时间?

通过订阅请求发送到终端节点的确认消息中包含的令牌有效期为 3 天。

问:谁可以更改主题的权限?

只有主题的所有者才能更改该主题的权限。

问:用户如何验证通知消息是否是从 Amazon SNS 发送的?

为确保通知的真实性,Amazon SNS 将使用加密安全的非对称机制(基于证书的公私密钥对)对所有通知发送进行签名。Amazon SNS 会将其证书发布到一个众所周知的位置,并使用该证书的私钥对消息进行签名。开发者/应用程序可以获取证书,并使用证书的公钥验证通知中的签名,以确保通知确实由 Amazon SNS 发出。有关证书位置的更多详细信息,请参阅 Amazon SNS 详情页面。

问:发布者是否也必须为消息签名?

Amazon SNS 要求拥有 Amazon Web Services ID 的发布者使用 Amazon Web Services 的私有密钥签署消息来验证其消息;然后 Amazon SNS 将对签名进行验证。

问:发布者/订阅者能否使用 SSL 来保护消息?

可以,发布者和订阅者都可以使用 SSL 来帮助保护发送和接收消息的渠道。发布者可以通过 HTTPS 连接到 Amazon SNS,并通过 SSL 渠道发布消息。订阅者应将启用 SSL 的终端节点注册为订阅注册的一部分,通知将通过 SSL 通道发送到该终端节点。

问:订阅者需要哪些权限才能允许 Amazon SNS 向注册的终端节点发送通知?

接收通知的终端节点的所有者必须授予 Amazon SNS 向该端点发送消息的权限。

问:如何取消订阅?

订阅者可以由主题所有者、订阅所有者或其他人取消订阅 — 取决于用于确认订阅请求的机制。

  • 在调用 ConfirmSubscription API 调用时将 AuthenticateOnUnsubscribe 标志设置为 True 确认的订阅只能由主题所有者或
    订阅所有者取消订阅。
  • 如果订阅是匿名确认的,但未将 AuthenticateOnUnsubscribe 标志设置为 True,则可以匿名取消订阅。

在所有情况下,除非订阅所有者取消订阅,否则将向终端节点发送最终取消消息,让终端节点所有者可以轻松地重新订阅该主题(如果意外或错误地取消订阅请求)。有关 ConfirmSubscription API 的更多详细信息,请参阅 Amazon SNS 文档。

可靠性

问:我的数据发布到 Amazon SNS 后的持久性如何?

SNS 为它收到的所有消息提供持久存储。收到发布请求后,SNS 会在向发件人确认收到请求之前,跨多个可用区存储该消息的多个副本(到磁盘)。每个亚马逊云科技区域都有多个相互隔离的位置,称为可用区。尽管这种情况很少见,但如果一个区域发生故障,SNS 的运行和消息的持久性将会持续,而不会中断。

问:通知是否会包含多条消息?

不会,所有通知消息都将包含一条已发布的消息。

问:订阅者每条消息会收到多少次?

尽管大多数情况下,每条消息只会向您的应用程序传送一次,但 Amazon SNS 的分布式特性和瞬态的网络状况可能会导致订阅端偶尔出现重复的消息。开发人员在设计应用程序时应确保多次处理一条消息不会造成任何错误或不一致。

问:消息是否会按照其发布的确切顺序发送给我?

Amazon SNS 服务将尝试按照发布者在主题中发布消息的顺序发送消息。但是,网络问题可能会导致订阅端的消息顺序混乱。

问:消息发布后是否可以删除?

不可以,消息一旦成功发布到某个主题,就无法撤回。

问:Amazon SNS 是否保证将消息传送到订阅的终端节点?

是的,只要订阅的终端节点可以访问。如果 Amazon SNS 由于客户端或服务器端错误而无法访问订阅的终端节点,消息传输将失败。如果终端节点所有者删除了订阅的终端节点,或者其访问权限的更改阻止 Amazon SNS 向此终端节点传送消息,则会发生客户端错误。当为订阅的终端节点提供支持的服务(例如 Amazon SQS 或 Amazon Lambda)不可用时,就会发生服务器端错误。当 Amazon SNS 收到客户端错误或继续收到超出相应重试策略指定的重试次数的消息的服务器端错误时,除非订阅附加了死信队列,否则 Amazon SNS 将丢弃该消息。有关更多信息,请参阅消息传输重试次数Amazon SNS 死信队列

问:如果订阅终端节点不可用,Amazon SNS 消息会怎样?

如果消息在第一次尝试时无法成功传递,则 Amazon SNS 将执行 4 个阶段的重试策略:1) 两次尝试之间无延迟的重试;2) 两次尝试之间延迟最短的重试;3) 根据回避模式重试;4) 两次尝试之间延迟最长的重试。当消息传输重试策略用尽时,Amazon SNS 可以将消息移至死信队列 (DLQ)。有关更多信息,请参阅消息传输重试次数Amazon SNS 死信队列

配额和限制

问:每个主题的主题数量或订阅者数量是否有配额?

默认情况下,SNS 为每个主题提供 1000 万个订阅,为每个账户提供 100000 个主题。要申请更高的配额,请联系支持部门

问:一条消息中可以包含多少数据以及哪些类型的数据?

Amazon SNS 消息最多可包含 256KB 的文本数据,包括 XML、JSON 和无格式文本。

接受以下 Unicode 字符:

#x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]

已发布数据中每 64KB 的数据块按 1 次请求计费。例如,对 256KB 有效负载的 1 次 API 调用将按 4 次请求计费。

问:可以对一个主题应用多少次消息筛选?

默认情况下,每个区域的每个账户可以对一个主题应用 200 个筛选策略。如果需要应用更多筛选,请联系我们。

原始消息传送

问:什么是原始消息传递?

您可以选择以原始形式发送消息,即完全按照您发布的形式传送消息。默认情况下,消息以 JSON 编码传送,JSON 提供有关消息和主题的元数据。可以通过在订阅上设置“RawMessageDelivery”属性来启用原始消息传送。可以使用 Amazon Web Services 管理控制台或使用 API SetSubscriptionAttributes 来设置此属性。

问:如果未在订阅上设置原始消息传送属性,则默认行为是什么?

默认情况下,如果未设置此属性,则消息将以 JSON 格式传送,即当前行为。这可确保现有应用程序继续按预期运行。

问:哪些类型的终端节点支持原始消息传送?

SQS 和 HTTP (S) 终端节点支持原始消息传送。发送到 Lambda 和电子邮件终端节点的行为将相同,而不受“RawMessageDelivery”属性的影响。

问:如何将原始消息传送到 HTTP 终端节点?

当原始格式的消息传送到 HTTP/s 端点时,消息正文将包含在 HTTP POST 的正文中。

对 Amazon Lambda 的 SNS 支持

问:在 Amazon SNS 中支持 Amazon Lambda 终端节点意味着什么?

您可以通过向订阅了 Amazon Lambda 函数的 Amazon SNS 主题发布消息来调用您的 Amazon Lambda 函数。由于 Amazon SNS 支持消息扇出,因此发布单条消息除了可以将通知发送到受支持的 Amazon SNS 目标(如 HTTP 终端节点、SQS 和电子邮件)之外,还可以调用不同的 Amazon Lambda 函数或调用 Lambda 函数。

问:什么是 Amazon Lambda?

Amazon Lambda 是一项计算服务,能够在响应事件时运行您的代码并自动为您管理计算资源,让您可以轻松构建快速响应新信息的应用程序。有关 Amazon Lambda 以及如何创建 Amazon Lambda 函数的更多信息,请参见此处

问:Amazon Lambda 函数和 Amazon SNS 有何用途?

通过为 Amazon Lambda 函数订阅 Amazon SNS 主题,您可以执行自定义消息处理。您可以调用 Amazon Lambda 函数来提供自定义消息传输处理,方法是首先将消息发布到 Amazon Lambda 函数,让 Lambda 函数修改消息(例如本地化语言),然后筛选这些消息并将其路由到其他主题和终端节点。已经发送 Amazon SNS 通知的应用程序和服务(例如 Amazon CloudWatch)现在可以立即利用 Amazon Lambda,而无需为自定义消息处理预置或管理基础设施。您还可以将传送到 Amazon Lambda 函数作为发布到其他 Amazon Web Services 服务(例如 Amazon Kinesis 或 Amazon S3)的一种方式。您可以为 Amazon Lambda 函数订阅 Amazon SNS 主题,然后让 Lambda 函数依次写入另一个服务。

问:如何在 Amazon SNS 中激活 Amazon Lambda 终端节点支持?

首先,您需要通过 Amazon Web Services 账户和 Amazon Lambda 控制台创建一个 Amazon Lambda 函数,然后使用 Amazon SNS 控制台Amazon SNS API 为该 Amazon Lambda 函数订阅主题。完成此操作后,您发布到 Lambda 函数订阅的 Amazon SNS 主题的任何消息都将传送到相应的 Lambda 函数以及订阅该主题的任何其他目标。

问:将消息从 Amazon SNS 传送到 Amazon Lambda 函数有什么作用?

从 Amazon SNS 传送到 Amazon Lambda 函数的消息会创建 Amazon Lambda 函数的实例,并使用您的消息作为输入来调用该实例。有关消息格式的更多信息,请参阅 Amazon SNS 文档和 Amazon Lambda 文档。

问:此功能的费用是多少?

使用 Amazon SNS 发布消息的费用为每 100 万次请求 ¥3.40。除了使用 Amazon Web Services 服务产生的费用外,向 Amazon Lambda 函数传送消息不收取任何额外费用。Amazon SNS 的免费套餐包含每月 100 万次请求。有关更多信息,请参阅 Amazon SNS 定价。Amazon Lambda 函数根据函数请求次数和代码执行时间收费。Amazon Lambda 免费套餐包括每月 100 万次请求和每月 400000 GB-秒的计算时间。有关更多信息,请参阅 Amazon Lambda 定价

问:我能否为其他人创建的 Amazon Lambda 函数订阅我拥有的 Amazon SNS 主题?

我们目前不允许 Amazon Web Services 所有者订阅属于其他账户的 Amazon Lambda 函数。您可以为自己的 Amazon Lambda 函数订阅您自己的 Amazon SNS 主题,也可以为您的 Amazon Lambda 函数订阅另一个账户创建的 Amazon SNS 主题,前提是该 SNS 主题的主题策略允许。

问:我可以订阅某个 Amazon SNS 主题的 Amazon Lambda 函数数量是否有配额?

Amazon SNS 将 Amazon Lambda 函数视为任何其他目的地。默认情况下,SNS 为每个主题提供 1000 万个订阅。

问:我可以将哪些数据传递给我的 Amazon Lambda 函数?

由于 Amazon SNS 消息传输而调用 Amazon Lambda 函数时,Amazon Lambda 函数将通过 SNS 事件接收消息 ID、主题 ARN、消息有效负载和消息属性等数据。

问:我能否跟踪向 Amazon Lambda 函数发送消息的尝试的传输状态?

要跟踪消息发送的成功或失败状态,您需要激活 Amazon SNS 的传送状态功能。有关如何激活此功能的更多信息,请阅读我们的博客。

问:Amazon Lambda 目前在哪些区域提供?

有关完整列表,请参阅亚马逊云科技区域和终端节点

问:我的 Amazon Lambda 函数是否需要与我的 Amazon SNS 使用点位于同一区域?

您可以在任何区域为您的 Amazon Lambda 函数订阅 Amazon SNS 主题。

问:调用 Amazon Lambda 函数是否会产生任何数据传输费用?

数据传输费用适用于向 Amazon Lambda 函数传送消息。有关更多信息,请参阅我们的定价

问:Amazon Lambda 函数的并发性是否有任何配额?

Amazon Lambda 目前支持每个区域的每个 Amazon Web Services 账户并发执行 1000 个函数。如果您向 Amazon Lambda 传输的 Amazon SNS 消息导致超出这些并发配额,则您的 Amazon SNS 消息传输将受到限制。如果 Amazon Lambda 限制了 Amazon SNS 消息,则 Amazon SNS 将重试发送尝试。有关 Amazon Lambda 并发配额的更多信息,请参阅 Amazon Lambda 文档

问:Amazon SNS 能否使用我在其他服务(例如 Amazon S3)中使用的相同的 Amazon Lambda 函数?

您可以使用与其他服务相同的 Amazon Lambda 函数,只要该函数除了解析其他服务的事件格式外,还可以解析来自 Amazon SNS 的事件格式。 

关闭
1010 0766
由光环新网运营的
北京区域
1010 0966
由西云数据运营的
宁夏区域
关闭
由光环新网运营的
北京区域
由西云数据运营的
宁夏区域