

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SQS および AWS X-Ray
<a name="xray-services-sqs"></a>

AWS X-Ray は Amazon Simple Queue Service (Amazon SQS) と統合して、Amazon SQS キュー経由で渡されるメッセージをトレースします。サービスが X-Ray SDK を使用してリクエストをトレースする場合、Amazon SQS はトレースヘッダーを送信し、整合性のあるトレース ID を持つコンシューマーに、送信者から元のトレースを伝達し続けます。トレースの継続性により、ユーザーはダウンストリームサービス全体でトレース、分析、およびデバッグを実行できます。

AWS X-Ray は Amazon SQS および AWS Lambda を使用したイベント駆動型アプリケーションのトレースをサポートします。CloudWatch コンソールを使用すると、各リクエストが Amazon SQS のキューに入れられ、ダウンストリーム Lambda 関数によって処理される過程を各リクエストの接続されたビューで確認できます。アップストリームメッセージプロデューサーからのトレースは、ダウンストリーム Lambda コンシューマーノードからのトレースに自動的にリンクされるため、アプリケーションのエンドツーエンドのビューが作成されます。詳細については、「[イベント駆動型アプリケーションのトレース](xray-tracelinking.md)」を参照してください。

![Amazon SQS キューを通じた Lambda からのトレースマップ。](http://docs.aws.amazon.com/ja_jp/xray/latest/devguide/images/console-batch-servicemap-linkededge.png)


Amazon SQS では、次のトレースヘッダー計測がサポートされています。
+ **デフォルト HTTP ヘッダー** – X-Ray SDK は AWS SDK を通じて Amazon SQS を呼び出すときに、トレースヘッダーを HTTP ヘッダーとして自動的に入力します。デフォルトのトレースヘッダーは `X-Amzn-Trace-Id` によって転送され、[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) または [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html) リクエストに含まれるすべてのメッセージに対応します。デフォルトの HTTP ヘッダーの詳細については、「[トレースヘッダー](xray-concepts.md#xray-concepts-tracingheader)」を参照してください。
+ **`AWSTraceHeader` システム属性** — `AWSTraceHeader` は、Amazon SQS によって予約された[メッセージシステム属性](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_MessageSystemAttributeValue.html)で、X-Ray トレースヘッダーをキューのメッセージとともに渡します。`AWSTraceHeader` は、新しい言語のトレース SDK を構築する場合など、X-Ray SDK による自動計測ができない場合でも使用できます。両方のヘッダー計測が設定されている場合、メッセージシステム属性が HTTP トレースヘッダーを上書きします。

Amazon EC2 で実行した場合、Amazon SQS は一度に 1 つのメッセージの処理をサポートします。これは、オンプレミスホストで実行している場合や、AWS Fargate、Amazon ECS、AWS App Mesh などのコンテナサービスを使用している場合に適用されます。

トレースヘッダーは、Amazon SQS メッセージサイズとメッセージ属性のクォータの両方から除外されます。X-Ray トレースを有効にしても、Amazon SQS クォータを超えることはありません。AWS クォータの詳細については、「[Amazon SQS クォータ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-limits.html)」を参照してください。

## HTTP トレースヘッダーの送信
<a name="xray-services-sqs-sending"></a>

Amazon SQS の送信者コンポーネントは、[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html) または [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) 呼び出しを通じて、自動的にトレースヘッダーを送信できます。AWS SDK クライアントが計測されると、X-Ray SDK を通じてサポートされているすべての言語で自動的に追跡できます。これらのサービス (例えば、Amazon S3 バケットまたは Amazon SQS キュー) 内でアクセスするトレースされた AWS のサービス およびリソースは、X-Ray コンソールのトレースマップではダウンストリームノードとして表示されます。

任意の言語で AWS SDK 呼び出しをトレースする方法については、サポートされている SDK の以下のトピックを参照してください。
+ Go – [X-Ray AWS SDK for Go を使用した SDK 呼び出しのトレース](xray-sdk-go-awssdkclients.md)
+ Java – [X-Ray AWS SDK for Java を使用した SDK 呼び出しのトレース](xray-sdk-java-awssdkclients.md)
+ Node.js – [X-Ray AWS SDK for Node.js を使用した SDK 呼び出しのトレース](xray-sdk-nodejs-awssdkclients.md)
+ Python – [X-Ray AWS SDK for Python を使用した SDK 呼び出しのトレース](xray-sdk-python-awssdkclients.md)
+ Ruby – [X-Ray AWS SDK for Ruby を使用した SDK 呼び出しのトレース](xray-sdk-ruby-awssdkclients.md)
+ .NET – [X-Ray AWS SDK for .NET を使用した SDK 呼び出しのトレース](xray-sdk-dotnet-sdkclients.md)

## トレースヘッダーを取得し、トレースコンテキストを復元する
<a name="xray-services-sqs-retrieving"></a>

Lambda ダウンストリームコンシューマーを使用している場合、トレースコンテキストの伝達は自動的に行われます。他の Amazon SQS コンシューマーでコンテキストの伝達を続行するには、レシーバーコンポーネントへのハンドオフを手動で計測する必要があります。

トレースコンテキストを復元するには、主に 3 つのステップがあります。
+ `AWSTraceHeader` APIを呼び出して [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) 属性のキューからメッセージを受信します。
+ 属性からトレースヘッダーを取得します。
+ ヘッダーからトレース ID を復元します。必要に応じて、セグメントにメトリクスを追加します。

以下は、X-Ray SDK for Java で記述された実装の例です。

**Example : トレースヘッダーを取得し、トレースコンテキストを復元する**  

```
// Receive the message from the queue, specifying the "AWSTraceHeader"
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest()
        .withQueueUrl({{QUEUE_URL}})
        .withAttributeNames("AWSTraceHeader");
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();

if (!messages.isEmpty()) {
    Message message = messages.get(0);
    
    // Retrieve the trace header from the AWSTraceHeader message system attribute
    String traceHeaderStr = message.getAttributes().get("AWSTraceHeader");
    if (traceHeaderStr != null) {
        TraceHeader traceHeader = TraceHeader.fromString(traceHeaderStr);

        // Recover the trace context from the trace header
        Segment segment = AWSXRay.getCurrentSegment();
        segment.setTraceId(traceHeader.getRootTraceId());
        segment.setParentId(traceHeader.getParentId());
        segment.setSampled(traceHeader.getSampled().equals(TraceHeader.SampleDecision.SAMPLED));
    }
}
```