У меня есть AWS Lambda, написанная на Python 3.6 с использованием последней стабильной версии aws_xray_sdk и развернутая как лямбда-функция, а не как конечная точка шлюза API.
Все работает, как и ожидалось, однако я создал собственный обработчик исключений для моей лямбды, поэтому, если возникает исключение, регистрируется ошибка и отправляется ответ об ошибке, а не просто return false
.
Есть ли способ пометить мой текущий подсегмент aws xray как ошибку?
Я обнаружил, что у объекта subsegment
есть метод apply_status_code
, однако, похоже, это не делает то, на что я надеялся.
def unhandled_exception(e, event: LambdaDict, context: LambdaContext):
logging.exception(e)
logging.error(f"""Event: {str(event)}
Context: {str(dict(context))}""")
sub_segment = xray_recorder.current_subsegment()
sub_segment.apply_status_code(500)
return {
'sms_sent': False,
'error': f"{type(e).__name__}:{e}",
}
изменить 1:
Я смог получить по крайней мере свои собственные подсегменты, сообщающие с 400 и статусом ошибки в следах xray со следующим кодом.
...
# when an error state exists
if sub_segment:
sub_segment.add_error_flag()
sub_segment.apply_status_code(400)
...
...
# directly before the return
try:
xray_recorder.end_subsegment()
xray_recorder.end_segment()
except Exception as xray_e:
logging.warning(xray_e)
return response
Однако это не то, что используется для генерации карты сервиса xray.
Я начинаю думать, что должен был только что сделать свои API-интерфейсы для отдыха лямбд, поскольку по крайней мере они возвращали бы коды состояния HTTP, которые я мог отследить.