如何更改ecs自动缩放的express.js微服务应用程序

这是我的集装箱化的微服务应用程序和工作stream程。

  1. 特拉维斯从git拉代码,build立docker形象,并推到ECR 。
  2. 在成功的Travis版本上使用aws cli更新ECS任务和服务,使用新的图像标签。
  3. 每个开发和分段集群都有一个实例。
  4. 对于prod群集,我可以有多个实例,但每个dev和分段群集不能多于1个实例。
  5. 该解决scheme有10个微服务,rabbitmq和mysql。 (网关,API等)。

情景:如果我的web应用程序或任何其他容器被高度使用,我想通过在同一ec2实例中自动创build多个容器来扩展。 (实例有足够的内存和内存)。

目前我硬编码的Web应用程序端口为3000.我的express.js代码应如何改变以下?

  1. dynamic绑定webapp和api的端口。
  2. 其中负载均衡。
  3. configuration自动缩放以使其自动发生。

另外:这可以使用Ansible来实现吗? 怎么样? 我需要缩放容器,而不是集群或实例。

dynamic绑定webapp和api的端口。 其中负载均衡。

NodeJS / Express应用程序只绑定到容器的静态端口。 在你的任务定义中,你只能指定容器端口,这样主机端口将随机分配。 此时您必须使用负载平衡器,因为有多个容器正在运行。 如果您使用应用程序负载平衡器,则可以按照目标组自动获取新端口注册和取消注册的方式设置ECS。 看看文档的细节。

简历中:不要更改您的express.js代码。

configuration自动缩放以使其自动发生。

您现在可以在ECS中configuration服务时设置“服务自动缩放”。 这适用于Cloudwatch警报。 例如,您可以监视负载均衡器上与服务数量或任务的内存使用情况相关的请求数量。

另外:这可以使用Ansible来实现吗? 怎么样?

我build议使用脚本化的基础设施工具(比如Cloudformation或者Terraform)而不是Ansible,因为最终你设置了一个特定的状态,集群/ AWS将负责缩放。 您不希望在AWS ECS群集的运行时进行干预,ECS的重点在于,在您提供参数/策略后,它将自行pipe理。

我需要缩放容器,而不是集群或实例。

不知道为什么你不想扩展实例。 如果你不扩展实例,为什么不总是运行最大数量的容器? 如果您想要扩展实例,则可以使用Auto Scaling组,也可以与Cloudwatch警报结合使用。