AWS Lambda
Guia do desenvolvedor

Instrumentação do código Python no AWS Lambda

No Python, você pode ter que emitir subsegmentos Lambda para o X-Ray exibir informações sobre chamadas downstream para outros serviços da AWS criados pela sua função. Para fazer isso, primeiro você precisa incluir o SDK do AWS X-Ray para Python no seu pacote de implantação. Além disso, você pode corrigir o boto3 (ou botocore, se você estiver usando sessões), então qualquer cliente criado para acessar outros serviços da AWS será automaticamente rastreado pelo X-Ray.

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

Depois de corrigir o módulo que você está usando para criar clientes, é possível usá-lo para criar seus clientes rastreados, no caso abaixo do Amazon S3:

s3_client = boto3.client('s3')

O SDK do X-Ray para Python cria um subsegmento para a chamada e registra informações da solicitação e da resposta. Você pode usar o aws_xray_sdk_sdk.core.xray_recorder para criar subsegmentos automaticamente, decorando suas funções Lambda ou manualmente, chamando xray_recorder.begin_subsegment() e xray_recorder.end_subsegment() dentro da função, como mostrado na seguinte função Lambda.

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)

nota

O SDK do X-Ray para Python permite corrigir os seguintes módulos:

  • botocore

  • boto3

  • solicitações

  • sqlite3

  • mysql

Você pode usar o patch_all() para corrigir todos eles de uma só vez.

Veja a seguir como se parece um rastreamento emitido pelo código precedente (invocação síncrona):