Amazon Web Services (AWS) Lambda предоставляет вычислительную службу на основе использования для запуска кода Python в ответ к событиям, определяемым разработчиком. Например, если входящий HTTP POST поступает в API Gateway или новый файл загружается в AWS S3 , тогда AWS Lambda может выполнять функцию чтобы ответить на этот вызов API или управлять файлом на S3.
AWS Lambdas не связаны с выражениями lambda
языков Python, которые используются для создания анонимных функций. Название AWS Lambda просто сталкивается с именем ключевого слова lambda
.
Давайте узнаем, как быстро написать и запустить лямбда-функцию для выполнения базовый код Python 3.6, который использует в качестве входных данных переменные среды. Этот код, который также доступен на GitHub в репозитории сообщений блога , можно изменены, чтобы вы могли создавать гораздо более сложные программы на Python.
Наши инструменты
Нет инструментов локальной среды разработки для этого руководства требуются кроме веб-браузера. Вся работа будет происходят на AWS через их Консоль.
Эти шаги также можно выполнить из командной строки через boto3 , но мы не будем расскажите об этом в этом посте.
Если использование Python 2 по-прежнему является вашей проблемой, а не Python 3, взгляните на этот другой пост, в котором показано, как выполнить код Python 2.7 на AWS Lambda.
Первые шаги с AWS Lambda
Зарегистрируйте новую учетную запись Amazon Web Services , который предоставляет щедрый уровень бесплатного пользования, или используйте существующую учетную запись AWS.
После регистрации могут появиться несколько руководств, но пропустите их и перейти в главную консоль. AWS предлагает множество сервисов, и их количество добавляется каждый месяц, поэтому использование окна поиска – лучший способ обойти. Выделите текстовое поле поиска, введите «лямбда» и выберите «Лямбда», чтобы перейти к стартовая страница Lambda.
Нажмите кнопку «Создать лямбда-функцию». Страница “Выбрать чертеж” будет появляться.
Выберите «Пустая функция», и откроется страница «Настроить триггеры». Сначала это было неочевидно, но на самом деле вам не нужно настраивать триггер, чтобы двигаться дальше. Триггер – это то, как лямбда-функция обычно знает когда выполнять на основе события из другого сервиса AWS, например API-шлюз или Cloudwatch .
Мы не будем настраивать триггер для этой функции, потому что мы можем вручную запустите Lambda, чтобы проверить его, когда мы закончим его настройку. Покинуть значок триггера пуст и нажмите кнопку «Далее», чтобы двигаться дальше.
Затем мы переходим к экрану «Настроить функцию», где, наконец, можем написать какой-то код!
Код Python для нашей лямбда-функции
Введите имя лямбда-функции, например “python_3_6_lambda_test”, а также описание. Описание необязательно, но полезно когда у вас есть десятки или сотни различных лямбда-функций и нужно держать их прямо. В раскрывающемся списке Runtime выберите Python 3.6 для язык программирования.
Под раскрывающимся списком Runtime есть большое текстовое поле для кода, предварительно заполнен определением функции lambda_handler
. В Раскрывающийся список “Тип ввода кода” также можно изменить, чтобы разрешить загрузку ZIP-файла. файл или ввод файла из корзины S3. Для нашего простого первого Лямбда-функцию мы будем придерживаться опции «Редактировать код inline». Скопируйте или введите в следующем коде, заменяя то, что уже находится в текстовом поле. Этот код также доступен в этом репозитории GitHub с открытым исходным кодом .
import os def lambda_handler(event, context): what_to_print = os.environ.get("what_to_print") how_many_times = int(os.environ.get("how_many_times")) # make sure what_to_print and how_many_times values exist if what_to_print and how_many_times > 0: for i in range(0, how_many_times): # formatted string literals are new in Python 3.6 print(f"what_to_print: {what_to_print}.") return what_to_print return None
Приведенный выше код содержит обязательную функцию lambda_handler
, которая является Хук, определенный AWS Lambda, поэтому он знает, с чего начать выполнение. Думать о lambda_handler
в качестве функции main
, как
if __name__ == "__main__":
условная строка, обычно используемая в файлах Python чтобы гарантировать выполнение блока кода при запуске сценария из командная строка.
Код Python ожидает двух переменных среды, которые считываются Модуль os
с функцией Environment.get
. С помощью what_to_print
и how_many_times
переменные, установленные переменными среды, затем наш код печатает сообщение ноль или более раз в зависимости от количества, определенного в переменная how_many_times
. Если сообщение напечатано хотя бы один раз, то функция возвращает строку what_to_print
, если ничего не напечатано тогда возвращается None
.
Под текстовым полем ввода кода на этом экране конфигурации функции есть – это раздел для установки пар “ключ-значение” переменной среды.
Введите ключи с именами what_to_print
и how_many_times
, затем введите их значения. Используйте строковое сообщение для значения what_to_print
и целое число целое число больше 0 для how_many_times
. Обработка ошибок нашего кода Python не очень надежен, поэтому значение, отличное от числа в how_many_times
переменная приведет к тому, что скрипт выдаст ошибку, когда он будет выполнен из-за к принудительному приведению how_many_times
через функцию int ()
.
Код Python 3.6 и переменные среды теперь на месте. Мы просто нужно обработать еще несколько специфичных для AWS настроек, прежде чем мы сможем протестировать Лямбда-функция.
Выполнение нашей лямбда-функции
Прокрутите переменные среды до Раздел “Обработчик и роль лямбда-функции”, который содержит еще несколько необходимые элементы конфигурации функции.
Оставьте для обработчика по умолчанию значение lambda_function.lambda_handler
. Выбрать “Создать новую роль из шаблона (ов)” в раскрывающемся списке, затем для В поле «Имя роли» введите «Dynamodb_access». В разделе «Шаблоны политики» выберите «Простые разрешения микросервиса».
“Простые разрешения микросервиса” позволяют нашей Лямбде получить доступ AWS DynamoDB . Мы не будем использовать DynamoDB в это руководство, но служба обычно используется либо как постоянная, либо временное хранилище лямбда-функций.
Наш код и конфигурация готовы, поэтому нажмите кнопку «Далее». в правом нижнем углу страницы.
Экран обзора показывает нам наши настройки конфигурации, чтобы убедиться, что мы выбрали соответствующие значения для нашей новой лямбда-функции. Прокрутить вниз нажмите «Создать функцию».
Сообщение об успешном завершении должно появиться на следующей странице под кнопкой «Тест».
Нажмите кнопку «Тест», чтобы выполнить лямбду. Лямбда подскажет нам некоторые данные для имитации события, которое запустит нашу функцию. Выбрать образец шаблона события “Hello World”, который содержит некоторые ключи, но наши Lambda не будет использовать это при выполнении. Нажмите кнопку «Сохранить и протестировать». внизу модального окна.
Прокрутите вниз до раздела «Результат выполнения», где мы можем увидеть наш результат.
Вывод журнала показывает нам возвращаемое значение нашей функции, которое в этом Выполнение было строковым сообщением от what_to_print
. Мы также можем видеть наша функция печати выдала результат в пять раз, как ожидалось, на основе количество, заданное в переменной среды how_many_times
.
Следующие шаги
Вы только что настроили, закодировали и выполнили свой первый Python 3.6 AWS Lambda. функция! Настоящая сила Lambda проявляется, когда вы используете триггеры для ваша лямбда-функция, чтобы она выполнялась в зависимости от происходящих событий. Мы рассмотрим это в следующем уроке.
Просмотрите страницу AWS Lambda Full Stack Python для получения дополнительных примеры и руководства, которыми другие люди поделились для Lambda с Python.
Вопросов? Свяжитесь со мной через Twitter @fullstackpython или @mattmakai . Я также на GitHub с имя пользователя mattmakai .
Что-то не так с этим сообщением? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос.