Amazon SNS 常见问题
概览
问:什么是 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 的 AWS 管理控制台为用户提供了简便的点击式界面
问:Amazon SNS 通知有哪些典型用途?
Amazon SNS 服务可满足各种需求,包括事件通知、监控应用程序、工作流程系统、时间敏感型信息更新、移动应用程序,以及生成或使用通知的任何其他应用程序。例如,在工作流系统中,Amazon SNS 可用来在分布式计算机应用程序中中继事件、在数据存储之间移动数据或更新业务系统中的记录。有关验证、批准、库存更改和发货状态的事件更新和通知,将会立即传输到相关系统组件及最终用户。一种常见的模式是使用 SNS 将消息发布到 Amazon SQS 消息队列,进而以可靠的方式将消息异步发送到一个或多个系统组件。Amazon SNS 的另一种典型用途是将时间关键型事件中继到移动应用程序及设备。由于 Amazon SNS 具备很高的可靠性和可扩展性,所以如果开发人员要创建基于实时事件的应用程序,那他们必会受益匪浅。
问:Amazon SNS 的工作原理是什么?
Amazon SNS 非常容易上手。开发人员必须首先创建一个“主题”(即一个“接入点”)– 标明特定的主题或事件类型,用来发布消息并允许客户端订阅通知。创建主题后,主题所有者可为其设置策略,例如,限制可以发布消息或订阅通知的人员,或者指定支持哪些通知协议(即 HTTP/HTTPS、电子邮件、SMS)。订阅者是指有兴趣从关注的主题接收通知的客户端;它们可以订阅主题,也可以由主题所有者为其订阅。订阅者需要为传送的通知指定协议和终端节点(URL、电子邮件地址等)。当发布者有需要通知订阅者的信息或更新时,他们可以向该主题发布一条消息 – 这样将立即触发 Amazon SNS 向所有适用的订阅者发送该消息。
问:Amazon SNS 与 Amazon SQS 有何不同?
Amazon Simple Queue Service (SQS) 和 Amazon SNS 都是 AWS 中的消息收发服务,但为开发人员提供了不同的优势。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 详细信息页面上的“Sign up for Amazon SNS” 按钮。您必须拥有一个 Amazon Web Services 账户才能访问此服务;如果还没有该账户,则在您开始 Amazon SNS 注册过程时,系统会提示您创建一个账户。注册后,请参阅 Amazon SNS 文档和《入门指南》,以便开始使用 Amazon SNS。使用 AWS 管理控制台,您可以轻松地创建主题、添加订阅者、发送通知和编辑主题策略,所有这一切操作都能从您的浏览器中执行。
问:AWS 管理控制台中是否支持 Amazon SNS?
AWS 管理控制台支持 Amazon SNS,并提供了一个基于 Web 的点击式界面来访问和管理 Amazon SNS。使用 AWS 管理控制台,您可以创建主题、添加订阅者和发送通知,所有这一切操作都能从您的浏览器中执行。此外,您还可以使用 AWS 管理控制台轻松将消息发布到所选的终端节点(HTTP、SQS、Lambda、移动推送、电子邮件或 SMS)并编辑主题策略来控制发布者和订阅者的访问权限。
问:各个区域中 Amazon SNS 服务的接入点是什么?
有关所有 Amazon SNS 服务接入点的最新列表,请参阅 AWS 文档的 AWS 区域和终端节点部分。
问:我能否获得从我的账户发起的所有 SNS API 调用的历史记录,以便用于安全分析和运营方面的故障排除?
可以。SNS 支持 AWS CloudTrail,该服务是一种记录账户的 AWS API 调用,并向您发送日志文件的 Web 服务。借助 CloudTrail,您可以获得 API 调用者标识、API 调用时间、API 调用者源 IP 地址、请求参数和 SNS 返回的响应元素之类信息的历史纪录。
SNS 目前仅支持对身份验证调用进行 CloudTrail 审计。现在不能提供未经身份验证的 ConfirmSubscription 和 Unsubscribe 调用的 CloudTrail 审计日志。有关更多信息,请参阅 SNS 开发人员指南的 CloudTrail 部分。
要获取从您的账户发起的 SNS API 调用的历史记录,您只需在 AWS 管理控制台中打开 AWS CloudTrail 即可。如需了解有关 AWS CloudTrail 的更多信息,请单击此处。
计费
问:Amazon SNS 的收费如何?
使用 Amazon SNS 没有最低消费,您只需按实际使用量付费。用户支付的费用为:每 100 万个 Amazon SNS 请求 0.50 美元;每 100000 个通过 HTTP 传送的通知 0.06 美元;每 100000 个通过电子邮件传送的通知 2.00 美元。对于 SMS 消息,收费因目的地国家/地区而异。
Amazon SNS 还提供免费套餐,可让用户免费开始使用 Amazon SNS。每个月,Amazon SNS 客户对于以下用量无需付费:前 100 万个 Amazon SNS 请求;前 100000 个通过 HTTP 传送的通知;以及前 1000 个通过电子邮件传送的通知。
有关定价和数据传输费用的其他详细信息,请参阅 Amazon SNS 功能页面。
问:Amazon SNS 的使用如何收费和计费?
开始使用服务时,没有安装费。每个月底将自动向您的信用卡收取当月使用费。您可以随时在 Amazon Web Services 网站上查看当前账单期的费用,只需登录您的 Amazon Web Services 账户,并单击“Your Web Services Account”下的“Account Activity”。
问:我的 Amazon SNS 的账单周期怎么计算?
您的 Amazon SNS 账单周期从每月第一天开始,到每月的最后一天结束。您的月度费用将在每月结束时汇总。
问:价格是否含税?
除非另行说明,否则我们的价格不包含适用的税费和关税(包括增值税和适用的销售税)。使用日本账单地址的客户若要使用 AWS,则需缴纳日本消费税。了解更多。
特性和功能
问:Amazon SNS 主题有什么格式要求?
主题名称不能超过 256 个字符。允许使用字母数字字符以及连字符 (-) 和下划线 (_)。AWS 账户中的主题名称必须唯一。删除主题后,可以重新使用该主题名称。创建主题后,Amazon SNS 将为该主题分配唯一的 ARN(Amazon 资源名称),其中包括服务名称 (SNS)、区域、用户的 AWS ID 和主题名称。ARN 将作为创建主题时使用的 API 调用的一部分返回。无论何时发布者或订阅者需要对该主题执行任何操作,都应引用该唯一主题 ARN。
下面是由 AWS 账户 ID 为“123456789012”的用户创建并在美国东部区域托管的名为“mytopic”的主题的 ARN:
arn:aws:sns:us-east-1:1234567890123456:mytopic 注意:用户不应尝试从其单独的组件构建主题 ARN,而应始终使用 API 调用返回的名称来创建主题。
问:Amazon SNS 可使用哪些操作?哪些人可执行这些操作?
Amazon SNS 提供了一组简单的 API 以便为主题所有者、订阅者和发布者启用事件通知。
所有者的操作:
- CreateTopic – 创建新主题。
- DeleteTopic – 删除以前创建的主题。
- ListTopics – 列出特定用户 (AWS ID) 拥有的主题。
- ListSubscriptionsByTopic – 列出特定主题的订阅
- SetTopicAttributes – 设置/修改主题属性,包括设置和修改发布者/订阅者权限、支持的传输协议等
- GetTopicAttributes – 获取/查看主题已有的属性
- AddPermission – 向所选的用户授予指定操作的访问权限
- RemovePermission – 取消所选用户对于指定操作的权限
订阅者的操作:
- Subscribe – 注册对特定主题的新订阅,这将从 Amazon SNS 生成一条确认消息
- ConfirmSubscription – 响应订阅确认消息,确认从所订阅的主题接收通知的订阅请求
- UnSubscribe – 取消以前注册的订阅
- ListSubscriptions – 列出特定用户 (AWS ID) 拥有的订阅
发布者的操作:
- Publish:向主题发布新的消息。
问:为什么有两种不同的 API 用于列出订阅?
用于列出订阅的两种 API 执行不同的功能并返回不同结果:
- ListSubscriptionsByTopic API 允许主题所有者查看所有主动注册了某主题的订阅者列表。
- ListSubscriptions API 允许用户获得其全部有效订阅(关于一个或多个主题)的列表。
问:有哪些不同的传输格式/协议用于接收通知?
“SQS”– 用户可以将 SQS 标准或 FIFO 队列指定为终端节点;Amazon SNS 将在指定队列对通知消息排队(然后,订阅者就可以使用 ReceiveMessage、DeleteMessage 等 SQS API 进行处理了)。
- “HTTP”、“HTTPS”– 订阅者在注册订阅时指定 URL;通知将通过 HTTP POST 传送到指定的 URL。
- “电子邮件”、“电子邮件-JSON”– 消息以电子邮件形式发送到注册的地址。“电子邮件-JSON”以 JSON 对象的形式发送通知,而“电子邮件”则是发送基于文本的电子邮件。
- “SQS”– 用户可以将 SQS 标准队列指定为终端节点;Amazon SNS 将在指定队列对通知消息排队(然后,订阅者就可以使用 ReceiveMessage、DeleteMessage 等 SQS API 进行处理了)。
- “SMS”– 消息以 SMS 文本消息的形式发送到注册的电话号码。
问:主题所有者是否可以控制他们所创建/拥有的主题中允许的传输协议?
主题所有者可以通过访问控制策略设置相应的权限,由此为其主题配置特定的传输协议。
问:所有者如何设置访问控制策略?
请参阅《Amazon SNS 入门指南》,了解设置访问控制策略的概况。
问:单个主题是否支持通过多种传输协议进行订阅?
Amazon SNS 主题订阅者可以通过主题支持的任何传输协议接收通知。主题可支持通过多种传输协议来传送订阅和通知。
问:订阅者是否可以选择性地只接收一部分发布至某个主题的消息?
可以。您可以使用 Amazon Simple Notification Service (SNS) 上的消息筛选功能来构建更简单且更精简的发布/订阅架构。利用消息筛选功能,Amazon SNS 主题订阅者能够选择性地只接收一部分他们感兴趣的消息,而不是接收发布至某个主题的所有消息。要监控 SNS 订阅筛选策略,请使用 Amazon CloudWatch 指标,系统将为您自动收集这些指标。您还可以使用 AWS CloudFormation 模板中的 AWS::SNS::Subscription 资源类型快速部署利用 SNS 消息筛选功能的解决方案。有关更多详细信息,请试用我们的 10 分钟教程筛选发布到主题的消息,或参阅我们文档中的使用 Amazon SNS 筛选信息。
问:Amazon SNS 是否可与其他 AWS 服务配合使用?
Amazon SNS 可与 Amazon SQS、Amazon EC2 和 Amazon S3 等 AWS 产品配合使用。下面是一个订单处理工作流系统将 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 是否在提供 AWS 产品的所有区域均可用?
有关 Amazon SNS 可用性的最新信息,请参阅 AWS 文档的 AWS 区域和终端节点部分。
问:客户需要多久才能使用以前的主题名称重新创建主题?
通常,大约在删除名称相同的旧主题 30-60 秒后,便可重新使用该主题名称了。确切的时间取决于该主题上有效的订阅数 – 主题订阅者越少,重新使用需等待的时间就越短;主题订阅者人数越多,等待的时间就越长。
FIFO 主题
问:什么是 SNS FIFO 主题?
与标准 SNS 主题类似的是,SNS FIFO 主题可使用户发布消息到主题中,从而使消息可以传输到一系列的订阅端点。如果必须按顺序(先进先出)一次性将这些消息传输给订阅用户,且您希望 SNS 来处理它,则 SNS FIFO 主题是最好的办法。Amazon SNS FIFO 主题可以将按顺序列队的消息传输到 Amazon Simple Queue Service(Amazon SQS)FIFO 队列中,从而为分布式应用程序提供一致的端到端消息排序。您现在可以减少处理高吞吐量、一致性排序交易所需的工作,并简化您的消息收发架构。当不需要严格排序时,Amazon FIFO 主题还可以将消息传送到 Amazon SQS 标准队列,从而使您能够灵活地设计应用程序。相关示例使用案例包括银行交易日志、股票报价器、航班跟踪器、价格更新、新闻广播和库存管理。
问:应该何时使用 SNS FIFO 主题,何时使用 Kinesis Data Streams?
SNS FIFO 主题和 Kinesis Streams 都可以让您构建需要严格顺序的多对多消息收发的应用程序。SNS FIFO 主题可以进一步发现需要大量按顺序扇出(最多 100 个订阅者)的应用程序集成使用案例。另一方面,Kinesis Streams 支持最高达 5 个订阅者的按顺序扇出,通常用于分析和异常检测使用案例。
传输
问:用户如何订阅通过电子邮件传送的通知?
要接收特定主题的电子邮件通知,订阅者应将协议指定为“电子邮件”或“电子邮件-JSON”,并提供有效的电子邮件地址作为终端节点。使用 AWS 管理控制台或直接调用 Amazon SNS API 即可完成此操作。然后,Amazon SNS 将发送一份包含确认链接的电子邮件到指定的电子邮件地址,并要求查阅该电子邮件地址的用户明确同意接收该特定主题的电子邮件通知。用户通过单击提供的链接确认订阅后,系统将向该电子邮件地址传送此主题下发布的所有消息。
问:为什么 Amazon SNS 提供两种不同的传输协议,以通过电子邮件接收通知?
这两种电子邮件传输协议面向两种不同的客户/最终用户类型。“电子邮件-JSON”发送 JSON 对象形式的通知,适用于以编程方式处理电子邮件的应用程序。“电子邮件”传输适用于最终用户/消费者,通知为普通的文本消息,易于阅读。
问:用户是否可更改通过“电子邮件/电子邮件-JSON”发送的通知的主题和显示名称?
Amazon SNS 允许用户将电子邮件的“Subject”字段指定为从 Publish API 调用中传入的参数,并且对于每个已发布的消息都可以不同。使用 SetTopicAttributes API 可设置主题的显示名称 – 该名称适用于从此主题发送的所有电子邮件。
问:要接收 Amazon SNS 的通知,订阅者是否需要对其电子邮件设置进行特别配置?
大多数情况下,用户无需特别操作即可接收 Amazon SNS 的订阅确认和通知。不过,有些时候电子邮件提供商的默认设置或其他用户特定的配置会误将电子邮件转移到垃圾邮件文件夹。为确保用户可看到 Amazon SNS 发送的确认消息和通知,用户可以将“no-reply@sns.amazonaws.com”添加到联系人列表,并检查其垃圾邮件文件夹中是否有 Amazon SNS 的消息。
问:用户是否需要在订阅前创建 SQS 队列,以防电子邮件地址作为终端节点进入 SQS 队列? 队列需要什么权限?
使用 SQS 控制台,用户应先创建 SQS 队列,然后才能使其订阅主题。在控制台上选择此队列,并从工具栏的“Queue Actions”下拉列表中选择“Subscribe Queue to SNS Topic”。在订阅对话框中,从“Choose a Topic”下拉列表中选择主题,并单击“Subscribe”按钮。要获得完整的分步说明,请参阅 Amazon SNS 文档。
问:要接收 Amazon SNS 通知,开发人员需要如何设置 Amazon SQS 队列?
要让 Amazon SNS 向 SQS 队列传送通知,开发人员应订阅主题,指定“SQS”为传输协议,并指定有效的 SQS 标准队列为终端节点。为了使 SQS 队列能够接收来自 Amazon SNS 的通知,该 SQS 队列所有者必须订阅有关 Amazon SNS 的主题,以便成功地向队列提交消息。
如果订阅的 Amazon SNS 主题和接收通知的 SQS 队列归同一用户所有,则无需其他操作。发布到该主题的任何消息将自动传送到指定的 SQS 队列。如果 SQS 队列所有者不是该主题的所有者,则 Amazon SNS 将要求明确确认订阅请求。
有关 SQS 队列订阅主题以及为 SQS 队列设置访问控制策略的更多详细信息,请参阅 Amazon SNS 文档。
问:如何向多个 SQS 队列群发相同的消息?
首先,使用 SNS 创建一个 SNS 主题。然后,创建多个 SQS 标准队列并为其订阅该 SNS 主题。现在,无论消息何时发送到 SNS 主题,都会被群发到 SQS 队列,也就是说,SNS 会将该消息传送给所有订阅该主题的 SQS 队列。
问:Amazon SNS 发送的结构化通知消息是什么格式?
由 Amazon SNS 发送并通过 HTTP、HTTPS、电子邮件-JSON 和 SQS 传输协议传送的通知消息包含一个简单的 JSON 对象,它由下列信息组成:
- MessageId:通用唯一标识符,它对于每个发布的通知是唯一的。
- Timestamp:发布通知的时间(GMT 时间)。
- TopicArn:此消息发布到的主题
- Type:传输消息的类型,对于通知传输,将设置为“Notification”。
- UnsubscribeURL:取消订阅此主题终端节点并阻止接收更多通知的链接。
- Message:从发布者接收到的消息负载(正文)。
- Subject:“Subject”字段 – 如果作为可选参数随同消息包含在 publish API 调用中。
- Signature:Message、MessageId、Subject(如有)、Type、Timestamp 和 Topic 值的 Base64 编码“SHA1withRSA”签名。
- SignatureVersion:使用的 Amazon SNS 签名版本。
通过“电子邮件”传输协议发送的通知消息仅包含从发布者接收到的负载(消息正文)。
问:用户如何订阅通过 SMS 传送的通知?
请参阅下面的“SMS 相关问题”一节。
安全性
问:用户如何确保向我的主题发送的消息是安全的?
针对 Amazon SNS 的所有 API 调用都会根据该用户的 AWS ID 和签名进行验证。此外,我们建议用户通过连接到我们安全的 SSL 终端节点,确保网络传输数据的安全性。
问:谁可以创建主题?
只有已注册 Amazon SNS、具有有效 AWS ID 的用户才能创建主题。创建主题最简单的方式是使用 AWS 管理控制台。此外,也可以通过 CreateTopic API 创建。可通过以下网址访问 AWS 管理控制台:http://aws.amazon.com/console
问:多个用户是否可以向单个主题发布消息?
主题所有者可以设置明确权限,以允许多个用户(具有有效 AWS ID)向一个主题发布消息。默认情况下,只有主题所有者拥有向主题发布消息的权限。
问:所有者如何授予/撤消主题的发布或订阅权限?
AddPermission 和 RemovePermission API 提供简洁的界面,供开发人员添加和删除主题的权限。但是,对于条件性访问和更高级的使用案例,用户则应使用访问控制策略来管理权限。管理权限最简单的方式是使用 AWS 管理控制台。可通过以下网址访问 AWS 管理控制台:http://aws.amazon.com/console
问:主题所有者如何授予订阅者访问权限? 订阅者是否必须拥有有效的 AWS ID?
无论用户有/无 AWS ID,Amazon SNS 都能让他们轻松接收通知。主题所有者可使用访问控制策略为主题设置相应的权限,以便对订阅者授予/限制访问权限。用户可通过两种方式从 Amazon SNS 接收通知:
- 拥有 AWS ID 的用户:拥有有效 AWS ID 的订阅者(请参阅此链接,了解获取 AWS ID 的详细信息)可以直接订阅任何主题 – 只要主题所有者已向他们授予了相应的权限。AWS ID 将作为订阅注册的一部分予以验证。
- 其他用户:主题所有者可以代表没有 AWS ID 的用户订阅和注册终端节点。
在以上两种情况下,订阅终端节点的所有者都需要通过答复 Amazon SNS 发送的确认消息,明确同意并确认订阅。
问:Amazon SNS 如何对 API 调用进行身份验证?
Amazon SNS 将对所有 API 调用进行身份验证,其方法是要求使用 AWS ID 账户的密钥签署请求,并验证包含在请求中的签名。
问:Amazon SNS 如何验证订阅请求,以确保通知不会作为垃圾邮件发送给用户?
作为订阅注册的一部分,Amazon SNS 将确保通知仅发送到已注册的有效订阅者/终端节点。为防止垃圾邮件并确保订阅者终端节点确实有兴趣接收特定主题的通知,Amazon SNS 将通过“2 步式握手”要求订阅者明确同意接收:
i.当用户首次调用 Subscribe API 并订阅终端节点时,Amazon SNS 将向指定的终端节点发送确认消息。
ii.当终端节点收到确认消息后,订阅者应通过发送有效答复确认订阅请求。只有此时 Amazon SNS 才会将订阅请求视为有效。如果对询问没有响应,Amazon SNS 则不会向该终端节点发送任何通知。确认订阅的具体机制因所选的传输协议而异:
- 对于 HTTP/HTTPS 通知,Amazon SNS 将首先向指定的 URL 发布确认消息(附带令牌)。监控 URL 的应用程序必须使用附带的令牌调用 ConfirmSubscription API。
- 对于“电子邮件”和“电子邮件-JSON”通知,Amazon SNS 将向指定地址发送电子邮件,其中包含嵌入链接。用户需要单击该嵌入链接来确认订阅请求。
- 对于 SQS 通知,Amazon SNS 会将包含令牌的询问消息排入指定的队列。监控队列的应用程序必须使用该令牌调用 ConfirmSubscription API。
注意:如果您向您 Amazon SNS 主题订阅 Amazon SQS 队列,且两者属于同一 AWS 账户“所有”,在这种特殊情况下,您不必执行上述明确“同意”操作。
问:等待确认时,订阅请求需要在待处理状态保持多长时间?
对于订阅请求,发送到终端节点的确认消息中附带的令牌有效期为 2 天。
问:谁可以更改主题的权限?
只有主题所有者可以更改该主题的权限。
问:用户如何验证通知消息是从 Amazon SNS 发出的?
为确保通知的真实性,Amazon SNS 将使用密码安全、非对称的机制(基于证书的私有-公有密钥对)来签署传送的所有通知。Amazon SNS 会将其证书发布到用户熟知的位置(例如,在美国东部区域为 http://sns.us-east-1.amazonaws.com/SimpleNotificationService.pem),并使用该证书的私有密钥签署消息。开发人员/应用程序可使用该证书的公有密钥获取证书并验证通知中的签名,以确保该通知确实是由 Amazon SNS 发出的。有关证书位置的更多详细信息,请参阅 Amazon SNS 详细信息页面。
问:发布者是否也必须签署消息?
Amazon SNS 要求拥有 AWS ID 的发布者使用其 AWS 秘密密钥签署消息以进行验证,然后再由 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 是否符合 HIPAA 要求?
是,AWS HIPAA 合规性计划将 Amazon SNS 作为一项符合 HIPAA 要求的服务包含在内。如果您与 AWS 签订了已生效的商业伙伴协议 (BAA),那么您现在可以使用 Amazon SNS 构建符合 HIPAA 要求的应用程序。如果您未签订商业伙伴协议或者在对您的 HIPAA 合规应用程序使用 AWS 的方面有其他问题,请联系我们,以获取详细信息。请注意,Amazon SNS 移动推送通知和 SMS 功能不符合服务的 HIPAA 资格要求,因此,不适用于传输受保护的健康信息 (PHI)。
要了解更多信息,请参阅以下资源:
要查看将 Amazon SNS 纳入范围内的合规性计划的最新列表,请参阅 AWS 按合规性计划提供的范围内服务。
问:Amazon SNS 还应符合哪些要求?
请参阅 AWS 按合规性计划提供的范围内服务,了解有关 SNS 和其他 AWS 产品的最新信息。
可靠性
问:我的数据发布到 Amazon SNS 后的持久性如何?
SNS 为接收的所有消息提供持久存储。接收到发布请求后,SNS 会在向发送者确认接收请求前跨多个可用区存储多个副本(到磁盘)。每个 AWS 区域都有多个相互隔离的位置,称为可用区。虽然罕见,但如果一个可用区出现故障,SNS 的运营和消息的持久性会继续保持而不会中断。
问:一条通知是否会包含多条消息?
不会,所有通知消息只包含一条发布的消息。
问:每条消息会让订阅者收到多少次?
虽然大多数情况下每条消息只会向您的应用程序传送一次,但 Amazon SNS 的分布式特点和瞬变的网络条件可能导致订阅者端偶尔收到重复的消息。开发人员应将其应用程序设计为多次处理一条消息不会产生任何错误或不一致性。
问:消息是否会按其发布的确切顺序传送给我?
Amazon SNS 服务将尝试按消息发布到主题的顺序传送发布者的消息。但是,网络问题可能会导致订阅者端的消息顺序错乱。
问:是否可删除已发布的消息?
不可以,一旦将消息成功发布到主题,就无法再撤消。
问:Amazon SNS 是否确保会将消息传送到订阅的终端节点?
是,只要订阅的终端节点可访问。当 Amazon SNS 由于客户端或服务器端错误而无法访问订阅的终端节点时,消息传送失败。当订阅的终端节点被终端节点拥有者删除时,或者其访问权限更改,从而阻止 Amazon SNS 将消息传输到此终端节点时,将发生客户端错误。当支持订阅终端节点的服务(如 Amazon SQS 或 AWS Lambda)不可用时,将发生服务器端错误。当 Amazon SNS 接收到客户端错误或继续接收到消息超出相应重试策略指定的重试数量的服务器端错误,Amazon SNS 将丢弃该消息,除非将死信队列附加到订阅。有关更多信息,请参阅消息传输重试和 Amazon SNS 死信队列。
问:如果订阅终端节点不可用,Amazon SNS 消息会如何?
如果初次尝试时无法成功传送消息,Amazon SNS 将实施一个 4 阶段重试策略:1) 无延迟重试;2) 最短延迟重试;3) 退避模型重试;4) 最长延迟重试。当消息传输重试策略用尽时,Amazon SNS 可以将消息移动至死信队列 (DLQ)。有关更多信息,请参阅消息传输重试和 Amazon SNS 死信队列。
Worldwide SMS
问:Worldwide SMS 功能的特点有哪些?
您可以使用 Amazon SNS 向 200 多个国家/地区发送 SMS(文本)消息。如果当地法律法规有相关规定,您就必须先从收件人那里获取权限,然后才能将 SMS 消息发送至其电话号码。Amazon SNS 现在通过 AWS End User Messaging 向您发送 SMS 消息。另外,您还可以设置账户级别和消息级别的开销配额,以避免意外超支。
问:我应该将哪些 SMS 消息标记为“事务型”或“促销型”?
您应该根据 SMS 消息的内容和意图将短信标记为“事务型”或“促销型”。您必须选择的 SMS 消息类型由法规或目的地国家电信运营商或监管机构提供的最佳实践建议指定。有关消息路由的更多信息以及短信的正确类型,请访问消息路由。
问:什么是发端 ID?Amazon SNS 支持哪些类型的组织?
向手机号码发送短信时,它会通过与您的 AWS 账户关联的电话号码或发件人 ID 发送。这些统称为发端 ID。AWS 支持各种类型的发端 ID,包括短代码、长代码、10DLC 和发送者 ID。要请求和购买发端 ID,请访问《AWS End User Messaging 使用指南》中的请求电话号码。SMS 工作负载的所有发端 ID 均由 AWS End User Messaging 管理,并可与 Amazon SNS 结合使用以发送 SMS。您可以访问 AWS End User Messaging 控制台,查看您的账户中可用的发端 ID 列表。要了解更多信息,请访问SMS 概念。
问:在哪里可以了解发送 SMS 消息的最佳实践?
发送 SMS 消息时,请务必了解并遵守根据计划向其发送短信的所有目的地国家/地区的法律、法规和运营商要求。要了解更多信息,请访问 SMS 最佳实践。
问:什么是账户级别和消息级别的开销配额?其工作原理如何?
您可以针对 AWS 账户和单独的消息指定开销配额,且这些配额仅适用于发送 SMS 消息的费用。
默认开销配额为每个账户每月 1.00 USD(如果未指定)。如果您想提高此配额,请提交 SNS 配额提高申请案例。对于“新的配额值”,请输入您所需的月度开销配额。在“使用案例描述”字段中,解释您申请提高 SMS 月度开销配额的原因。
Amazon SNS 会发送您发布的 SMS 消息,但是您的 SMS 流量所产生的总费用会低于您在该日历月中的开销配额。一旦超过开销配额,Amazon SNS 会立刻停止发送消息,直到您提高开销配额或下一个日历月开始为止。同样,您也可以针对单独的消息指定开销配额,Amazon SNS 会在费用不超过该配额的情况下发送消息。一旦超过账户级别开销配额,无论是否超过消息级别开销配额,Amazon SNS 都将不再发送您的 SMS 消息。
问:是否支持双向 SMS?
Amazon SNS 通过 AWS End User Messaging 支持双向 SMS 功能。要启用双向消息(当地法规要求退出除外),请访问双向 SMS 消息。
问:我是否需要先向某个 SNS 主题订阅电话号码才能向其发送 SMS 消息?
现在,您无需先向某个 Amazon SNS 主题订阅电话号码就可以向其发送 SMS 消息。您可以直接使用 Amazon SNS 控制台或 Amazon SNS API 中的 Publish 请求向某个电话号码发布消息。
问:AWS 是否提供可购买的长代码或短代码?
是的。您可以预留专用的短代码、长代码和其他发端 ID 类型。您可以通过 AWS End User Messaging 控制台请求发端 ID。有关更多信息,请参阅请求电话号码。
问:AWS 是否提供用于购买的长代码?
是的。您可以按照此处的说明购买长代码以便与 Amazon SNS 结合使用。
问:SMS 通知是否会来自特定的来源号码?
Amazon SNS 将会使用为您的账户配置的号码。它将优先使用专用的短代码,然后才会使用专用的长代码。如果您没有专用的号码,Amazon SNS 将转回使用一组共享的号码来发送 SMS 通知。如果使用共享的号码,在向特定目标电话号码发送消息时,Amazon SNS 会尝试使用同一号码。这称为“粘性发件人 ID”。但是,根据网络状况和可用吞吐量等各种因素,Amazon SNS 可能会使用不同的号码。
要控制 Amazon SNS 用于发送消息的来源身份,您可以保留专用的短代码或专用的长代码。如果您预留一个或多个号码,接收者就可以更轻松地确认消息来自贵组织。有关更多信息,请参阅 Amazon SNS 开发人员指南中的预留专用的短代码用于 SMS 消息收发或预留专用的长代码用于 SMS 消息收发。
问:Amazon SNS 支持在哪些国家/地区使用 Worldwide SMS?
Amazon SNS 支持在 200 多个国家/地区使用该项功能,并且我们会继续扩大支持范围。请参阅 SMS 支持的国家/地区列表,以获取支持的调用国家/地区的完整列表。 对于发送至中国的 SMS 消息,请联系我们。
问:哪些 AWS 区域支持 Worldwide SMS?
请参阅 Amazon SNS 文档的 SNS 支持的区域和国家/地区页面,获取可以托管应用程序(使用 Amazon SNS 发送短信)的最新区域列表。
问:将消息发送至其他国家/地区采用哪种电话号码格式?
AWS 强烈鼓励您针对“to”和“from”(如果适用)字段中的所有电话均采用 E.164 数字格式。请参阅 SMS 支持的国家/地区列表,以获取支持的国家/地区的完整列表。
问:Amazon SNS 是否可以确定电话号码是手机号码、固定电话号码,还是 VoIP 号码?
否,Amazon SNS 目前无法检测某个电话号码是手机号码、固定电话号码,还是 VoIP 号码。
问:SMS 消息是否支持基于时间或按计划发送?
否,Amazon SNS 目前不支持基于时间或按计划发送。
问:我该如何追踪我的 SMS 消息的传输状态?
通过启用 Amazon SNS 中的传输状态功能,您可以获取有关各个消息的以下信息:Message ID、发送时间、目标电话号码、处置、处置原因(如果适用)、价格以及驻留时间。
问:Amazon SNS 是否支持 MMS?
否,Amazon SNS 目前不支持 MMS 消息。
问:从 Amazon SNS 接收 SMS 消息的费用是多少?
接收 SMS 消息的费用取决于收件人的无线/移动运营商计划的数据和消息收发。
问:收件人如何退订从 AWS 接收 SMS 消息?
收件人通过其设备使用以下任意内容回复相应消息即可退订:
- ARRET(法语)
- CANCEL
- END
- OPT-OUT
- OPTOUT
- QUIT
- REMOVE
- STOP
- TD
- UNSUBSCRIBE
要退订,收件人必须回复 Amazon SNS 用于传送该消息的同一长代码或短代码。退订后,收件人将不再接收从您的 AWS 账户传送的 SMS 消息,除非您重新加入其电话号码。
问:我如何知道某个收件人设备是否已退订 Global SMS?
SNS 控制台会显示您的账户中已退订号码的列表。此外,Amazon SNS API 会提供“ListPhoneNumbersOptedOut”申请以列出已退订的电话号码。
问:如果用户退订,该号码是否会从 SNS 主题自动取消订阅?
否,退订不会从 Amazon SNS 主题取消订阅号码,而是禁用订阅。这意味着,如果订阅了一个电话号码,则无需再向该主题重新订阅该电话号码。
问:如何确认最终用户是否已接收 SMS 消息?
您可以使用传输状态功能来获取有关 SMS 消息最终处置结果的消息。有关该功能及其用法的更多信息,请参阅我们的文档。
问:Amazon SNS 是否提供针对 SMS 消息的发送收据?
我们的传输状态功能根据从目标运营商处接收的发送收据提供信息。有关传输状态功能及其用法的更多信息,请参阅我们的文档。
问:SMS 是否支持向 Google Voice 或 Hangouts 等 VoIP 服务发送消息?
可以。Amazon SNS 支持向可以接收 SMS 消息的 VoIP 服务发送消息。
SMS 定价
问:发送 SMS 消息如何收费?
当您通过 Amazon SNS API 发送 SMS 消息时,我们会按照每百万个 SNS 请求 0.5 美元的费率收费。此外,您还需要为每条 SMS 支付发送费用,该费用会因收件人所在国家/地区、使用的路由类型、收件人的移动运营商和其他因素而异。有关 SMS 消息传送费用的更多详细信息,请访问 AWS End User Messaging 定价页面。
问:我是否需要为未送达的 SMS 消息付费?
如果目标运营商报告您曾尝试向无效的电话号码发送消息,则您可能需要为传送失败的消息支付费用。电话号码无效的原因有很多,如电话号码不存在、收件人欠费或目标号码是固定号码。在其他情况下,SMS 传送失败也会收取费用。
问:消息长短是否会影响费用?
支持。一条 SMS 消息最多可包含 140 个字节。如果消息超过 140 个字节,Amazon SNS 会自动将其拆分成多条消息。如果 Amazon SNS 将一条长消息拆分成多条短消息,则您需要为每条消息付费。
一条消息可包含的最大字符数取决于字符的编码方法。如果字符采用 GSM-7(也称“GSM 03.38”)编码,则一条消息可以包含 160 个字符。如果采用 ASCII 编码,则一条消息最多可以包含 140 个字符。如果采用 UCS-2 编码,则一条消息最多可以包含 70 个字符。使用 Amazon SNS 发送 SMS 消息时,它会自动选择适合消息内所有字符的最紧凑的编码方法。
有关发送 SMS 消息的更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的发送 SMS 消息。
问:是否有针对发送 SMS 消息的 AWS Free Tier 限额?
否。
配额和限制
问:主题或每个主题的订阅者是否有数量配额?
SNS 默认为每个主题提供 1000 万个订阅,为每个账户提供 100000 个主题。如需提高配额,请联系支持团队。
问:消息中可包含多少数据量以及哪些数据类型?
Amazon SNS 消息最多可包含 256KB 的文本数据,包括 XML、JSON 和非格式化文本(SMS 消息与此不同)。
接受以下 Unicode 字符:
#x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]
(根据 http://www.w3.org/TR/REC-xml/#charsets)。
每 64KB 区块的已发布数据以 1 次请求计费。例如,1 次负载为 256KB 的 API 调用将以 4 次请求计费。
SMS 消息
每条 SMS 消息最多可包含 140 个字节,具体字符数限制取决于编码方法。例如,一条 SMS 消息可以包含:
- 160 个 GSM 字符
- 140 个 ASCII 字符
- 70 个 UCS-2 字符
如果您发布的消息超出大小上限,Amazon SNS 会将其分成多条消息发送,其中每条均不超过大小上限。消息以整个词为边界,不会在一个词的中间截断。就一项 SMS 发布操作而言,总大小上限为 1600 个字节。
问:一个主题可应用多少个消息筛选条件?
默认情况下,一个主题在每个区域每个账户可应用 200 个筛选策略。如果需要更多,请联系我们。
问:是否应将一些 TCP 端口用于 SNS 和 EC2 之间的跨区域通信?
是的,在 80/443/4080/8443 以外的端口上进行的 SNS 和 EC2 间的跨区域通信无法保证正常工作,应避免使用。
原始消息传输
问:什么是原始消息传输?
您可以选择让消息以原始形式传送,即和您发布时的消息形式完全一样。默认情况下,消息会以 JSON 编码进行传输,JSON 编码提供消息和主题的元数据。原始消息传输可以通过设置订阅的“RawMessageDelivery”属性来启用。该属性可以使用 AWS 管理控制台或者 API SetSubscriptionAttributes 来设置。
问:如果订阅的原始消息传输属性未设定,默认行为是什么?
如果该属性未设定,消息当前会默认以 JSON 形式传输。这确保了现有的应用程序会继续如期运行。
问:哪些类型的终端节点支持原始消息传输?
SQS 和 HTTP(S) 终端节点支持原始消息传输。传输到 Lambda、电子邮件和 SMS 终端节点的内容将表现一致,不受“RawMessageDelivery”属性影响。
问:原始消息如何传输至 HTTP 终端节点?
在原始格式的消息传输至 HTTP/s 终端节点之后,HTTP POST 主体将会包含消息主体。
移动推送通知
问:什么是 SNS 移动推送?
借助 SNS 移动推送,您可以使用 Simple Notification Service (SNS) 来向 Apple、Google、Fire OS 和 Windows 设备以及中国内带有百度云推送功能的 Android 设备推送通知。使用推送通知功能,通过弹出关于某个事件的通知,安装的移动应用程序可以立即通知其用户而不用打开应用程序。例如,如果您安装了一个体育应用程序并启用了推送通知,则该应用程序便可以将您最爱运动队的最新比分发送给您,即使应用程序没有运行。通知会在您的设备上显示,当您了解其中的信息后,可以启动应用程序以显示详细信息。用户体验与 SMS 类似,但是功能更强大且费用低廉很多。
问:如何开始发送推送通知?
推送通知只能发送到安装有您的应用程序的设备,且这些设备的用户选择了接收推送通知。SNS 移动推送不需要用户明确地选择接受推送通知,但是 iOS、Android 及 Kindle Fire 操作系统对此有要求。为了通过 SNS 发送推送通知,您同时还要在 SNS 中注册您的应用程序和每个安装了该应用程序的设备。有关更多信息,请参阅使用 Amazon SNS 移动推送通知。
问:支持哪些推送通知平台?
目前支持下列推送通知平台:
- Amazon Device Messaging (ADM)
- Apple Push Notification Service (APNS)
- Firebase Cloud Messaging (FCM)
- 适用于 Windows 8+ 和 Windows Phone 8.1+ 的 Windows Push Notification Service (WNS)
- 适用于 Windows Phone 7+ 的 Microsoft Push Notification Service (MPNS)
- 适用于中国 Android 设备的百度云推送
问:使用 SNS 免费套餐可以发送多少条推送通知?
SNS 免费套餐包括 100 万次发布,外加 100 万次移动推送发送。因此您每月可以免费发送 100 万条推送通知。向所有移动推送终端节点发送的通知将累计起来达到您 1 百万条免费移动推送发送量。
问:启用推送通知是否需要对 SNS 移动推送进行任何特殊确认?
不需要。无论 SNS 是否发送推送通知,最终用户可以在初次运行应用程序时选择接收推送通知。
问:我是否需要修改我的客户端应用,以便使用 SNS 移动推送功能?
SNS 不要求您修改客户端应用。百度云推送需将特定于百度的组件添加到客户端代码,以确保正常工作,无论您是否选择使用 SNS 服务。
问:SNS 主题如何在移动推送中工作?
SNS 主题可以包含来自任何支持的推送通知平台的订阅者,以及任何其他终端节点类型,例如 SMS 或电子邮件。当您向某个主题发布通知时,SNS 会将该条消息的相同副本发送到订阅该主题的每个终端节点。如果您使用特定于平台的负载来定义发送给每个推送平台的准确负载,那么当您超过相关推送通知平台所规定的最大负载时,您的发布操作将会失败。
问:不同的目标平台各自支持何种规模的负载大小?
SNS 支持的最大负载大小与相关原始平台支持的大小相等。客户可以使用 JSON 对象来发送平台特定消息。请参阅使用 SNS 移动推送 API 了解更多详细信息。
问:平台特定的负载如何工作?
当您向主题发布内容并想要将自定义消息发送到不同推送通知平台的终端节点时,您需要选择发布对话框中的“Use different message body for different protocols”选项,然后更新消息。可以使用平台特定的负载来指定中继到每个推送通知服务的精确 API 字符串。例如,可以使用平台特定的负载通过 APNS 来操纵您的 iOS 应用程序徽章计数。有关更多信息,请参阅使用 Amazon SNS 移动推送通知。
问:一个令牌能否订阅多个主题?
可以。每个令牌可以订阅的 SNS 主题没有数量限制。
问:什么是直接寻址? 工作原理是什么?
直接寻址让您可以将通知直接提供给单一终端节点,而不是将相同的消息发送给一个主题的所有订阅者。如果您想将精准定位的消息发送给每一名接收者,该功能便可派上用场。当您在 SNS 注册设备令牌时,SNS 便会创建与此令牌对应的终端节点。您可以像将内容发布到主题一样来将内容发布到令牌终端节点。您可以直接发布通知的文本,或利用平台特定功能(诸如更新应用程序的徽章计数)的优势发布平台特定负载。直接寻址目前仅限推送通知终端节点。
问:SNS 是否支持 SMS 或电子邮件直接寻址?
目前,直接寻址将仅支持移动推送终端节点(APNS、FCM、ADM、WNS、MPNS 和百度)及 SMS。电子邮件消息需要使用主题。
问:SNS 移动推送如何处理通知服务中的令牌反馈?
推送通知服务(例如 APNS 和 FCM)可提供关于令牌可能已过期或可能已被新令牌替换的反馈。如果 APNS 或 FCM 报告特定令牌已过期或无效,则 SNS 会自动“禁用”与令牌关联的应用程序端点,并通过某一事件通知您此更改。具体而言,FCM 有时不仅表示令牌无效,还会在其对 SNS 的响应中提供与应用程序端点关联的新令牌。发生这种情况时,SNS 会自动为相关终端节点更新新的令牌值,同时使终端节点保持在启用状态,然后通过事件通知您这一变化。
问:我使用 Google Cloud Messagingg (GCM) 进行 SNS 移动通知。弃用 GCM 后会发生什么?
问:能否将现有应用程序迁移到 SNS 移动推送?
可以。您可以通过控制台界面或 API 将现有设备令牌批量上传到 Amazon SNS。通过上传相关推送通知服务的凭证,还可以在 SNS 注册您的应用程序,并配置您的代理或应用程序以便将来在 SNS 注册新的令牌。
问:能否通过 Amazon CloudWatch 监控我的推送通知?
可以。SNS 发布的 Cloudwatch 指标包括已发布的消息数量、成功通知的数量、失败通知的数量、筛选掉的通知数量和已发布数据的大小。指标以应用程序为单位提供。您可以通过 AWS 管理控制台或 CloudWatch API 访问 Cloudwatch 指标。
问:Amazon SNS 支持哪种 Windows Push Notifications?
SNS 支持 Microsoft WNS 和 MPNS 提供的所有推送通知类型,包括 Toast、Tile、Badge 和 Raw 通知。使用 TYPE 消息属性,以指定期望使用的通知类型。当使用默认负载向所有移动平台发送相同的消息时,对于 Windows 平台,SNS 将默认选择广播通知。当您使用平台特定的负载时,必须为 Windows 平台指定通知类型。
问:SNS 是否支持 Windows Raw 推送通知?
可以。您必须将通知负载编码为文本才能通过 SNS 发送 Raw 通知。
问:什么是百度云推送?
百度云推送是一种适用于 Android 设备的第三方替代推送通知中继服务。您可以使用百度云推送来联系中国的 Android 客户,无论这些客户选择使用哪个 Android 应用商店来下载应用。有关百度云推送的更多信息,请访问 https://push.baidu.com/。
问:我是否能从所有公共 AWS 区域发布百度通知?
可以,SNS 支持在所有公共 AWS 区域发布百度推送通知。
问:我是否可以将百度通知用于任何 Android 应用商店?
可以,百度推送通知可用于经由 Android 应用商店安装的应用。
问:什么是消息属性?
消息属性可使您提供消息相关的结构化元数据项目(如时间戳、地理空间数据、签名和标识符)。消息属性是可选的,它与消息正文相互独立,但随同其一起发送。在此信息的帮助下,消息接收方不必先处理消息正文,而是可以预先决定如何处理消息。
您可以将 SNS 消息属性与 SQS 和移动推送终端节点联合使用。要了解更多有关消息属性的信息,请参阅 SNS 入门指南。
问:SNS 中支持什么消息属性?
SNS 针对各个终端节点支持不同的消息属性,具体取决于它们自己支持的终端节点。
- 对于 SQS 终端节点,每条消息最多可指定 10 个名称类型值三元组。支持的类型包括:字符串、二进制数据和数字(包括整数、浮点数和双精度数)。
- 对于移动推送终端节点,可以利用每个移动平台支持的特定消息属性(如通知类型)。
问:什么是生存时间 (TTL)?
可与 SNS 一起发送的某些消息仅在有限的时间段内相关或有价值。现在,使用 Amazon SNS,您可以为每条消息设定 TTL(生存时间)值。当指定消息超过 TTL 且未被最终用户提交或读取时,该消息即被删除。TTL 以秒为单位并与发布调用的时间相关。
问:我如何为消息指定 TTL?
您可以使用控制台或通过 API 指定 TTL。TTL 可以在发布消息时使用以下消息属性指定。每个平台的属性都不相同。为平台指定的属性仅适用于向该平台传送通知。
问:什么是默认 TTL?
SNS 为所有移动平台采用的默认生存时间 (TTL) 为 4 星期。
问:TTL 消息属性是否覆盖在消息负载中指定的 TTL?
可以。Google FCM 和 Amazon ADM 支持您在消息负载内指定 TTL。如果您在消息负载内指定一个 TTL,同时还在消息属性内指定一个 TTL,则 SNS 将遵循消息属性。
问:如果我指定 TTL=0,会出现什么情况?
有些平台将 TTL = 0 作为特殊案例进行处理,并尝试立即传送消息,或者让消息过期。如果您指定 TTL = 0,则 SNS 会将消息中继到带有 TTL = 0 的相应服务,以便利用此特殊案例。
问:哪些 SNS 终端节点支持 TTL?
您可以通过以下移动推送终端节点使用 TTL:APNS、APNS_Sandbox、FCM、ADM、百度和 WNS。Microsoft MPNS 当前不支持 TTL。TTL 也不支持用于 SQS、HTTP、电子邮件或 SMS 终端节点。
问:Amazon SNS 的传输状态功能有何用途?
传输状态功能可以帮助您收集针对支持的移动通知平台您所推送的通知的一些信息,包括成功率、失败率和驻留时间等。目前支持的平台包括 Apple (APNS)、Google (FCM)、Windows(WNS 和 MPNS)、Amazon (ADM) 和百度。状态信息收集在由 Amazon SNS 代表您创建的 Amazon CloudWatch 日志组中。此外,您还可以在 Amazon CloudWatch 中创建具有可操作性的指标并以您感兴趣的模式触发警报。
问:Amazon SNS 中的传输状态功能是不是只能用于移动推送通知? 你们有没有计划为其他终端节点类型提供此功能?
目前,传输状态功能可用于移动推送通知和 SMS。我们将根据客户的反馈进行评估,确定是否对其他终端节点类型提供这一功能。
问:如何激活传输状态功能?
从 Amazon SNS 控制台中激活。在您的应用程序中,选择“Application Actions”下拉菜单中的“Delivery Status”选项。有关详细信息,请参阅我们的文档。
问:能否从 Amazon SNS API 激活传输状态功能?
可以,您可以从 Amazon SNS API 激活此功能,只要添加相关的应用程序级属性就能实现。我们的文档介绍了为使用此功能需要添加的应用程序级属性以及必须进行的特定 API 调用。
问:传输状态功能如何收费?
目前使用传输状态功能不会产生额外的 Amazon SNS 费用。但是,根据您的使用情况,您可能会因为使用 CloudWatch 而产生费用,因为这项功能会创建 Amazon CloudWatch 日志组。请参阅我们的定价页面,了解关于 CloudWatch 定价和免费套餐的更多信息。
问:你们为什么只选择成功传输尝试的取样率而不是失败传输尝试的取样率?
根据客户发来的反馈,我们发现多数开发人员希望了解其应用程序所有的传输尝试失败的情况,并倾向于储存成功的传输样本,而不是将其全部记录下来。
问:如何根据故障指标或驻留时间指标设置警报?
激活传输状态功能后,您需要为 Amazon SNS 代表您创建的日志组在 Amazon CloudWatch Logs 中定义日志指标筛选条件。该指标筛选条件可以定义为截取您感兴趣的信息,例如故障率和驻留时间。指标筛选条件定义后,您可以创建该指标并为其指派一个指标。该指标之后可以用于设置警报或根据定义的阈值发送通知。有关更多信息,请查阅我们的文档或博客。
问:Amazon SNS 是否支持 HTTP/2 对 APNS 终端节点进行移动推送通知?
Amazon SNS 将 HTTP/2 与 p12 证书结合使用,以通过 Apple Push Notification Service (APNS) 将推送通知发送至 iOS 和 macOS 终端节点。
问:由于 APNS 二进制协议到 2020 年 11 月将弃用,我是否需要修改我的应用程序?
Amazon SNS 将 HTTP/2 与 p12 证书结合使用。由于它不依赖于旧版二进制协议,所以不需要对通过 Amazon SNS 发送推送通知的应用程序进行任何更改。
SNS 支持 AWS Lambda
问:Amazon SNS 中的 AWS Lambda 终端节点支持有什么意义?
通过将消息发布到订阅了 AWS Lambda 函数的 Amazon SNS 主题,您可以调用 AWS Lambda 函数。Amazon SNS 支持消息群发,因此除了可以将通知传输到支持的 Amazon SNS 目的地(如移动推送、HTTP 终端节点、SQS、电子邮件和 SMS),发布一条消息还可以调用不同的 AWS Lambda 函数或调用 Lambda 函数。
问:什么是 AWS Lambda?
AWS Lambda 是一项计算服务,依响应事件运行您的代码和自动为您管理计算资源,因而容易构建快速响应新信息的应用程序。关于 AWS Lambda 的更多信息以及如何创建 AWS Lambda 函数,请从此处查看。
问:AWS Lambda 函数和 Amazon SNS 有何用途?
通过将 AWS Lambda 函数订阅到 Amazon SNS 主题,您可以执行自定义消息处理。您可以调用 AWS Lambda 函数来提供自定义消息传输处理,方法是先将消息发布到一个 AWS Lambda 函数,再让 Lambda 函数修改一条消息(例如对语言进行本地化),最后对消息进行筛选并将其发送给其他主题和终端节点。已经发送 Amazon SNS 通知(例如 Amazon CloudWatch)的应用程序和服务现在可以立即利用 AWS Lambda 的优势,不需要预置或管理基础设施来进行自定义消息处理。您还可以使用发送到 AWS Lambda 函数功能来发布到其他 AWS 产品,例如 Amazon Kinesis 或 Amazon S3。您可以将 AWS Lambda 函数订阅到 Amazon SNS 主题,然后让 Lambda 函数轮流写入到另一项服务。
问:如何激活 Amazon SNS 中的 AWS Lambda 终端节点支持?
您首先需要通过 AWS 账户和 AWS Lambda 控制台创建一个 AWS Lambda 函数,然后使用 Amazon SNS 控制台或 Amazon SNS API 将该 AWS Lambda 函数订阅到一个主题。以上操作完成后,发布到订阅了 Lambda 函数的 Amazon SNS 主题的任意消息将发送到除订阅到该主题任何其他目的地之外的适当的 Lambda 函数。
问:将消息从 Amazon SNS 发送到 AWS Lambda 函数有何意义?
将消息从 Amazon SNS 发送到 AWS Lambda 函数会创建 AWS Lambda 函数的实例并连同您的消息一起调用为输入。有关消息格式的更多信息,请参阅 Amazon SNS 文档和 AWS Lambda 文档。
问:此功能如何收费?
通过 Amazon SNS 发布消息的收费是每 100 万条请求 0.5 USD。除使用 AWS 产品产生的费用外,将消息发送到 AWS Lambda 函数不再额外收费。Amazon SNS 支持额度为每月 100 万条请求的免费套餐。有关更多信息,请参阅 Amazon SNS 定价。AWS Lambda 函数将根据您的函数请求次数和代码执行时间向您收费。AWS Lambda 免费套餐包含每月 100 万条请求以及每月 400000 GB 秒的计算时间。有关更多信息,请参阅 AWS Lambda 定价。
问:能否将别人创建的 AWS Lambda 函数订阅到我的 Amazon SNS 主题?
目前不允许 AWS 账户所有者订阅属于其他账户的 AWS Lambda 函数。您可以将自己的 AWS Lambda 函数订阅到自己的 Amazon SNS 主题或者其他账户创建的 Amazon SNS 主题,只要该 SNS 主题的主题策略允许这样的操作。
问:对于可以订阅到 Amazon SNS 主题的 AWS Lambda 函数的数量有没有配额?
Amazon SNS 将 AWS Lambda 函数等同其他目的地对待。SNS 默认对每个主题提供 1000 万个订阅。要请求提高配额,请联系我们。
问:可以向 AWS Lambda 函数传送什么数据?
当 AWS Lambda 函数作为 Amazon SNS 消息发送的结果调用时,AWS Lambda 函数会通过 SNS 事件收到各种数据,包括消息 ID、主题 ARN、消息负载和消息属性。有关传送到 AWS Lambda 函数的事件结构的更多信息,请参阅我们的博客。
问:我能否跟踪 AWS Lambda 函数的消息发送尝试状态?
要跟踪消息发送状态是否成功,您需要激活 Amazon SNS 的传输状态功能。有关如何激活此功能的更多信息,请参阅我们的博客。
问:AWS Lambda 在哪些区域提供?
请参阅 AWS 区域和终端节点,以查看完整列表。
问:我的 AWS Lambda 函数需不需要与所使用的 Amazon SNS 处在相同的区域?
您可以将 AWS Lambda 函数订阅到任意区域中的 Amazon SNS 主题。
问:调用 AWS Lambda 函数会不会产生数据传输费用?
将消息发送到 AWS Lambda 函数会产生数据传输费用。请参阅我们的定价了解更多信息。
问:对于 AWS Lambda 函数的并发数量有没有配额?
AWS Lambda 目前在每个区域每个 AWS 账户中支持 1000 个并发执行。如果发送到 AWS Lambda 的 Amazon SNS 消息达到了并发数量配额,则 Amazon SNS 消息的发送将被阻断。如果 AWS Lambda 阻断了 Amazon SNS 消息,则 Amazon SNS 将尝试重新发送。有关 AWS Lambda 并发配额的更多信息,请参阅 AWS Lambda 文档。
问:Amazon SNS 能否使用已经在其他服务(例如 Amazon S3)中使用的相同 AWS Lambda 函数?
您可以使用已经在其他服务中使用的相同 AWS Lambda 函数,只要此相同函数可以在分析其他服务的事件格式的同时也可以分析 Amazon SNS 中的事件格式。关于 SNS 事件格式,请参阅我们的博客。
VoIP iOS 和 Mac OS 通知
问:用于 iOS 的 VoIP 推送通知是什么?
在 iOS 8 和更高版本中,IP 电话 (VoIP) 应用可以注册 VoIP 远程通知,以便 iOS 可在呼入的 VoIP 通话抵达用户时启动或唤醒应用。注册 VoIP 通知的程序类似于在 iOS 上注册常用推送通知的程序。有关更多信息,请参阅我们的文档。
问:我能否在同一 iOS 应用中同时使用 VoIP 推送通知和其他推送通知?
可以,您可以使用已注册的 iOS 应用程序接收两种类型的推送通知。然而,除了常用推送通知证书之外,您需要从 Apple 获得 VoIP 推送通知证书,在 Amazon SNS 创建新的平台应用程序并选择 Apple VoIP Push 为平台类型。有关更多信息,请参阅我们的文档。
问:Mac OS 推送通知是什么?
您现在可以使用 Amazon SNS 发送推送通知给运行 Mac OS X Lion (10.7) 或更高版本的 Mac OS。有关更多信息,请参阅我们的文档。
详细了解 Amazon SNS 定价