ECS task_definition环境变量需要IP地址

时间:2018-07-23 15:22:27

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

因此,对于要在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"
  }
]

1 个答案:

答案 0 :(得分:0)

对于其余的设置我还不够了解,无法给出具体的建议,但是有一些选择:

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

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