Lambda AWS X-Ray. Python SDK - деактивировать локально - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть приложение Flask, работающее как лямбда-функция AWS, развернутое с Zappa, и я хочу активировать X-Ray для получения дополнительной информации о различных функциях.

Активировать X-Ray с помощью Zappa было достаточно просто -требуется только добавить эту строку в zappa-settings.json:

"xray_tracing": true

Далее я установил AWS X-Ray Python SDK и добавил несколько декораторов для некоторых функций, напримерthis:

@xray_recorder.capture()

Когда я развертываю это как лямбда-функцию, все это работает хорошо.Проблема заключается в использовании системы локально, как при выполнении тестов, так и при запуске Flask на локальном сервере, а не в качестве лямбда-функции.

Когда я использую любую из функций, которые оформлены либо в тесте, либо черезНа локальном сервере выдается следующее исключение:

aws_xray_sdk.core.exceptions.exceptions.SegmentNotFoundException: cannot find the current segment/subsegment, please make sure you have a segment open

Что, конечно, имеет смысл, поскольку AWS Lambda обрабатывает создание сегментов.

Есть ли хорошие способы деактивировать захват на месте?Это было бы полезно, например, для локального запуска модульных тестов функций, которые я хотел бы посмотреть в X-Ray.

1 Ответ

0 голосов
/ 20 ноября 2018

Один из требований функции этого SDK - иметь глобальный флаг «отключен», чтобы все стало бездействующим https://github.com/aws/aws-xray-sdk-python/issues/26.

Однако, это все еще зависит от того, с чем вы тестируете. Хорошей практикой является проверка того, что на самом деле будет работать на Lambda. Вы можете установить некоторые переменные окружения, чтобы SDK считал, что работает на Lambda.

Вы видите, что SDK ищет две переменные env https://github.com/aws/aws-xray-sdk-python/blob/master/aws_xray_sdk/core/lambda_launcher.py. Одна из них LAMBDA_TASK_ROOT установлена ​​на true, поэтому она знает, что нужно переключиться в лямбда-режим. Другой - _X_AMZN_TRACE_ID, который содержит контекст трассировки, обычно передаваемый лямбда-контейнером.

Если вы просто хотите протестировать не-XRay-код, вы можете установить AWS_XRAY_CONTEXT_MISSING на LOG_ERROR, чтобы SDK не жаловался на отсутствие контекста и просто отказывался от захвата упакованных функций. Это будет выполнять гораздо меньше пути кода, чем имитация лямбда-поведения. В идеале было бы лучше, если бы локальный лямбда-инструмент для тестирования был дружественным к рентгеновским лучам. Используете ли вы https://github.com/awslabs/aws-sam-cli? Для этой функции уже открыт вопрос https://github.com/awslabs/aws-sam-cli/issues/217

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...