4

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

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

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

我正在使用 SQLite。

4

2 回答 2

10

是的,您的数据库不需要版本控制,它应该存在于持久存储(很可能是弹性块存储服务 (EBS))上,并且您应该使用类似Flask-Migrate 的东西来处理架构更改(迁移) 。

关于 EBS的AWS 帮助文章应该可以帮助您入门,但在高层次上,您要做的是:

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

或者,您可以:

  • 等到弹性文件系统 (EFS)不再预览(或请求访问),并在 EB 支持 EFS 后将所有 EB 启动的实例挂载到 EFS 上。
  • 切换到关系数据库服务 (RDS)(或在 EC2 上运行您自己的数据库服务器)并在本地运行 (PostgreSQL|MySQL|Whatever you choose) 的实例进行测试。
于 2015-04-16T02:07:31.120 回答
2

关键是在 Elastic Beanstalk 环境之外托管您的数据库。如果没有,随着负载的增加,您的 Flask 应用程序的不同实例将写入它们自己的本地数据库。不会有包含所有提交的“主”数据库。

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

使用 Elastic Beanstalk 和 RDS 在 AWS 上部署 Flask 应用程序

SQLAlchemy/Flask/AWS 绝对不是浪费时间!祝你好运。

于 2015-04-16T11:49:08.793 回答