【问题标题】:Do I need to duplicate code on every EC2 instance running behind an ELB?我是否需要在 ELB 后面运行的每个 EC2 实例上复制代码?
【发布时间】:2017-07-09 03:44:38
【问题描述】:
您好,这是一个非常菜鸟的问题,但我正在尝试在 AWS 上部署我的 Node JS API 服务器。
我在 S3 上运行的前端连接到的一个 m1.large 实例一切正常。
现在我想扩展并放置我的 EC2 实例,可能还有更多的行为、ELB 和 Auto Scaling 组。
我是否需要在每个 EC2 实例上复制我的服务器代码?
如果是这样,我假设我必须创建一个单独的数据库服务器,所有 EC2 实例都将连接到该服务器。
我是对的,任何有亚马逊 AWS 经验的人都可以回答这个问题,我尝试使用谷歌搜索,但大多数链接都指向详细的教程,但没有回答我的问题。
任何帮助将非常感激。谢谢
【问题讨论】:
标签:
amazon-web-services
amazon-ec2
amazon-elb
【解决方案1】:
是的。这基本上是正确的。代码需要位于负载均衡器前面的所有实例上。对于您可能想要查看 RDS 的数据库。
【解决方案2】:
当然不..但你可以做到..
这就是为什么有 EFS 卷的原因,它们是多个 EC2 实例的共享卷,但您必须选择支持它们的区域,因为它们在某些区域可用。作为候选 AWS 认证架构师,我会向您推荐两个以上的选择。
- 您可以按照第一种方法创建一个 EC2 实例,将您的代码放入其中,然后创建一个 AMI 并使用此 AMI 通过自动扩展组启动您即将推出的 EC2。在我看来,这是一个糟糕的决定,因为在任何代码更改时,您都必须继续执行每个代码并添加新代码,然后创建一个新的 AMI 和一个新的 Auto Scaling 配置。有很多事情要做,但它会起作用。
- 第二种方法,遵循第一种方法,但不创建 AMI,而是将您的代码上传到私有(我想)回购上,如 github、bitbucket、安装 SSM 和管理 EC2 的适当角色,并在每次代码更改时推送它们使用 SSM 回购并将它们拉到您的 EC2 上。当然你可以写一个 webhook 到 bitbucket 来调用一个 api 并在每个 EC2 上运行 git pull 命令。可能最后一句话可能是第三种方法,但需要更多编码!!!
- 最后但并非最不重要!使用 EFS 卷将您的代码放在那里,将此卷安装在您的 EC2 上,在每次启动时添加自动安装命令,更改您的 apache httpd 主文档以指向此 EFS/文件夹并使用此配置创建一个 AMI。瞧!每个新的 EC2 都将使用位于此共享/网络卷上的相同代码。每当您需要更改某些内容时,您必须在自动缩放组之外的第三个实例上登录一段时间,然后上传您的更改,然后将其关闭,您的所有 EC2 将立即采用新代码。当然,您可以按照第三种方法从 repo 中提取更改。
也许还有更多的方法,我当然在使用带有私人回购的第三种方法,直到现在我还没有遇到任何问题(祈祷)!
【解决方案3】:
另一种选择是使用 Elastic Beanstalk 来部署 NodeJs 应用程序。这是特定于 NodeJs 的 guide。如果您只使用 EC2,这将处理您需要做的大部分事情,例如:ELB、Autoscaling Cloudwatch 等。
对于数据库,您可能希望将主从与只读副本一起使用。如果适合您的用例,另一种选择是评估像 DynamoDB 这样的 NoSql 数据库。 DynamoDB 表的scalability 由 AWS 管理,因此您无需担心。