

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

# 什么是 Amazon SNS？
<a name="welcome"></a>

Amazon Simple Notification Service（Amazon SNS）是一项完全托管式服务，提供从发布者（生产者）向订阅用户（使用者）的消息传输。发布者通过将消息发送至*主题*与订阅用户进行异步交流，主题是一个逻辑接入点和通信通道。

## 工作原理
<a name="how-it-works"></a>

在 SNS 中，发布者向主题发送消息，该主题充当通信通道。该主题充当逻辑接入点，确保跨不同平台将消息传递给多个订阅用户。

SNS 主题的订阅用户可以通过不同的端点接收消息，具体取决于他们的使用案例，例如：
+ Amazon SQS
+ Lambda
+ HTTP(S) 端点
+ 电子邮件
+ 移动推送通知
+ 移动文本消息（SMS）
+ Amazon Data Firehose
+ 服务提供商（例如 Datadog、MongoDB、Splunk）

SNS 支持 Application-to-Application (A2A) 和 Application-to-Person (A2P) 消息传递，因此可以灵活地在不同的应用程序之间发送消息，也可以直接向手机、电子邮件地址等发送消息。

![\[Amazon SNS 通过 (A2A) 和 application-to-application (A2P) 终端节点向订阅者发送来自发布者的消息。 application-to-person它显示了 Lambda 函数、Amazon SQS 队列、终端节点和 Data Firehose 等 A2A 终端节点 HTTP/S ，以及包括短信、移动推送通知和电子邮件在内的 A2P 终端节点，重点介绍了 Amazon SNS 在异步、事件驱动型通信方面的灵活性。\]](http://docs.aws.amazon.com/zh_cn/sns/latest/dg/images/sns-delivery-protocols.png)


## 访问 Amazon SNS
<a name="welcome-accessing"></a>

您可以通过控制台、或访问和管理 Amazon SNS AWS CLI AWS SDKs，具体取决于您的首选交互方式。该控制台为基本任务提供了图形界面，而 AWS CLI 和则为更复杂的用例 SDKs 提供了高级配置和自动化功能。
+ [Amazon SNS 控制台](https://console.aws.amazon.com/sns/v3/home)提供了一个方便的用户界面，用于创建主题和订阅、发送和接收消息以及监控事件和日志。
+  AWS Command Line Interface (AWS CLI) 允许您直接访问 Amazon SNS API 以获取高级配置和自动化用例。有关更多信息，请参阅[将 Amazon SNS 与 AWS CLI结合使用](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-sns.html)。
+ AWS SDKs 以多种语言提供。有关更多信息，请参阅[SDKs 和工具包](https://aws.amazon.com/getting-started/tools-sdks/)。

## Amazon SNS 常见场景
<a name="sns-common-scenarios"></a>

使用这些常见的 Amazon SNS 场景可实现可扩展的事件驱动型架构，并确保应用程序和用户之间实现可靠的实时通信。

### 应用程序集成
<a name="SNSFanoutScenario"></a>

*扇出*场景是复制发布到 SNS 主题的消息并将其推送到多个端点（例如 Firehose 传输流、Amazon SQS 队列、HTTP(S) 端点和 Lambda 函数）的场景。这允许进行并行异步处理。

例如，您可以开发一个应用程序，以在产品被下单的任何时候发布消息至 SNS 主题。然后，订阅 SNS 主题的 SQS 队列会接收到新订单的相同通知。附加到其中一个 SQS 队列的 Amazon Elastic Compute Cloud (Amazon EC2) 服务器实例可以对订单进行处理或执行。您还可以将另一个 Amazon EC2 服务器实例附加到数据仓库，以便分析收到的所有订单。

![\[Amazon SNS 中的一种扇出场景，在这种场景中，来自发布者的单条消息被发送到 Amazon SNS 主题，然后复制到多个端点，例如 Amazon SQS 队列。每个 Amazon SQS 队列都将消息转发到一个 Amazon EC2 实例，一个处理订单处理，另一个执行数据分析，演示事件驱动型应用程序的并行异步消息传输。\]](http://docs.aws.amazon.com/zh_cn/sns/latest/dg/images/sns-fanout.png)


您还可以通过扇出复制使用您的测试环境复制发送到生产环境的数据。对前一个示例进行展开讨论，您还可以为同一个 SNS 主题订阅另一个 SQS 队列，以处理新来的订单。然后，可将这个新 SQS 队列附加到测试环境中，您可以继续使用从生产环境中接收到的数据改进和测试应用程序。

**重要**  
在将任何生产数据发送到测试环境之前，请确保您考虑数据隐私和安全性。

有关更多信息，请参阅以下资源：
+ [扇出到 Firehose 传输流](sns-firehose-as-subscriber.md)
+ [将 Amazon SNS 通知扇出到 Lambda 函数以进行自动处理](sns-lambda-as-subscriber.md)
+ [将 Amazon SNS 通知扇出到 Amazon SQS 队列进行异步处理](sns-sqs-as-subscriber.md)
+ [将 Amazon SNS 通知扇出到 HTTPS 端点](sns-http-https-endpoint-as-subscriber.md)
+ [使用 Amazon SNS 以及计算、存储、数据库 AWS 和网络服务实现事件驱动型计算](https://aws.amazon.com/blogs/compute/event-driven-computing-with-amazon-sns-compute-storage-database-and-networking-services/) 

### 应用程序提示
<a name="SNSAlertsScenario"></a>

应用程序和系统提示是由预定义阈值触发的通知。Amazon SNS 可以通过 SMS 和或电子邮件将这些通知发送给指定用户。例如，当事件发生时，您可以立即收到通知，例如您的 Amazon EC2 Auto Scaling 组的特定更改、上传到 Amazon S3 存储桶的新文件或亚马逊的指标阈值被突破。 CloudWatch有关更多信息，请参阅[亚马逊* CloudWatch 用户*指南中的设置 Amazon SNS 通知](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)。

### 用户通知
<a name="SNSPushMessaging"></a>

Amazon SNS 可以向个人或组发送推送电子邮件和短信（SMS 消息）。例如，您可以将电子商务订单确认作为用户通知发送。有关使用 Amazon SNS 发送 SMS 消息的更多信息，请参阅 [移动文本消息与 Amazon SNS](sns-mobile-phone-number-as-subscriber.md)。

### 移动推送通知
<a name="SNSMobilePushScenario"></a>

使用移动推送通知，可将消息直接推送到移动应用程序。例如，您可以使用 Amazon SNS 向应用程序发送更新通知。通知消息可以包含下载和安装更新的链接。有关使用 Amazon SNS 发送推送通知消息的更多信息，请参阅 [使用 Amazon SNS 发送移动推送通知](sns-mobile-application-as-subscriber.md)。

## Amazon SNS 的定价
<a name="welcome-pricing"></a>

Amazon SNS 没有前期成本。您将根据您发布的消息数量、传输的通知数量以及用于管理主题和订阅的任何其他 API 调用付费。传输定价因终端节点类型而异。您可以免费开始使用 Amazon SNS 免费套餐。有关信息，请参阅[全球短信定价](https://aws.amazon.com/sns/sms-pricing/)。

# Amazon SNS 特征和功能
<a name="welcome-features"></a>

Amazon SNS 提供了一套全面的功能，旨在增强应用程序和用户之间的消息传递。这些功能可实现无缝通信、安全消息传送和强大的消息管理，确保各种消息传递用例的高可用性、持久性和灵活性。

****Application-to-application 消息传递****  
[pplication-to-application消息](sns-system-to-system-messaging.md)支持订阅者，例如交付流、Lambda 函数、Amazon SQS 队列 HTTP/S 、终端节点 AWS 和事件分叉管道。这允许在事件驱动型架构中实现高效消息传输。

****Application-to-person notifications****  
[pplication-to-person通知向](sns-user-notifications.md)订阅者提供用户通知，例如移动应用程序、移动电话号码和电子邮件地址。

****标准主题和 FIFO 主题****  
[FIFO 主题](sns-fifo-topics.md)可确保严格的消息排序、消息分组和重复数据删除，允许 FIFO 和标准队列订阅消息处理。当消息排序和可能的重复并不重要时，会使用[标准主题](sns-create-topic.md)，支持更广泛的用例的所有传输协议。

****消息持久性****  
Amazon SNS 使用多种策略协同工作来提供消息持久性：  
+ 已发布的消息存储在多个地理位置分隔的服务器和数据中心之间。
+ 如果订阅的终端节点不可用，Amazon SNS 将运行[传输重试策略](sns-message-delivery-retries.md)。
+ 要保留在传输重试策略结束之前未传输的任何消息，您可以创建[死信队列](sns-dead-letter-queues.md)。

****消息归档、重播和分析****  
您可以通过多种方式使用 Amazon SNS 来归档消息，包括[将 Firehose 传输流订阅到 SNS 主题](sns-firehose-as-subscriber.md)，这使您能够向分析端点 [如 Amazon Simple Storage Service（Amazon S3）存储桶、Amazon Redshift 表等] 发送通知。此外，Amazon SNS FIFO 主题支持将消息归档与重播功能作为无代码、就地消息归档功能，这可让主题所有者在其主题中存储（或*归档*）消息。然后，主题订阅用户可以将归档的消息检索（或*重播*）回订阅的端点。有关更多信息，请参阅[FIFO 主题的 Amazon SNS 消息归档与重播功能](fifo-message-archiving-replay.md)。

****消息属性****  
[Amazon SNS 消息属性](sns-message-attributes.md)让您可以提供有关消息的任意元数据。

****消息筛选****  
默认情况下，每个订阅者会收到发布到该主题的每条消息。要仅接收一部分消息，订阅者必须将筛选策略分配给主题订阅。订阅者还可以定义筛选策略范围，以启用基于有效负载或基于属性的筛选。筛选策略范围的默认值为 `MessageAttributes`。当传入消息属性与筛选策略属性匹配时，消息将传输到订阅的终端节点。否则，消息将被筛选掉。当筛选策略范围为 `MessageBody` 时，筛选策略属性将与有效负载进行匹配。有关更多信息，请参阅 [Amazon SNS 消息筛选](sns-message-filtering.md)。

****消息安全性****  
服务器端加密使用提供的加密密钥保护存储在 Amazon SNS 主题中的消息内容。 AWS KMS有关更多信息，请参阅[使用服务器端加密保护 Amazon SNS 数据安全](sns-server-side-encryption.md)。您还可以在 Amazon SNS 与您的虚拟私有云（VPC）之间建立专有连接。有关更多信息，请参阅[使用 VPC 端点保护 Amazon SNS 流量](sns-internetwork-traffic-privacy.md)。

# AWS 亚马逊 SNS 常用的服务
<a name="welcome-related"></a>

将 Amazon SNS 与多种 AWS 云 服务集成，以增强消息处理、改善访问控制、启用事件驱动型处理并实现资源自动化。这种集成优化了性能，增强了安全性，并简化了操作。

**Amazon CloudWatch**  
Amazon 为 Amazon SNS CloudWatch 提供监控和可观察性，帮助您跟踪消息传送、检测异常情况和解决问题。通过使用 CloudWatch，您可以：  
+ **监控 Amazon SNS 指标**，例如跨主题和订阅发布、传输或失败的消息数量。
+ **设置 CloudWatch 警报**，以便在 Amazon SNS 指标超过预定义阈值（例如高交付失败率或限制）时触发自动操作。
+ **使用 CloudWatch 日志捕获发送到 HTTP/S、Lambda 和 Amazon SQS 终端节点的消息的 Amazon SNS 传输状态**，以进行调试和审计。
有关更多信息，请参阅 [使用监控亚马逊 SNS 主题 CloudWatch](sns-monitoring-using-cloudwatch.md)。

**Amazon SQS**  
Amazon SQS 是一种完全托管式消息队列服务，可实现分布式软件组件之间安全、持久和可扩展的通信。它通过缓冲消息、确保消息可靠传输并防止因消息丢失而导致系统故障，帮助解耦应用程序架构。Amazon SQS 通过以下方式与 Amazon SNS 集成：  
+ [**死信队列**](sns-dead-letter-queues.md) - Amazon SNS 可以将无法传输的消息路由到 Amazon SQS 死信队列，以进行故障排除和重新处理。
+ [**主题订阅**](sns-sqs-as-subscriber.md) - 您可以将 Amazon SQS 队列订阅到 Amazon SNS 主题，从而使 Amazon SNS 能够使用 Amazon SQS 将消息扇出到多个使用者。
+ [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fifo-queues.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fifo-queues.html) - 可以将 Amazon SQS FIFO 队列订阅到 Amazon SNS FIFO 主题，从而确保严格的消息排序和一次性处理。[标准 Amazon SQS 队列](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html)也可以订阅到 Amazon SNS 主题，但不能保证按顺序传输消息或删除重复数据。

**CloudFormation**  
CloudFormation 使用基础设施即代码 (IaC) 自动配置和管理 AWS 资源，包括 Amazon SNS 主题和订阅。借助 CloudFormation，您可以：  
+ 在可重复使用、受版本控制的模板中**定义 Amazon SNS 主题、订阅和权限**。
+ **确保跨多个地区一致部署** Amazon SNS 资源 AWS 账户 。
+ 使用更改集**更新或修改 Amazon SNS 配置**，无需人工干预。
有关更多信息，请参阅 [AWS CloudFormation 《用户指南》](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)。

**AWS CloudTrail**  
CloudTrail 提供对 Amazon SNS 的 API 活动的可见性，帮助您监控和审核对亚马逊 SNS 主题、订阅和消息的访问权限。借助 CloudTrail，您可以：  
+ **跟踪对 Amazon SNS 的 API 调用**，包括谁访问或修改了主题、订阅和权限。
+ 出于安全和合规目的，通过分析日志来**检测未经授权或意外的活动**。
+ **与亚马逊集成 AWS Security Hub CSPM， CloudWatch 或者**根据异常的亚马逊 SNS 操作创建提醒。
有关更多信息，请参阅[使用记录 AWS SNS API 调用 AWS CloudTrail](logging-using-cloudtrail.md)。

**AWS Lambda**  
AWS Lambda 是一项无服务器计算服务，可根据事件自动运行您的代码，无需预置或管理服务器。借助该服务，您可以构建事件驱动型应用程序，这些应用程序可以自动扩展并在高度可用的计算环境中执行。  
Amazon SNS 通过让 Lambda 函数订阅到 Amazon SNS 主题与 Lambda 集成。当 Amazon SNS 主题收到消息时，它可以触发 Lambda 函数，从而实现实时处理、自动化和应用程序逻辑执行。这种集成通常用于：  
+ [https://docs.aws.amazon.com/lambda/latest/dg/concepts-event-driven-architectures.html](https://docs.aws.amazon.com/lambda/latest/dg/concepts-event-driven-architectures.html) - 自动触发函数以响应 Amazon SNS 消息。
+ [https://docs.aws.amazon.com/lambda/latest/dg/concepts-event-driven-architectures.html](https://docs.aws.amazon.com/lambda/latest/dg/concepts-event-driven-architectures.html) - 修改或筛选 Amazon SNS 消息，然后再将其转发到其他服务。
+ **自动化工作流程** - 处理应用程序警报、系统监控或事件编排的通知。

**AWS Identity and Access Management (IAM)**  
IAM 为 AWS 资源提供安全的访问控制，允许您管理谁可以访问您的 Amazon SNS 主题、他们可以执行哪些操作以及在什么条件下可以执行哪些操作。使用 IAM，您可以：  
+ 在**用户和服务与 Amazon SNS 主题互动之前对其进行身份验证**。
+ **定义精细权限**以指定用户或角色可以发布、订阅或管理的 Amazon SNS 主题。
+ **使用基于身份的策略**来实施安全最佳实践，例如限制对特定 AWS 账户的 IP 地址或条件的访问。
有关更多信息，请参阅 [将基于身份的策略用于 Amazon SNS](sns-using-identity-based-policies.md)。

**AWS Key Management Service (AWS KMS)**  
AWS KMS 通过启用服务器端加密 (SSE) 来提高消息机密性，从而增强 Amazon SNS 的安全性。借助 AWS KMS，您可以：  
+ 使用 AWS托管或客户管理的@@ **加密密钥（）对静态的 Amazon SNS 消息**进行加密。CMKs
+ 通过定义用于限制谁可以进行发布或订阅的精细密钥策略来**控制对 Amazon SNS 主题的访问权限**。
+ 通过 AWS CloudTrail审计密钥使用情况**确保遵循安全和监管要求**。
有关更多信息，请参阅 [管理 Amazon SNS 加密密钥和成本](sns-key-management.md)。

**AWS X-Ray**  
X-Ray 为 Amazon SNS 提供跟踪功能，帮助您分析和调试通过事件驱动架构的消息流。使用 X-Ray，您可以：  
+ **追踪跨多个终端节点（例如 Lambda AWS 服务、亚马逊 SQS 和 HTTP/S 终端节点）的亚马逊 SNS 消息传送**情况。
+ 通过可视化消息发布、传输和处理所需的时间来**识别延迟瓶颈**。
+ **检测 Amazon SNS 消息流中的错误和重试次数**，以解决传输失败或处理时间缓慢的问题。
有关更多信息，请参阅 [Amazon SNS 中的主动跟踪](sns-active-tracing.md)。

# 将 Amazon SNS 与软件开发工具包配合使用 AWS
<a name="sdk-general-information-section"></a>

AWS 软件开发套件 (SDKs) 可用于许多流行的编程语言。每个软件开发工具包都提供 API、代码示例和文档，使开发人员能够更轻松地以其首选语言构建应用程序。


| SDK 文档 | 代码示例 | 
| --- | --- | 
| [适用于 C\$1\$1 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-cpp) | [适用于 C\$1\$1 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp) | 
| [AWS CLI](https://docs.aws.amazon.com/cli) | [AWS CLI 代码示例](https://docs.aws.amazon.com/code-library/latest/ug/cli_2_code_examples.html) | 
| [适用于 Go 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-go) | [适用于 Go 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2) | 
| [适用于 Java 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-java) | [适用于 Java 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2) | 
| [适用于 JavaScript 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-javascript) | [适用于 JavaScript 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3) | 
| [适用于 Kotlin 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-kotlin) | [适用于 Kotlin 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin) | 
| [适用于 .NET 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-net) | [适用于 .NET 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3) | 
| [适用于 PHP 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-php) | [适用于 PHP 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php) | 
| [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell) | [AWS Tools for PowerShell 代码示例](https://docs.aws.amazon.com/code-library/latest/ug/powershell_5_code_examples.html) | 
| [适用于 Python (Boto3) 的 AWS SDK](https://docs.aws.amazon.com/pythonsdk) | [适用于 Python (Boto3) 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python) | 
| [适用于 Ruby 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-ruby) | [适用于 Ruby 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby) | 
| [适用于 Rust 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-rust) | [适用于 Rust 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1) | 
| [适用于 SAP ABAP 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-sapabap) | [适用于 SAP ABAP 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap) | 
| [适用于 Swift 的 AWS SDK](https://docs.aws.amazon.com/sdk-for-swift) | [适用于 Swift 的 AWS SDK 代码示例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift) | 

有关特定于 Amazon SNS 的示例，请参阅 [使用 Amazon SNS 的代码示例 AWS SDKs](service_code_examples.md)。

**可用性示例**  
找不到所需的内容？ 通过使用此页面底部的**提供反馈**链接请求代码示例。