Рубрики
Без рубрики

Почему вы никогда не должны печатать () в ламбдах

Как заметить aws lambda nowice, как это примечание: эта статья была первоначально опубликована … Tagged с AWS, Serverless, Python.

Как заметить новичок AWS Lambda, как это

Примечание: эта статья Первоначально был опубликован в направлении публикации Nemess Nemess Enational. 4 августа.

Сказка о двух пользователях лямбда

Сказка № 1: любитель

Один момент все в порядке, тогда … БАМ! Ваша функция лямбда поднимает исключение, вы получаете предупреждение и все меняется мгновенно.

Критические системы могут быть затронуты, поэтому важно быстро понять корневую причину.

Теперь это не какой-то низкологический лямбда, где вы можете прокручивать журналы CloudWatch и находить ошибку в чисто ручной моде. Таким образом, вместо этого вы отправляетесь в CloudWatch Insights, чтобы запустить запрос в группе журнала, фильтрацию к ошибке:

Похоже, мы нашли нашу ошибку! Хотя полезно, к сожалению, опускает любые другие сообщения журнала, связанные с неудачным вызовом.

Благодаря тому, что информация, показанная выше, может быть – просто может быть – вы можете выяснить, какова корневая причина. Но более вероятно, чем нет, вы не будете уверены.

Вы говорите людям, вы не уверены, что произошло, и что вы будете проводить больше времени расследования, если проблема снова произойдет? Как будто!

Таким образом, вместо этого вы отправляетесь к потоку журналов CloudWatch Logs, фильтруйте записывающиеся в соответствующую временную метку и начинают прокручивать вручную через сообщения журнала, чтобы найти полную информацию о конкретном ошибочном вызове.

Время разрешения: 1-2 часа Индекс использования наслаждения лямбда: Низкий

Сказка № 2: профессионал

Та же функция лямбда, такая же ошибка. Но на этот раз улучшается журнал и обработка ошибок. Как подразумевает заголовок, это включает замену Печать () заявления с чем-то лучше.

Что то что-то и как эта функция лямбда выглядит в любом случае? Давайте сначала пройдем, какая ошибка отладки выглядит как для профессионала, посмотрите на код. Справедливый?

Опять же, мы начинаем с понимания запроса:

И снова мы находим ошибку в журналах, но в отличие от в прошлый раз, событие журнала теперь включает в себя @requestid от вызова лямбда. Что это позволяет нам делать, это запустить второй запрос Insights, отфильтровал на этом запрограмме, чтобы увидеть полный набор журналов для точного призыва, который мы заинтересованы!

Теперь мы получаем 5 результатов, которые вместе нарисуйте полную сцену преступления, изображение произошедшего за этот запрос. Самое полезно, мы сразу видим, что точный вход прошел, чтобы вызвать лямбда. Из этого мы можем либо вывести то, что произошло умственно, либо запустить код лямбда локально с тем же событие ввода для отладки.

Время разрешения: 10-20 минут Индекс использования наслаждения лямбда: Высоко!

Код показывает

Я хотел бы представить, что мои читатели находятся на краю своих мест, умоляя знают разницу между любителем и кодом PRO из сказки выше.

Это правда или нет, вот любительская лямбда:

Это, конечно, намеренно просто для иллюстративных целей. Ошибки были сгенерированы просто пройдкой словаря события без художника в качестве ключа, например: Event = {'artisans': 'leonardo da vinci'} Отказ

Теперь для профессиональной лямбда, который выполняет такую же базовую функцию, но улучшается после операторов печати () и обработки ошибок.

Интересно! Так почему же мы используем модуль для ведения журнала и форматированию Tracebacks исключения?

Прекрасная логизация лямбда

Во-первых, среда Rambda Runtime для Python включает в себя Индивидуальный регистратор это умно, чтобы воспользоваться.

Это функционирует Формар Это по умолчанию включает в себя AWS_REQUEST_ID в каждом журнале сообщение. Это критическая функция, которая позволяет получить запрос на понимание, как показано выше, что фильтры на отдельных @requestid , чтобы показать полную информацию о одном вызове лямбда.

Исключительное обращение с исключением

Далее вы, вероятно, замечая модульную обработку ошибок. Хотя запугивание выглядит, используя sys.exec_info это стандартный способ Чтобы получить информацию об исключении в Python.

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

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

Упаковка

Надеюсь, если ваша лямбда на данный момент больше похожа на любительскую лямбда, эта статья вдохновляет вас модернизировать ваш танец и пройти про!

Прежде чем вы отпустить, я должен предупредить, что недостаток для замены операторов печати с надлежащим ведомством заключается в том, что вы теряете какой-либо выходной выходной сигнал, сгенерированный из локальных казней вашей лямбда.

Существует умные пути вокруг этого, связанные с переменными окружающей среды, либо в каком-то коде установки в lambda_invoke_local.py Тип файла. Если интересно, дайте мне знать И я буду рад пройти детали в будущей статье.

Наконец, в качестве последнего вдохновения, вместо того, чтобы нуждаться в запусках CloudWatch Insights queries, чтобы отладить себя, должно быть возможно настроить тревогу на метрике ошибок лямбда, которая уведомляет тему Sns, когда в состоянии «в тревоге». Другой лямбда может затем вызвать то, что SNS-тема для запуска одинаковых запросов отладки в качестве Pro автоматически, и вернуть соответствующие журналы в Slack или что-то еще.

Будет круто, нет?

Оригинал: “https://dev.to/aws-builders/why-you-should-never-ever-print-in-a-lambda-function-3i37”