Skip to content

in_segment_async doesn't get/pass the current Lambda segment #349

Open
@abivolmv

Description

@abivolmv

Hello,
I am opening this issue on request of @NathanielRN after a discussion with him in #310 .

The problem is that when we have API GW -> Lambda invocation and in the Lambda we use async , then we get 2 separate traces. One from API GW to Lambda and another from in_segment_async . To tie them together I have to use the following workaround:

    # get current segment
    trace_id = xray_recorder.get_trace_entity().trace_id
    parent_id = xray_recorder.current_segment().id
    # enable xray to work with async
    # even though Lambda has its own segment we need to create one async segment
    xray_recorder.configure(context=AsyncContext())
    async with xray_recorder.in_segment_async('add_brochure', traceid=trace_id, parent_id=parent_id) as segment:
       ...

But even then most of the times (usually works first time after deployment only) it doesn't work because I get the error:

[ERROR] AttributeError: 'NoneType' object has no attribute 'trace_id'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 19, in lambda_handler
    trace_id = xray_recorder.get_trace_entity().trace_id

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions