使用AWS Elastic Beanstalk的Flask SQLAlchemy数据库 - 浪费时间?

时间:2015-04-12 17:23:21

标签: sqlite amazon-web-services elastic-beanstalk flask-sqlalchemy flask-security

我已成功将Flask应用程序部署到AWS Elastic Beanstalk。该应用程序使用SQLAlchemy数据库,我使用Flask-Security来处理登录/注册等。我使用Flask-Migrate来处理数据库迁移。

这里的问题是,每当我使用git aws.push时,它都会将我的本地数据库推送到AWS并覆盖实时数据库。我想我想做的事情只是从AWS EB“拉出”现场直播,并且只在极少数情况下推动。

我是否可以访问已推送到AWS的SQLAlchemy数据库?或者,这不可能吗?也许有.gitignore.elasticbeanstalk设置的某种组合可以起作用?

我正在使用SQLite。

2 个答案:

答案 0 :(得分:7)

是的,您的数据库需要处于版本控制中,它应该存在于持久存储(很可能是the Elastic Block Storage service (EBS)),您应该使用类似的东西处理架构更改(迁移) Flask-Migrate

AWS help article on EBS应该让你开始,但在高层次上,你要做的是:

  • Create an EBS volume
  • 将卷附加到正在运行的实例
  • 在实例上安装卷
  • 使用网络文件系统(NFS)将卷公开给其他实例
  • 确保在新的EBS实例启动时,它们会挂载NFS

或者,您可以:

  • 等待Elastic File System (EFS)超出预览(或请求访问权限),并在EB支持EFS后在EFS上挂载所有EB启动的实例。
  • 切换到the Relational Database Service (RDS)(或在EC2上运行您自己的数据库服务器)并在本地运行(PostgreSQL | MySQL |无论您选择什么)的实例进行测试。

答案 1 :(得分:1)

关键是在Elastic Beanstalk环境之外托管数据库。如果没有,随着负载的增加,Flask应用程序的不同实例将写入自己的本地数据库。赢得了一个"大师"包含所有提交的数据库。

最简单的解决方案是使用AWS Relational Database Service(RDS)将您的数据库托管为外部服务。一个很好的教程,介绍了这个确切的场景:

Deploying a Flask Application on AWS using Elastic Beanstalk and RDS

SQLAlchemy / Flask / AWS肯定浪费时间!祝你好运。