Skip to main content

A shim which faciliates the AWS X-Ray tracing of Lambda Functions invoked by triggers which don't have native X-Ray support.

Project description

GitHub Workflow Status PyPI

https://github.com/Sam-Martin/aws-xray-lambda-segment-shim/blob/main/images/example.png?raw=true

It’s not currently possibly follow an AWS Xray trace through a Lambda Function triggered by an SQS Queue.

Unless you use aws-xray-lambda-segment-shim!

Installation

pip install aws-xray-lambda-segment-shim

Usage

from aws_xray_lambda_segment_shim import get_sqs_triggered_recorder


def lambda_handler(event, context):
    for i, record in enumerate(event["Records"]):
        recorder = get_sqs_triggered_recorder(
            record=record,
            lambda_request_id=context.aws_request_id,
            lambda_arn=context.invoked_function_arn,
        )
        with recorder.in_segment():
            with recorder.in_subsegment(f"SQS Record {i}") as subsegment:
                print(
                    "I'm triggered by an SQS Record and using trace id ",
                    subsegment.trace_id,
                )

TriggeredXrayRecorder is a child class of aws_xray_sdk.AWSXRayRecorder so you can use all the methods you would expect from following the aws-xray-sdk documentation.

Caveats

This approach causes all subsegments created with it to appear only in the trace that was passed in by SQS. There will still be a separate Lambda trace that will not contain these subsegments and will not show as being triggered by SQS.

This approach is useful if you are using SQS as an intermediary for a process you’re already tracing as it then makes logical sense to view the traces from that starting point.

If you’re more likely to view your traces as starting at the lambda function (i.e. you do not have any tracing prior to the SQS queue) then your mileage may vary with this approach.

We are also here working outside the scope of what is expected by the aws-xray-sdk. We are pretending to be AWS Lambda when we’re initiating a trace, we’re using undocumented fields to pretend to be AWS Lambda, and to allow the correlation of the SQS message and the Lambda Invocation (edge creation).

If this wasn’t the only way to pursue a trace through SQS to lambda I would suggest you avoid it! But given the complexity involved in automating this from AWS’s side, it may be a while before we see native support.

Testing

You can run the python tests with:

pip install -r requirements.txt
make local-test

Terraform Tests

You can run the terraform tests with:

$ make install-xray-daemon-mac
$ make run-xray-daemon-mac

Then in a new terminal run:

$ make terraform-init
$ make terraform-apply
$ make terraform-send-message

Once that’s complete you can click on the xray URL provided at the end of the test to observe the trace is correct.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aws_xray_lambda_segment_shim-0.5.3.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file aws_xray_lambda_segment_shim-0.5.3.tar.gz.

File metadata

  • Download URL: aws_xray_lambda_segment_shim-0.5.3.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.7.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

File hashes

Hashes for aws_xray_lambda_segment_shim-0.5.3.tar.gz
Algorithm Hash digest
SHA256 e269d702d0a4ce9408a0f768ba0b12c2bfa2e55a6dab21c2e90a52525bffaf2d
MD5 9070fc46c5dde3c8f2f31779d11a9bab
BLAKE2b-256 8ce6a41aaca5f94faff0691056a1bfce4c5f266cdc7030ab5b88fdf0ff567acc

See more details on using hashes here.

File details

Details for the file aws_xray_lambda_segment_shim-0.5.3-py3-none-any.whl.

File metadata

  • Download URL: aws_xray_lambda_segment_shim-0.5.3-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.7.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

File hashes

Hashes for aws_xray_lambda_segment_shim-0.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f15b96b8ed81f75e5a72b1c720d3d865cd6bbeeb49918025eed835edfeb0cd2e
MD5 fb9d4a62ca1347fd6b8ad35d5febbe6d
BLAKE2b-256 43928f424bb875d6b017eaec5e08e4a7c9b602d3a7b8d50080565ea068810170

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page