

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

# Amazon SNS 和 Amazon X-Ray
Amazon SNS

可以将 Amazon X-Ray 与 Amazon Simple Notification Service (Amazon SNS) 一起使用来跟踪和分析通过 SNS 主题传输到 [SNS 支持的订阅服务](https://docs.amazonaws.cn/sns/latest/dg/sns-active-tracing.html)的请求。使用 X-Ray 跟踪与 Amazon SNS 分析消息及其后端服务的延迟（例如，请求在某个主题上花费了多长时间，以及将消息传送到该主题的每个订阅花费了多长时间）。Amazon SNS 对于标准主题和 FIFO 主题都支持 X-Ray 跟踪。

如果您从已经使用 X-Ray 检测过的服务发布到 Amazon SNS 主题，则 Amazon SNS 会将发布者的跟踪上下文传递给订阅用户。此外，还可以为从已检测 SNS 客户端发布的消息，打开活动跟踪将与 Amazon SNS 订阅相关的分段数据发送给 X-Ray。使用 Amazon SNS 控制台为某个 Amazon SNS 主题[打开活动跟踪](https://docs.amazonaws.cn/sns/latest/dg/sns-active-tracing.html)，或通过使用 Amazon SNS API 或 CLI。请参阅[检测应用程序](xray-instrumenting-your-app.md)，详细了解如何检测 SNS 客户端。

## 配置 Amazon SNS 活动跟踪


您可以使用 Amazon SNS 控制台、Amazon CLI 或 SDK 配置 Amazon SNS 活动跟踪。

使用 Amazon SNS 控制台时，Amazon SNS 会尝试为 SNS 创建调用 X-Ray 所需的权限。如果您没有足够的权限修改 X-Ray 资源策略，则尝试可能会被拒绝。有关这些权限的更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》中的 [Amazon SNS 中的标识和访问管理](https://docs.amazonaws.cn/sns/latest/dg/sns-authentication-and-access-control.html)和 [Amazon SNS 访问控制示例](https://docs.amazonaws.cn/sns/latest/dg/sns-access-policy-use-cases.html)。如需了解如何使用 Amazon SNS 控制台打开活动跟踪的更多信息，请参阅《Amazon Simple Notification Service 开发人员指南》中的[在 Amazon SNS 主题上启用活动跟踪](https://docs.amazonaws.cn/sns/latest/dg/sns-active-tracing.html)。

使用 Amazon CLI 或 SDK 打开活动跟踪时，必须使用基于资源的策略手动配置权限。使用 [https://docs.amazonaws.cn/xray/latest/api/API_PutResourcePolicy.html](https://docs.amazonaws.cn/xray/latest/api/API_PutResourcePolicy.html) 基于资源的必要策略配置 X-Ray，以允许 Amazon SNS 将跟踪发送给 X-Ray。

**Example Amazon SNS 主动跟踪的 X-Ray 基于资源的策略示例**  
以下示例策略文档指定了 Amazon SNS 将跟踪数据发送给 X-Ray 所需要的权限：  

```
{
    Version: "2012-10-17",		 	 	 
    Statement: [
      {
        Sid: "SNSAccess",
        Effect: Allow,
        Principal: {
          Service: "sns.amazonaws.com",
        },
        Action: [
          "xray:PutTraceSegments",
          "xray:GetSamplingRules",
          "xray:GetSamplingTargets"
        ],
        Resource: "*",
        Condition: {
          StringEquals: {
            "aws:SourceAccount": "account-id"
          },
          StringLike: {
            "aws:SourceArn": "arn:partition:sns:region:account-id:topic-name"
          }
        }
      }
    ]
  }
```
使用 CLI 创建基于资源的策略，赋予 Amazon SNS 将跟踪数据发送给 X-Ray 的权限：  

```
aws xray put-resource-policy --policy-name MyResourcePolicy --policy-document '{ "Version": "2012-10-17",		 	 	  "Statement": [ { "Sid": "SNSAccess", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "xray:PutTraceSegments", "xray:GetSamplingRules", "xray:GetSamplingTargets" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "StringLike": { "aws:SourceArn": "arn:partition:sns:region:account-id:topic-name" } } } ] }'
```
如需使用这些示例，请将 *`partition`*、*`region`*、*`account-id`* 和 *`topic-name`* 替换为具体的 Amazon 分区、区域、账户 ID 和 Amazon SNS 主题名称。如需赋予所有 Amazon SNS 主题将跟踪数据发送给 X-Ray 的权限，请将主题名称替换为 `*`。

## 在 X-Ray 控制台中查看 Amazon SNS 发布者和订阅用户跟踪。


使用 X-Ray 控制台查看跟踪地图和跟踪详情，这些地图显示了 Amazon SNS 发布者和订阅用户的互联视图。为某个主题打开 Amazon SNS 活动跟踪后，X-Ray 跟踪地图和跟踪详情地图上会显示 Amazon SNS 发布者、Amazon SNS 主题和下游订阅用户的关联节点：

![\[包含 Amazon SNS 发布者和订阅用户的跟踪地图\]](http://docs.amazonaws.cn/xray/latest/devguide/images/services-sns-activetracing-map.png)


选择跨越 Amazon SNS 发布者和订阅用户的跟踪时，X-Ray 跟踪详情页面会显示跟踪详情地图和分段时间线。

**Example 显示 Amazon SNS 发布者和订阅订阅用户的时间线示例**  
此示例显示的时间线中包含向某个 Amazon SNS 主题发送一条消息的 Amazon SNS 发布者，由 Amazon SNS 订阅用户处理。  

![\[显示 Amazon SNS 发布者和订阅订阅用户的分段时间线\]](http://docs.amazonaws.cn/xray/latest/devguide/images/services-sns-activetracing-timeline.png)


上面的示例时间线提供有关 Amazon SNS 消息流的详细信息：
+ **SNS** 分段代表从客户端发出的 `Publish` API 调用的往返持续时间。
+ **myTopic** 分段代表 Amazon SNS 响应发布请求的延迟。
+ **SQS** 子分段表示 Amazon SNS 将消息发布到 Amazon SQS 队列所花费的往返时间。
+ **MyTopic** 分段和 **SQS** 子分段之间的时间代表这条消息在 Amazon SNS 系统中花费的时间。

**Example 包含批处理的 Amazon SNS 消息的时间线示例**  
如果在一个跟踪里批处理多条 Amazon SNS 消息，则分段时间线中会显示代表被处理的每条消息的分段。  

![\[显示 Amazon SNS 批量消息的分段时间线\]](http://docs.amazonaws.cn/xray/latest/devguide/images/services-sns-activetracing-batch-timeline.png)
