Деплоим приложение Flask на AWS Elastic Beanstalk

Разработка /
Разработка: Деплоим приложение Flask на AWS Elastic Beanstalk
Сегодня мы рассмотрим пример развёртывания приложения Flask в среде Elastic Beanstalk с Python 2.7. Основным инструментом у нас будет
EB CLI
, но вы так же можете использовать консоль управления AWS для загрузки ZIP архива с проектом.

Для использования любого из сервисов AWS вам необходимо иметь учётную запись, здесь подробнее о ней.
Также убе­ди­тесь, что у вас уста­нов­лен Python 2.7, pip, virtualenv (ес­ли нет, уста­но­ви­те его ко­ман­дой «pip install virtualenv»), awsebcli (pip install awsebcli).

Настройка виртуального окружения

Создадим виртуальное окружение Python с помощью virtualenv и в ней установим Flask с его зависимостями. Используя виртуальное окружение, вы точно будете знать, что только необходимые библиотеки будут установлены затем в EC2 при развёртывании приложения.

1. Создаём окружение eb-virt:

~$ virtualenv ~/eb-virt


2. Активируем:

~$ source ~/eb-virt/bin/activate
(eb-virt) ~$

Вы должны увидеть (eb-virt) в начале командной строки, если активация прошла успешно.

3. Установим Flask:

(eb-virt)~$ pip install flask==0.10.1

4. Проверка установки:

(eb-virt)~$ pip freeze
Flask==0.10.1
itsdangerous==0.24
Jinja2==2.7.3
MarkupSafe==0.23
Werkzeug==0.10.1

Эта команда выведен список всех установленных в виртуальном окружении пакетов, а позже мы с её помощью составим список пакетов для установки в Elastic Beanstalk.

Создаём приложение Flask

Мы создадим несложный RESTful веб-сервис для Elastic Beanstalk.

1. Активируйте окружение:

~$ source ~/eb-virt/bin/activate

2. Создайте папку проекта и перейдите в неё:

(eb-virt) ~$ mkdir eb-flask
(eb-virt) ~$ cd eb-flask

3. Создайте файл application.py в этой папке с содержимым:

from flask import Flask

# print a nice greeting.
def say_hello(username = "World"):
    return '<p>Hello %s!</p>\n' % username

# some bits of text for the page.
header_text = '''
    <html>\n<head> <title>EB Flask Test</title> </head>\n<body>'''
instructions = '''
    <p><em>Hint</em>: This is a RESTful web service! Append a username
    to the URL (for example: /Thelonious) to say hello to someone specific.</p>\n'''
home_link = '<p><a href="/">Back</a></p>\n'
footer_text = '</body>\n</html>'

# EB looks for an 'application' callable by default.
application = Flask(__name__)

# add a rule for the index page.
application.add_url_rule('/', 'index', (lambda: header_text +
    say_hello() + instructions + footer_text))

# add a rule when the page is accessed with a name appended to the site
# URL.
application.add_url_rule('/<username>', 'hello', (lambda username:
    header_text + say_hello(username) + home_link + footer_text))

# run the app.
if __name__ == "__main__":
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production app.
    application.debug = True
    application.run()

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

Добавив application.debug = True перед запуском приложения, мы включили режим отладки и увидим в консоли появляющиеся ошибки. Но не забудьте выключить отладку когда приложение будет готово и полноценно работать.

Если мы используем имя файла application.py и вызываемый объект application, Elastic Beanstalk легко найдёт код нашего приложения.

4. Запускаем application.py с помощью Python:

(eb-virt) ~/eb-flask$ python application.py

Flask запустит веб-сервер и выведет URL для доступа к приложению. Например:

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat

5. Откройте этот URL в браузере и увидите главную страницу нашего приложения:

Разработка: Деплоим приложение Flask на AWS Elastic Beanstalk
6. Вывод от приложения можно увидеть в журнале сервера, ошибки так же выводятся в него. Остановить сервер и вернуться в виртуальное окружение можно командой Ctrl-C.

Перед тем, как загрузить приложение в Elastic Beanstalk, убедитесь, что оно работает локально без ошибок.

Настраиваем Flask приложение для Elastic Beanstalk

1. Активируйте окружение:

~$ source ~/eb-virt/bin/activate

2. Запустите pip freeze и сохраните вывод в файл requirements.txt:

(eb-virt) ~/eb-flask$ pip freeze > requirements.txt

Elastic Beanstalk использует requirements.txt для определения списка пакетов к установке в экземпляре EC2 при запуске вашего приложения.

3. Деактивируйте виртуальное окружение командой deactivate:

(eb-virt) ~/eb-flask$ deactivate

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

Деплоим приложение с помощью EB CLI

Мы сделали всё необходимое для загрузки приложения в Elastic Beanstalk. Иерархия файлов приложения выглядит так:

~/eb-flask/
|-- application.py
`-- requirements.txt

Осталось создать необходимое окружение и загрузить его на сервер.

1. Инициализируем репозиторий EB CLI командой eb init:

~/eb-flask$ eb init -p python2.7 flask-tutorial
Application flask-tutorial has been created.

Эта команда создаст приложение flask-tutorial и настроит необходимое окружение с Python 2.7.

2. (По желанию) Выполните команду eb init ещё раз для генерации ключа, чтобы была возможность подключаться к EC2 по SSH:

~/eb-flask$ eb init
Do you want to set up SSH for your instances?
(y/n): y
Select a keypair.
1) my-keypair
2) [ Create new KeyPair ]

Выберите ключ, если он уже был сгенерирован ранее или следуйте указаниям мастера для генерации нового.

3. Создаём окружение и деплоим приложение:

~/eb-flask$ eb create flask-env

Если вы видите ошибку «service role required», запустите команду eb create и EB CLI создаст нужную роль.

Эта команда создаст окружение Elastic Beanstalk с именем flask-env. На создание окружения требуется обычно около 5 минут.

4. После выполнения предыдущей команды откройте ваш сайт:

~/eb-flask$ eb open

Откроется веб-браузер с адресом, присвоенным вашему приложению:

Разработка: Деплоим приложение Flask на AWS Elastic Beanstalk
Дальнейшие шаги

В целях экономии ресурсов AWS, можно выключать окружение Elastic Beanstalk:

~/eb-flask$ eb terminate flask-env

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

А для удаления проекта и виртуального окружения с локального диска воспользуйтесь командами:

~$ rm -rf ~/eb-virt
~$ rm -rf ~/eb-flask


Источник: «Deploying a Flask Application to AWS Elastic Beanstalk»
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.