Flask SQLAlchemy 数据库与 AWS Elastic Beanstalk - 浪费时间?

Flask SQLAlchemy Database with AWS Elastic Beanstalk - waste of time?

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

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

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

我正在使用 SQLite。

是的,您的数据库需要而不是在版本控制中,它应该存在于持久存储中(很可能the Elastic Block Storage service (EBS)), and you should handle schema changes (migrations) using something like Flask-Migrate

AWS help article on EBS 应该可以让您入门,但在更高层次上,您要做的是:

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

或者,您可以:

  • 等到 Elastic File System (EFS) 结束预览(或请求访问),并在 EB 支持 EFS 后将所有 EB 启动的实例安装到 EFS 上。
  • 切换到 the Relational Database Service (RDS)(或 运行 你自己在 EC2 上的数据库服务器)和 运行 一个实例(PostgreSQL|MySQL|无论你选择什么)本地测试。

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

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

Deploying a Flask Application on AWS using Elastic Beanstalk and RDS

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