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

时间:2016-01-17 16:53:59

标签: amazon-web-services amazon-s3 amazon-ec2 docker-compose

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

我喜欢的一件事是我可以运行eb local run来启动将在生产中运行的本地环境。在数据库出现之前,这似乎很有效。

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

  

我喜欢的一件事是我能够运行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要昂贵得多。