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

Мониторинг функций Python 3.6 на AWS Lambda

Контролируйте код своего приложения Python 3.6 в функциях Lambda Amazon Web Services (AWS) с помощью Rollbar.

Автор оригинала: Matt Makai.

Amazon Web Services (AWS) Lambda основан на использовании среда выполнения, которая может запускать код Python 3.6. Если у тебя никогда не было ранее использовали AWS Lambda, вы можете прочитать
Как создать свою первую лямбда-функцию AWS в Python 3.6. Тем не менее, это руководство даст вам каждый шаг, которому нужно следовать, даже если вы совершенно не знакомы с AWS.

В этом посте мы собираемся отслеживать код Python, работающий на AWS. Lambda с помощью размещенной службы мониторинга, Штанга.

Необходимые инструменты и код

Локальная среда разработки не является требуется для следования этому руководству. Вся работа будет происходить в сети браузер через Консоль AWS .

Пример кода можно скопировать и вставить из этого сообщения в блоге или вы можете получить к нему доступ на GitHub в разделе Примеры публикаций в блогах на Python репозиторий в каталог monitor-aws-lambda-python-3-6 .

Доступ к сервису AWS Lambda

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

Целевая страница AWS Lambda.

AWS предлагает множество сервисов, поэтому используйте поле поиска, чтобы ввести “лямбда” и выберите “Лямбда”, когда появится соответствующий стартовая страница.

Найдите лямбда-выражение в текстовом поле панели управления.

Нажмите кнопку «Создать функцию».

Экран создания лямбда-функции.

Выберите «Автор с нуля». Введите имя, чтобы вы могли легко узнать это функция для дальнейшего использования. Я выбрал «monitorPython3». Выберите «Python 3.6». для времени выполнения.

Выберите «Создать новую роль из шаблона (ов)», введите имя роли, например “basicEdgeLambdaRole”. Для шаблонов политики выберите «Basic Edge Lambda». Разрешения ».

Затем нажмите «Создать функцию».

Пустая функция AWS Lambda с именем monitorPython3.

Хорошо, наконец, мы пришли к экрану конфигурации, где мы можем написать наш код.

Кодирование функции Python

Прокрутите вниз до раздела пользовательского интерфейса «Код функции».

Вставьте или введите следующий код, заменив то, что уже есть в текстовое окно.

import os
import rollbar


ROLLBAR_KEY = os.getenv('ROLLBAR_SECRET_KEY', 'missing Rollbar secret key')
rollbar.init(ROLLBAR_KEY, 'production')


@rollbar.lambda_function
def lambda_handler(event, context):
    message = os.getenv("message")
    print_count = int(os.getenv("print_count"))

    # check if message exists and how many times to print it
    if message and print_count > 0:
        for i in range(0, print_count):
            # formatted string literals are new in Python 3.6
            print(f"message: {message}.")
        return print_count
    return None

Код содержит требуемую функцию lambda_handler . lambda_handler – это ловушка Lambda, с которой начать выполнение кода.

Код Python ожидает двух переменных среды, которые считываются модуль os с функцией getenv . сообщение и Переменные print_count устанавливаются переменными среды.

Код Python 3.6 в лямбда-функции.

Под текстовым полем ввода кода на этом экране конфигурации функции есть – это раздел для установки пар “ключ-значение” переменной среды. Нам нужно ввести две переменные среды, а затем мы можем запустить наш код.

Введите ключи с именем message со значением Hello World! . потом введите print_count в качестве второго ключа со значением 5 .

Обработка ошибок в нашем коде Python не является надежной. Значение, отличное от число в переменной print_count заставит скрипт выбросить исключение, когда оно выполняется из-за принудительного преобразования print_count через функцию int () . Мы будем использовать исключение, которое может произойти во время это принудительное приведение в качестве тривиального примера, показывающего, что происходит, когда ошибки в нашем коде происходят во время выполнения лямбда-функции.

Нажмите кнопку «Сохранить» в правом верхнем углу. Использовать значения по умолчанию тестового шаблона «Hello World» и назовите его «testHelloWorld». Нам не нужны никакие из этих значений для нашей функции.

