Skip to content

Unable to create top-level subsegment in image Lambda #300

@jamesohortle

Description

@jamesohortle

I have a Lambda deployed as a Docker image that instantiates a class in the global context. This class is used in various other functions.

I wanted to see how much of the time during instantiation (cold start) was taken up by this class instantiation. However, I can't seem to make a (sub)segment that shows me this in the console.

Minimal reproducible code:

from aws_xray_sdk.core import xray_recorder
from my_classes import BigClass

# Instantiate big class up-front.
xray_recorder.configure(sampling=False)
with xray_recorder.in_segment("instantiate class") as segment: # Have also tried without this line.
    with xray_recorder.in_subsegment("instantiate class") as subsegment:
        subsegment.put_annotation("key", "value")
        big_class = BigClass()

The X-Ray decorators work in other parts of my code so it's not an issue with requirements.txt or my Dockerfile.

Here's the Dockerfile anyway.

FROM public.ecr.aws/lambda/python:3.8

# Install dependencies.
COPY requirements.txt ./
RUN python3.8 -m pip --no-cache-dir install --upgrade pip && python3.8 -m pip --no-cache-dir install -r requirements.txt

# Copy application code and provide entrypoint.
COPY src/index.py   ./
CMD ["index.handler"]      

How should I trace the instantiation of global objects (top level of a script)?

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions