База данных Flask SQLAlchemy с AWS Elastic Beanstalk — пустая трата времени?

Я успешно развернул приложение Flask на AWS Elastic Beanstalk. Приложение использует базу данных SQLAlchemy, и я использую Flask-Security для обработки входа/регистрации и т. д. Я использую Flask-Migrate для обработки миграции базы данных.

Проблема здесь в том, что всякий раз, когда я использую git aws.push, моя локальная база данных передается в AWS и перезаписывается в реальном времени. Я думаю, что я хотел бы сделать, это только когда-либо «вытягивать» живую из AWS EB и только в редких случаях.

Смогу ли я получить доступ к базе данных SQLAlchemy, которую я отправил на AWS? Или это невозможно? Возможно, есть какая-то комбинация настроек .gitignore и .elasticbeanstalk, которая могла бы работать?

Я использую SQLite.


comment
Насколько я помню, SQLAlchemy — это всего лишь ORM, а какая у вас фактическая база данных? SQLite? Или вы говорите о каких-то файлах схемы/миграции?   -  person sap1ens    schedule 12.04.2015
comment
.gitignore здесь твой друг   -  person zelusp    schedule 28.09.2016


Ответы (2)


Да, ваша база данных не должна не находиться под контролем версий, она должна находиться в постоянном хранилище (скорее всего, служба Elastic Block Storage (EBS)), и вы должны обрабатывать изменения схемы (миграции) с помощью чего-то вроде Flask-Migrate.

справочная статья AWS по EBS поможет вам начать работу, но в общих чертах, что вы собираетесь сделать это:

  • Создание тома EBS
  • Прикрепите том к работающему экземпляру
  • Смонтируйте том на экземпляре
  • Предоставьте том другим экземплярам с помощью сетевой файловой системы (NFS).
  • Убедитесь, что при запуске новых экземпляров EBS они монтируют NFS.

Кроме того, вы можете:

  • Подождите, пока Elastic File System (EFS) выйдет из предварительного просмотра (или запросите доступ), и смонтируйте все свои Инстансы, запущенные EB в EFS, когда EB поддерживает EFS.
  • Переключитесь на службу реляционной базы данных (RDS) (или запустите свой собственный сервер базы данных на EC2) и запустите экземпляр (PostgreSQL|MySQL|Что бы вы ни выбрали) локально для тестирования.
person Sean Vieira    schedule 16.04.2015
comment
Нет голосов? Этот ответ намного более информативен, чем другой, и он должен быть первым! - person Manuel; 23.06.2015

Ключевым моментом является размещение вашей базы данных за пределами вашей среды Elastic Beanstalk. Если нет, по мере увеличения нагрузки разные экземпляры вашего приложения Flask будут записывать в свою собственную локальную БД. Не будет «главной» базы данных, которая будет содержать все коммиты.

Самое простое решение — использовать службу реляционной базы данных AWS (RDS) для размещения вашей БД в качестве внешней службы. Хороший учебник, который проходит через этот точный сценарий:

Развертывание приложения Flask на AWS с использованием Elastic Beanstalk и RDS

SQLAlchemy/Flask/AWS определенно не пустая трата времени! Удачи.

person manychairs    schedule 16.04.2015
comment
Пожалуйста, опишите здесь немного содержания учебника - person abarisone; 16.04.2015
comment
Учебник представляет собой пошаговый пример развертывания простого приложения Flask с базой данных на AWS. Это предполагает отсутствие предварительного знакомства с AWS, а код Flask предоставляется через GitHub. Исходному плакату помогут шаги 3 и 4 из руководства, которые показывают, как настроить базу данных SQL в AWS и связать ее с вашим приложением Flask. - person manychairs; 16.04.2015