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

Развертывание приложения для колбы к AWS LAMBDA

В котором я сравниваю развертывание приложений с колб для AWS Lambda с Zappa и Serverless Framework … Помечено с AWS, Python, Serverless.

В котором я сравниваю развертывание колбных приложений к 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”