メニュー
AWS Lambda
開発者ガイド

Python

Python では、Lambda によってサブセグメントを X-Ray に発行して、関数が行った他の AWS サービスへのダウンストリーム呼び出しに関する情報を表示できます。これを行うには、最初に AWS X-Ray SDK for Python をデプロイパッケージに含める必要があります。さらに、boto3 (セッションを使用している場合は botocore) にパッチを適用して、AWS のサービスにアクセスするクライアントを作成すると自動的に X-Ray によって追跡されるようにできます。

import boto3 from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch patch(['boto3'])

クライアント作成に使用するモジュールにパッチを適用すると、それを使用して追跡対象のクライアントを作成できます。次の例の場合は Amazon S3 です。

s3_client = boto3.client('s3')

X-Ray SDK for Python によって呼び出しのサブセグメントが作成され、リクエストとレスポンスの情報が記録されます。aws_xray_sdk_sdk.core.xray_recorder を使用して自動的にサブセグメントを作成できます。これを行うには、次の Lambda 関数に示すように、Lambda 関数をデコレートするか、関数内に xray_recorder.begin_subsegment() および xray_recorder.end_subsegment() を手動で呼び出します。

import boto3 from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch patch(['boto3']) s3_client = boto3.client('s3') def lambda_handler(event, context): bucket_name = event['bucket_name'] bucket_key = event['bucket_key'] body = event['body'] put_object_into_s3(bucket_name, bucket_key, body) get_object_from_s3(bucket_name, bucket_key) # Define subsegments manually def put_object_into_s3(bucket_name, bucket_key, body): try: xray_recorder.begin_subsegment('put_object') response = s3_client.put_object(Bucket=bucket_name, Key=bucket_key, Body=body) status_code = response['ResponseMetadata']['HTTPStatusCode'] xray_recorder.current_subsegment().put_annotation('put_response', status_code) finally: xray_recorder.end_subsegment() # Use decorators to automatically set the subsegments @xray_recorder.capture('get_object') def get_object_from_s3(bucket_name, bucket_key): response = s3_client.get_object(Bucket=bucket_name, Key=bucket_key) status_code = response['ResponseMetadata']['HTTPStatusCode'] xray_recorder.current_subsegment().put_annotation('get_response', status_code)

注記

X-Ray SDK for Python では、次のモジュールにパッチを適用できます。

  • botocore

  • boto3

  • リクエストでオプションで指定するパラメータです。

  • sqlite3

  • mysql

patch_all() を使用してこれらのすべてに一括でパッチを適用できます。

前述のコードによって発行されたトレースは以下のようになります (同期呼び出し)。