带 RabbitMQ 的亚马逊 ECS

Amazon ECS w/ RabbitMQ

我正在尝试将本地的 docker-compose 设置转换为带有任务的 ECS 集群。我的 docker-compose 设置如下所示:

version: '3'

services:
  rabbit-mq-service:
    image: rabbitmq:3.6-management
    ports:
      - "15672:15672"
      - "5672:5672"
    environment:
      RABBITMQ_DEFAULT_USER: ***
      RABBITMQ_DEFAULT_PASS: ***
  service-a:
    image: service-a:latest
    depends_on:
      - rabbit-mq-service
    restart: on-failure
    command: --spring.profiles.active=docker --spring.rabbitmq.host=rabbit-mq-service
  service-b:
    image: service-b:latest
    depends_on:
      - rabbit-mq-service
    restart: on-failure
    command: --spring.profiles.active=docker --spring.rabbitmq.host=rabbit-mq-service

这是非常简单的东西,而且在 Docker 中效果很好。我可以运行 docker-组合起来得到rabbitmq + 2个服务,两个服务都可以连接到rabbit服务器。

现在,我可以将 service-a 和 service-b 部署到 ECS 集群,前提是我对 rabbit 服务器的主机名进行了硬编码。这意味着我需要有一个单独的 EC2 实例(或类似的东西)运行连接兔子服务器。我会 真的 希望我的集群有一个 rabbit 服务器并且让我的实例能够连接到它。到目前为止,没有运气。

让 Rabbit 服务器在 ECS 集群之外更好吗?

有什么建议吗?

两个选项:

  1. 对,运行ECS集群外的Rabbit服务器。由于它具有与之关联的持久状态,因此很难在节点之间移动或复制,因此在 ECS 中管理它并没有太多好处。

  2. 要求 AWS deploy a load balancer in front of RabbitMQ in ECS。您可以为该负载均衡器提供其自己的 DNS 名称(通过 Route 53)或使用其默认名称,但无论哪种方式,您都可以使用该 DNS 名称来引用 RabbitMQ,它会路由实际上是 运行 的主机宁它。