如何在云形成中的同一 ECS 任务中从另一个容器引用容器主机名或 IP

如何在云形成中的同一 ECS 任务中从另一个容器引用容器主机名或 IP

我正在尝试设置一个 AWS ECS 集群,该集群具有单个任务,其中包含 3 个独立的容器,分别用于 prometheus、promscale 和 prometheus-ecs-discovery。

我正在尝试弄清楚如何将PROMSCALE_HOSTNAME我的 prometheus 容器中的环境变量动态设置为 promscale 容器的主机名或 ip,因为我最终在配置文件中使用该值,以便 prometheus 容器可以与 promscale 容器通信。

有什么办法可以做到这一点,或者我是否必须在我的 VPC 中创建负载均衡器来处理这个问题?

PrometheusTask:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: !Sub "${Stage}-prometheus"
      ContainerDefinitions:
        - Name: !Sub "${Stage}-prometheus-container"
          Image: myorg/prometheus:latest
          Environment:
            - Name: STAGE
              Value: !Ref Stage
            - Name: PROMSCALE_HOSTNAME # <-- I WANT THIS VALUE TO BE THE HOSTNAME OR IP OF THE PROMSCALE CONTAINER
              Value: !Sub "${Stage}-promscale-container"
        - Name: !Sub "${Stage}-prometheus-ecs-discovery-container"
          Image: myorg/prometheus-ecs-discovery:latest
          Environment:
            - Name: AWS_REGION
              Value: !Ref AWS::Region
        - Name: !Sub "${Stage}-promscale-container"
          Image: myorg/promscale:latest
          PortMappings:
            - ContainerPort: 9201

答案1

如果您正在awsvpc为任务使用网络模式(这是一个好主意),那么您的任务基本上将具有单个网络名称空间。这意味着您可以使用访问所有容器localhost。换句话说,如果您尝试localhost:9201从同一任务中的任何其他容器进行访问,您最终将与您的 promscale 容器对话。

相关内容