#python #docker #aws-lambda #appdynamics
Вопрос:
Я пытаюсь реализовать APM без сервера для AWS Lambda в функции Python. Функция развертывается с помощью образа контейнера, поэтому расширение создается в виде слоя в файле Dockerfile.
Во-первых, на случай, если кто-то пытается автоматически настроить этот процесс; Расширение должно быть распаковано в /opt/расширения/ не в /opt/, как предложено в документах. В противном случае Лямбда не увидит расширение.
Это файл 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
amp;amp; apt-get -y update
amp;amp; apt-get -y install python3-dev
python3-psycopg2
amp;amp; apt-get -y install build-essential
COPY --from=downloader /aws/extension.zip .
RUN apt-get install -y unzip amp;amp; unzip extension.zip -d /opt/extensions/ amp;amp; rm -f extension.zip
# set the working directory in the container
WORKDIR /code
RUN pip install --upgrade pip
amp;amp; pip install awslambdaric amp;amp; 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)
amp;amp; chmod 755 $(find . -type d)
# command to run on container start
ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
CMD [ "app.lambda_handler" ]
Однако при выполнении функции я получаю следующую ошибку:
AWS_Execution_Env не поддерживается, выполняется лямбда — код с аргументами по умолчанию.
EXTENSION Name: appdynamics-extension-script State: Started Events: []
Start RequestId <requestid>
End RequestId <requestid>
Error: exit code 0 Extension.Crash
Без дополнительной информации.
Когда я пытаюсь реализовать трассировщик вручную, установив appdynamics-лямбда-трассировщик с помощью pip и импортировав модуль, я вижу журналы в Cloudwatch из AppDynamics, но они не сообщают контроллеру.
Есть идеи, что может быть причиной упомянутого сбоя?