使用具有弹性beanstalk的数据库

时间:2017-07-01 18:38:39

标签: django database amazon-web-services elastic-beanstalk

我一直在尝试在AWS上部署基于Django的问卷调查应用程序。对于这个问题,我对AWS和网络应用程序来说是全新的。
当我构建我的应用程序时,它在localserver上正常运行,我在settings.py中使用了它:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

我已成功使用弹性beanstalk成功部署我的应用程序,并且它工作正常。但后来我不得不对我的代码进行一些更改,并使用了“eb deploy'从我的本地目录部署新版本。
这导致所有数据丢失(到目前为止填写的答复)。我意识到我需要对我的数据库做一些事情。由于我对这一切都是全新的,因此我们将非常感谢您的帮助和指导。

1 个答案:

答案 0 :(得分:6)

男人,我过去有过这样的经历,对你没有好消息。最糟糕的是,没有人告诉我现在我会告诉你什么。这意味着我在了解正在发生的事情之前花了很多时间......

请注意:当您创建弹性beanstalk环境时,AWS会为您提供一切:实例,eb卷,负载均衡器等。使用控制台或AWS cli上载修订时,AWS会基于弹性beanstalk映像从头开始重新创建实例。这意味着保存在环境磁盘上的每个数据都将被丢弃。新环境将使用“空”磁盘进行初始化(因此平台文件将在那里)。这意味着:根据您保存的内容,您的数据库将生活在天堂或地狱中。

如果需要在实例终止/重新初始化后保留数据,则必须配置额外的弹性块存储或弹性文件系统。但要使其工作,您必须更改初始化脚本以在初始化后附加块存储或文件系统。请记住,在终止/重新启动实例时,Elastic Beanstalk有点粗野。如果您的数据库需要一些正确关闭的程序,eb就会让它哭(根据个人经验发表评论)。

本案例的最佳做法是将数据库安装在不同的实例中,并使其独立于应用程序环境运行。在这种情况下,您可以在部署新修订时忘记数据库。

查看here了解详情。