【问题标题】:ECS task_definition environment variable needs IP addressECS task_definition 环境变量需要IP地址
【发布时间】:2018-12-31 02:41:47
【问题描述】:

所以我有两个容器定义,用于尝试在 ECS 上运行的服务。对于其中一项服务(Kafka),它需要另一项服务(Zookeeper)的 IP 地址。在纯 docker 世界中,我们可以使用容器的名称来实现这一点,但是在 AWS 中,容器名称由 AWS 附加以创建一个唯一的名称,那么我们如何实现相同的行为呢?

目前我的 Terraform 任务定义如下:

[
  {
    "name": "${service_name}",
    "image": "zookeeper:latest",
    "cpu": 1024,
    "memory": 1024,
    "essential": true,
    "portMappings": [
      { "containerPort": ${container_port}, "protocol": "tcp" }
    ],
    "networkMode": "awsvpc"
  },
  {
    "name": "kafka",
    "image": "ches/kafka:latest",
    "environment": [
      { "name": "ZOOKEEPER_IP", "value": "${service_name}" }
    ],
    "cpu": 1024,
    "memory": 1024,
    "essential": true,
    "networkMode": "awsvpc"
  }
]

【问题讨论】:

    标签: amazon-web-services docker terraform amazon-ecs


    【解决方案1】:

    我对其余的设置了解不多,无法给出真正具体的建议,但有几个选择:

    • 将两个容器放在同一个任务中,并在它们之间使用链接
    • 使用route53自动命名获取每个服务任务的DNS名称,在任务定义环境中指定,也描述为ecs service discovery
    • 将服务任务放在负载均衡器后面,并使用来自 route53 的 DNS 名称以及可能在负载均衡器上匹配的主机,在任务定义环境中指定 DNS 名称
    • 考虑使用某种服务发现/服务网格框架(例如 Consul)

    有些帖子描述了一些替代方案。这是一个:

    【讨论】:

      猜你喜欢
      • 2019-08-17
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多