Настройте пустое тестовое событие для вашей лямбда-функции.

Нажмите «Создать», и ваш тестовый шаблон будет создан. Теперь нажмите «Тест» для запуска функции. Вы должны увидеть «Результат выполнения: выполнено успешно». с пятикратной печатью переменной message .

Выполнение завершается успешно, если для переменной print_count есть целочисленное значение.

Теперь измените значение print_count на не знаю . Сохраните функцию и снова нажмите «Проверить». Функция завершится ошибкой.

Выполнение не выполняется, если у нас нет целочисленного значения для переменной print_count.

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

Мониторинг нашей лямбда-функции

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

Домашняя страница Rollbar.

Нажмите «Зарегистрироваться» в правом верхнем углу. Введите свой адрес электронной почты, имя пользователя и желаемый пароль.

Регистрация учетной записи Rollbar в вашем браузере.

После страницы регистрации вы увидите процесс адаптации, где вы можете введите название проекта и выберите язык программирования. Для проекта введите имя в “Full Stack Python”, а затем выберите, что вы отслеживаете приложение на основе Python.

Назовите свой проект «Full Stack Python» и выберите Python в качестве языка.

Нажмите «Продолжить» внизу экрана. Следующий Страница показывает нам несколько инструкций о том, как добавить мониторинг.

Настройте проект, используя токен доступа на стороне сервера.

Обратите внимание на токен доступа на стороне сервера, так как нам нужно будет его установить. в качестве переменной среды в AWS Lambda.

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

import os
import rollbar


ROLLBAR_KEY = os.getenv('ROLLBAR_SECRET_KEY', 'missing Rollbar secret key')
rollbar.init(ROLLBAR_KEY, 'production')


@rollbar.lambda_function
def lambda_handler(event, context):
    message = os.getenv("message")
    print_count = int(os.getenv("print_count"))

    # check if message exists and how many times to print it
    if message and print_count > 0:
        for i in range(0, print_count):
            # formatted string literals are new in Python 3.6
            print(f"message: {message}.")
        return print_count
    return None

Выделенные выше новые строки кода включают библиотеку Rollbar . в наше приложение, установите ROLLBAR_KEY с нашей переменной среды и используйте декоратор rollbar.lambda_function , чтобы отловить все ошибки в наша функция lambda_handler .

Добавьте следующую третью переменную среды с именем ROLLBAR_SECRET_KEY это серверный токен из вашего нового проекта Rollbar.

Добавьте серверный ключ Rollbar в переменную окружения Lambda.

Есть только одна проблема с этой функцией в Lambda в ее нынешнем виде: есть Lambda никак не может узнать о коде пакета Rollbar. Внешний Rollbar необходимо включить зависимость. Есть несколько способов справиться с выпуск:

Я предоставил готовый zip-файл, чтобы сэкономить время в этом руководстве, поэтому попробуйте это сейчас, чтобы мы могли увидеть окончательные результаты. В разделе «Код функции» измените «Тип ввода кода» от «Редактировать код в строке» до «Загрузить файл .ZIP». Нажмите кнопку «Загрузить» в разделе «Пакет функций».

Загрузите ZIP-файл с зависимостью от Rollbar.

Нажмите кнопку «Сохранить» вверху. С нашим новым кодом мы теперь можем видеть, Rollbar фиксирует исключения и сообщает о них. Нажмите кнопку “Сохранить” и затем «Тест».

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

Пользовательский интерфейс Rollbar с исключениями.

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

Что дальше?

Мы просто написали и выполнили функцию Python 3.6 на AWS Lambda, а затем записали сообщение об исключении в наши журналы Rollbar. Теперь вы можете продолжайте создавать свой код Python, зная, что когда что-то идет не так, вы будете иметь полную картину того, что произошло.

Ознакомьтесь с разделом AWS Lambda для больше руководств других разработчиков.

Дальнейшие вопросы? Свяжитесь со мной в Твиттере @fullstackpython или @mattmakai . Я также на GitHub с имя пользователя mattmakai .

Что-то не так с этим сообщением? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос.