我是Elastic Beanstalk,EC2和Docker的新手,并且在过去的几周里一直在研究和玩弄它。我有几个问题,我发现很难找到其他地方的答案。
我喜欢的一件事是我可以运行eb local run
来启动将在生产中运行的本地环境。在数据库出现之前,这似乎很有效。
1)据我所知,Elastic Beanstalk生成运行内部容器的实例,如果Elastic Beanstalk生成多个实例,可能会导致多个数据库?这是对的吗?
2)在生产中使用AWS RDS并在本地拥有外部数据库容器是否更好?
3)在持久化数据方面,我读到EBS只能挂载到一个EC2实例,人们如何处理存储用户文件,或者他们的应用程序是否直接推送到S3等服务?
答案 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要昂贵得多。