AWS X-Ray
開発者ガイド

ダウンストリーム呼び出しを計測するためのライブラリへのパッチ適用

ダウンストリーム呼び出しを実装するには、X-Ray SDK for Python を使用して、アプリケーションが使用するライブラリにパッチを適用します。X-Ray SDK for Python は、以下のライブラリにパッチを適用できます。

サポートされているライブラリ

  • botocoreboto3 – 実装された AWS SDK for Python (Boto) クライアント。

  • pynamodb – 実装された Amazon DynamoDB クライアントの PynamoDB のバージョン。

  • aiobotocoreaioboto3 – 実装された asyncio 統合バージョンの SDK for Python クライアント。

  • requestsaiohttp – 実装された高レベルの HTTP クライアント。

  • httplibhttp.client – 実装された低レベルの HTTP クライアントおよびそれらを使用する高レベルのライブラリ。

  • sqlite3 – 実装された SQLite クライアント。

  • mysql-connector-python – 実装された MySQL クライアント。

パッチ適用されたライブラリを使用すると、X-Ray SDK for Python は呼び出しのサブセグメントを作成し、リクエストとレスポンスの情報を記録します。SDK ミドルウェアまたは AWS Lambda のいずれかから、サブセグメントを作成するためにSDK でセグメントを使用できる必要があります。

注記

SQLAlchemy ORM を使用する場合は、SQLAlchemy のセッションクラスとクエリクラスの SDK のバージョンをインポートして、SQL クエリを追加できます。手順については、Use SQLAlchemy ORM を参照してください。

使用可能なすべてのライブラリにパッチを適用するには、aws_xray_sdk.corepatch_all 関数を使用します。httpliburllib などの一部のライブラリでは、patch_all(double_patch=True) を呼び出して二重パッチ適用を有効にすることが必要な場合があります。

例 main.py – サポートされているすべてのライブラリにパッチを適用

import boto3 import botocore import requests import sqlite3 from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch_all patch_all()

個々のライブラリにパッチを適用するには、patch をライブラリ名のタプルで呼び出します。

例 main.py – 特定のライブラリにパッチを適用

import boto3 import botocore import requests import mysql-connector-python from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch libraries = ('botocore', 'mysql') patch(libraries)

注記

場合によっては、ライブラリにパッチを適用するために使用するキーがライブラリ名と一致しない場合があります。一部のキーは、1 つまたは複数のライブラリのエイリアスとして機能します。

ライブラリエイリアス

非同期作業のコンテキストのトレース

asyncio によって統合されたライブラリの場合や、非同期関数用のサブセグメントを作成する場合は、非同期コンテキストで X-Ray SDK for Python も設定する必要があります。AsyncContext クラスをインポートし、そのインスタンスを X-Ray レコーダーに渡します。

注記

ウェブフレームワークサポートライブラリ (例: AIOHTTP) は、aws_xray_sdk.core.patcher モジュールで処理することはできません。これらのライブラリは、サポートされているライブラリの patcher カタログに表示されません。

例 main.py – aioboto3 のパッチ適用

import asyncio import aioboto3 import requests from aws_xray_sdk.core.async_context import AsyncContext from aws_xray_sdk.core import xray_recorder xray_recorder.configure(service='my_service', context=AsyncContext()) from aws_xray_sdk.core import patch libraries = ('aioboto3') patch(libraries)