AWS ECS 上的 Kafka,如何在没有已知实例的情况下处理 advertised.host?

Kafka on AWS ECS, how to handle advertised.host without known instance?

我正在尝试在 AWS ECS 容器上获取​​ Kafka 运行ning。我已经有了这个设置/在我的本地 docker 环境中工作正常,使用 spotify/kafka image

为了让它在本地工作,我需要确保 ADVERTISED_HOST 需要设置为容器外部 IP,否则当我尝试连接时它只是给我 connection refused.

我的本地 docker-compose.yaml 有这个用于 kafka 容器:

  kafka:
    image: spotify/kafka
    hostname: kafka
    environment:
    - ADVERTISED_HOST=192.168.0.70
    - ADVERTISED_PORT=9092
    ports:
    - "9092:9092"
    - "2181:2181"
    restart: always

现在的问题是,我不知道 IP 是什么,因为我不知道这将 运行 在哪个实例上。那么我该如何设置那个环境变量呢?

您的入口点脚本将需要调用 EC2 Metadata Service on startup (in this case http://169.254.169.254/latest/meta-data/local-hostname) 以获取 docker 外部主机名并设置该变量。

样本:

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal