处理AWS Elastic Beanstalk多容器数据库和持久存储

Ell*_*ngs 3 amazon-s3 amazon-ec2 amazon-web-services docker-compose

我是Elastic Beanstalk,EC2和Docker的新手,并且在过去的几周里一直在研究和玩弄它.我有几个问题,我发现很难找到其他地方的答案.

我喜欢的一件事是我能够运行eb local run以启动将在生产中运行的本地环境.在数据库方面,这似乎很有效.

1)据我所知,Elastic Beanstalk生成运行内部容器的实例,如果Elastic Beanstalk生成多个实例,可能会导致多个数据库?它是否正确?

2)在生产中使用AWS RDS并在本地拥有外部数据库容器是否更好?

3)在持久化数据方面,我读到EBS只能挂载到一个EC2实例,人们如何处理存储用户文件,或者他们的应用程序是否直接推送到S3等服务?

dka*_*mer 6

我不知道这是否在任何地方都有说明,但我相当确定AWS并不打算让你使用EB的多容器来运行数据库或任何只能在你的系统上运行一次的东西.正如他们的示例所示,您可以更好地控制前端服务器的内容.

如果要运行数据库或存储文件,您可以移动到AWS ECS,在那里可以更好地控制它,或者使用多个EB环境(例如,创建一个工作层,单实例环境来运行数据库)

我喜欢的一件事是我能够运行eb本地运行来启动将在生产中运行的本地环境.在数据库方面,这似乎很有效.

我没有使用eb local run,而是使用docker-compose,它允许我在本地正确运行适当的环境,包括我的数据库.是的,您可能需要在docker-compose文件和Dockerrun文件之间复制一些信息,但是一旦设置完毕,您将看到它有多强大.因为您仍在共享Dockerfiles,所以您仍然可以假设一旦部署,事情将以类似的方式运行.

1)据我所知,Elastic Beanstalk生成运行内部容器的实例,如果Elastic Beanstalk生成多个实例,可能会导致多个数据库?它是否正确?

是的,我认为这是正确的.EB假设您将使用RDS或dynamodb或其他已经集中和管理的东西.

2)在生产中使用AWS RDS并在本地拥有外部数据库容器是否更好?

是的,顺便说一下,我发现更好的做法是手动实例化它,以便在您终止EB环境后保持持久性,而不是让EB管理数据库的创建.

3)在持久化数据方面,我读到EBS只能挂载到一个EC2实例,人们如何处理存储用户文件,或者他们的应用程序是否直接推送到S3等服务?

是的,使用S3是出于多种原因的方法,但主要是因为AWS管理并且您可以扩展而无需担心它.实际上,您希望您的客户端直接在S3上获取或甚至发布文件,因此您的服务器不必执行任何工作(请注意,服务器可能需要对URL进行签名,但这是关于它的).

如果您确实遇到了针对S3的问题(无论出于何种原因),那么您也将(与数据库一样)使用EBS创建第二个单实例EB环境,以确保您拥有单个实例.但与S3解决方案相比,它不会扩展到很远,实际上比使用S3要昂贵得多.