3

I'm trying to implement APM Serverless for AWS Lambda in a Python function. The function is deployed via a container image, so the extension is built as a layer in the Dockerfile.

Firstly, in case someone is trying to auto instrument this process; The extension must be unzipped into /opt/extensions/ not to /opt/ like suggested in the docs. Otherwise, the Lambda won't see the extension.

This is the Dockerfile:

FROM amazon/aws-cli:2.2.4 AS downloader

ARG version_number=10
ARG region=

ENV AWS_REGION=${region}
ENV VERSION_NUMBER=${version_number}

RUN yum install -y jq curl

WORKDIR /aws

RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip

# set base image (host OS)
FROM python:3.6.8-slim

ENV APPDYNAMICS_PYTHON_AUTOINSTRUMENT=true

# set the working directory for AppD
WORKDIR /opt

RUN apt-get clean \
    && apt-get -y update \
    && apt-get -y install python3-dev \
    python3-psycopg2 \
    && apt-get -y install build-essential

COPY --from=downloader /aws/extension.zip .
RUN apt-get install -y unzip && unzip extension.zip -d /opt/extensions/ && rm -f extension.zip

# set the working directory in the container
WORKDIR /code

RUN pip install --upgrade pip \
    && pip install awslambdaric && pip install appdynamics-lambda-tracer

# copy the dependencies file to the working directory
COPY requirements.txt .

# install dependencies
RUN pip install -r requirements.txt

# copy the content of the local src directory to the working directory
COPY /src .

RUN chmod 644 $(find . -type f) \
    && chmod 755 $(find . -type d)

# command to run on container start
ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
CMD [ "app.lambda_handler" ]

However, when executing the function, I get the following error:

AWS_Execution_Env is not supported, running lambda with default arguments.

EXTENSION Name: appdynamics-extension-script State: Started Events: []
Start RequestId <requestid>
End RequestId <requestid>
Error: exit code 0 Extension.Crash

Without more information.

When I try to implement the tracer manually, by installing appdynamics-lambda-tracer with pip, and importing the module I do see the logs in Cloudwatch from AppDynamics but they don't report to the controller.

Any idea what could be causing said crash?

Arehandoro
  • 267
  • 1
  • 2
  • 11

0 Answers0