В котором я сравниваю развертывание колбных приложений к aws лямбда с Zappa и Serverless Framework
Divorter/Flask-лямбда
Развертывание приложения для колбы к AWS LAMBDA
Один из первых языков программирования, которые я узнал, был Python. Первая версия (v0) моего хобби сайта Veganfeeds Однако был написан в PHP с сервером Apache, подключенным к базе данных PostgreSQL, служащую динамически отображенным HTML. Во второй версии смущает название V1, я переехал из традиционного стека лампы (или LAPP в моем случае) к Застревание стека Отказ Быть знаком с Python, я решил, что Колбу был бы «a» в моем стеке джема.
После создания приложения Flask вместо того, чтобы продолжить с помощью традиционного веб-сервера, я решил дать безсетелю пробовать. Теперь, когда я закончил мою поездку по Memory Lane, давайте пропустим возможность развертывания приложения для колбы к AWS LAMBDA Отказ
В то время как Сэм Кли Можно развернуть Python Lambdas, вы не можете развернуть приложение для колба прямо из коробки. Хотя вы можете с небольшой помощью Flask-Severless Отказ Я не использовал его лично, поэтому я не буду рассмотреть его здесь.
Zappa
Учитывая существующее приложение Flask, Zappa это самый простой способ получить приложение вашей колбы там. И когда я впервые обнаружил Заппу, я знал рядом с экосистемой AWS Итак, это был дружелюбный ресурс, чтобы позволить мне получить мою колбу в дикой природе.
Это так просто, как:
$ pip install zappa $ zappa init $ zappa deploy
К сожалению, хотя никогда не так просто. Приведенное выше предполагается, что вы установили ваши зависимости в виртуальной среде в каталоге проекта. Поэтому, если вы еще не сделали, вы получите ошибку, как приведенные ниже:
Error: Zappa requires an active virtual environment!
Итак, давайте восстановим, что настроив виртуальную среду и устанавливая наши зависимости в нее.
$ python3 -m venv venv $ source venv/bin/activate $ pip install zappa flask
Хорошо, теперь мы готовы развернуть. Если мы запустим Zappa развертывает
Снова мы сейчас сталкиваемся с новой ошибкой.
Error: This application is already deployed - did you mean to call update?
Как показано как Zappa, я обнаружил, что имея отдельных команд для начального развертывания и обновления существующих развертываний, раздражающих. Во всяком случае, давайте сделаем это. Давайте позвоним Zappa Update
Отказ И ура работает.
Your updated Zappa deployment is live!: https://051zc5ynck.execute-api.ap-southeast-2.amazonaws.com/dev
Давайте посмотрим в браузере.
Ага! Выглядит неплохо.
Шансы. Тогда вам нужно будет имитировать среду лямбда при установке зависимостей с Docker, используя очень удобную Лямбда докер изображений построенный командой лямбги. Так что вы могли бы сделать что-то вроде:
$ pip freeze > requirements.txt $ docker run -ti -v $(pwd):/var/task --rm lambci/lambda:build-python3.6 bash -c "python3 -m venv zappa_venv && source zappa_venv/bin/activate && pip install -r requirements.txt"
Теперь зависимости строятся в правильной среде и при запуске Zappa развертывает
Ваша лямбда теперь должна работать снова. Но это отличная большая уродливая команда. Уверен, что вы используете DockerFile, но если вы не знакомы с Docker, то это сделает все сложнее.
Смертные рамки
Сейчас, несмотря на то, что заппа разбивается, когда было вокруг, когда было мало и действительно растянуло возможности облачности и действительно растянуло тяжело тяжелую поднятие за кулисами, прежде чем нативная поддержка была выделена стандартным. Это также приходит с большим количеством удобных функций, таких как vege_warm
функция, чтобы охватить простудную проблему.
Смертная рамка это более общий инструмент. Не только покрывает языки, отличные от Python, такие как Node.js и ruby, но и другие поставщики функции As-A-A-A-Service (FAAS), такие как Google Cloud и Microsoft Azure.
Установка-WISE Serverless Framework не такой дружелюбный, чтобы настроить первый раз как Zappa. Очевидно, что помимо установки Python, вам также понадобится Node.js установлен как предварительное условие.
Предполагая, что у вас есть узел, чтобы установить безверенно через NPM, который отправляется с Node.js
$ npm install -g serverless
-G
Флаг означает, что теперь он доступен по всему миру, и вам не нужно снова устанавливать его для будущих проектов. Хорошо, так что теперь?
$ serverless create --template aws-python3
Хорошо, круто, поэтому у нас сейчас есть несколько файлов. handler.py
, .gitignore
и Serverless.yml
Сосредоточиться на Handler.py.
Этот файл показывает голые кости Python Lambda Handler. Итак, как мы сжимаем наше приложение для колбы в это? Ну, мы на самом деле не собираемся использовать это вообще. Мы собираемся использовать плагин. Сообщество без сервера очень активно с множеством плагинов, чтобы сохранить вещи приятно и просто. Serverless-wsgi Плагин, как Zappa, предназначен для развертывания приложений Python WSGI к Lambda и рассуждает протоколы обработчика. Вы заметите в нижней части ссылки, которую плагин привлекает вдохновение от Zappa. Чтобы добавить плагин, вам нужно будет запустить
$ sls plugin install -n serverless-wsgi
Обратите внимание, что SLS
это удобный псевдоним для Serverless
. Далее нам нужно добавить несколько строк в нижнюю часть нашего Serverless.yml
файл.
custom: wsgi: app: app.app
Далее нам нужно изменить нашу Serverless.yml
в разделе функций, чтобы это выглядит так
functions: hello: handler: handler.hello api: handler: wsgi_handler.handler events: - http: ANY / - http: ANY {proxy+}
В отличие от Zappa нет зависимости от выполнения виртуальной среды, однако Serverless-wsgi
полагается на Виртуальский
модуль. Если у вас нет его просто установлено бегать
$ pip install virtualenv
с последующим
$ sls deploy
С любой удачей вывод теперь покажет URL для нашего недавно созданного API
И если мы открываемся в браузере …
Работает отлично. Теперь, если мы хотим добавить вторую восклицание и сказать «Привет, мир !!». В отличие от Zappa, мы можем просто запустить SLS развертывает
опять таки. Развертывание
. Команда обрабатывает как создание и обновления. Прекрасный!
Хорошо, но как насчет моих зависимостей, на которые мне нужен докер? Хорошо к счастью, есть плагин для этого. Безсекретный питон-требования сделаю докер/лямбчи для вас. Он также делает другие изящные вещи, как и заводит их, чтобы уменьшить их размер или даже бросать их в слой для вас!
Как насчет чаши?
Чаша это старинный инструмент AWS для развертывания Python Lambdas. Он имеет аналогичный синтаксис к колбе (и другим каркасам Python WSGI), поэтому для пользователей колба она будет чувствовать себя комфортно. Но в отличие от Zappa или Serverless, вы не можете использовать Chalice для развертывания существующего приложения Flask. Вы должны ревертировать его первым.
Чаша не так настраивается, как Zappa и Serverless, поэтому вы не будете получать все функции приложения для колба вместе с гибкостью Zappa или Serverless. Для начала простого проекта Chalice поможет вам встать и работать быстро. Тогда, если вы обнаружите, что это не соответствует вашим потребностям, вы можете посмотреть на Zappa и Serverless.
Оригинал: “https://dev.to/divporter/deploying-a-flask-app-to-aws-lambda-5em0”