

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon SNS 和 AWS X-Ray
<a name="xray-services-sns"></a>

您可以使用 AWS X-Ray 搭配 Amazon Simple Notification Service (Amazon SNS)，在請求通過 SNS 主題到 [SNS 支援的訂閱服務](https://docs.aws.amazon.com/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 API 或 CLI 開啟 Amazon SNS 主題的[主動追蹤](https://docs.aws.amazon.com/sns/latest/dg/sns-active-tracing.html)。如需[檢測 SNS 用戶端的詳細資訊，請參閱檢測您的應用程式](xray-instrumenting-your-app.md)。

## 設定 Amazon SNS 主動追蹤
<a name="xray-services-sns-configuration"></a>

您可以使用 Amazon SNS 主控台或 AWS CLI 或 SDK 來設定 Amazon SNS 主動追蹤。

當您使用 Amazon SNS 主控台時，Amazon SNS 會嘗試為 SNS 建立呼叫 X-Ray 的必要許可。如果您沒有足夠的許可來修改 X-Ray 資源政策，則可以拒絕嘗試。如需這些許可的詳細資訊，請參閱《[Amazon Simple Notification Service 開發人員指南》中的 Amazon SNS 中的 Identity and Access Management](https://docs.aws.amazon.com/sns/latest/dg/sns-authentication-and-access-control.html) 和 [Amazon SNS 存取控制的範例案例](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html)。如需使用 Amazon SNS 主控台開啟主動追蹤的詳細資訊，請參閱《Amazon Simple Notification Service 開發人員指南》中的在 [Amazon SNS 主題上啟用主動追蹤](https://docs.aws.amazon.com/sns/latest/dg/sns-active-tracing.html)。

使用 AWS CLI 或 SDK 開啟主動追蹤時，您必須使用以資源為基礎的政策手動設定許可。使用 [https://docs.aws.amazon.com/xray/latest/api/API_PutResourcePolicy.html](https://docs.aws.amazon.com/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`}}、{{`account-id`}}、 {{`region`}}和 取代{{`topic-name`}}為您的特定 AWS 分割區、區域、帳戶 ID 和 Amazon SNS 主題名稱。若要授予所有 Amazon SNS 主題將追蹤資料傳送至 X-Ray 的許可，請將主題名稱取代為 `*`。

## 在 X-Ray 主控台中檢視 Amazon SNS 發佈者和訂閱者追蹤
<a name="xray-services-sns-view-traces"></a>

使用 X-Ray 主控台檢視追蹤映射和追蹤詳細資訊，以顯示 Amazon SNS 發佈者和訂閱者的連線檢視。為主題開啟 Amazon SNS 主動追蹤時，X-Ray 追蹤映射和追蹤詳細資訊映射會顯示 Amazon SNS 發佈者、Amazon SNS 主題和下游訂閱者的連線節點：

![使用 Amazon SNS 發佈者和訂閱者的追蹤映射](http://docs.aws.amazon.com/zh_tw/xray/latest/devguide/images/services-sns-activetracing-map.png)


選擇跨越 Amazon SNS 發佈者和訂閱者的追蹤之後，X-Ray 追蹤詳細資訊頁面會顯示追蹤詳細資訊地圖和區段時間軸。

**Example Amazon SNS 發佈者和訂閱者的時間表範例**  
此範例顯示的時間軸包含 Amazon SNS 發佈者，會將訊息傳送至 Amazon SNS 主題，該主題由 Amazon SQS 訂閱者處理。  

![Amazon SNS 發佈者和訂閱者的客群時間軸](http://docs.aws.amazon.com/zh_tw/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.aws.amazon.com/zh_tw/xray/latest/devguide/images/services-sns-activetracing-batch-timeline.png)
