用 ECS/EC2 实例自我描述区域

Self describe regions with ECS/EC2 Instance

我想使用来自我的 Docker 容器的安全 VPC 从 S3 安全地获取配置文件。但是我想根据我所在的区域在应用程序内部确定要获取和使用哪个配置文件。是否有 good/best 实践来继续描述当前容器的区域?

我知道您可以使用 AWS SDK/CLI 来描述 ECS 实例,但这并不能告诉我容器具体部署在哪个实例上。

在 EC2 中,您可以使用简单的 curl 命令检索实例元数据到本地(内部)网络 API。 Region和AZ是你可以获得的一些数据点:

http://169.254.169.254/latest/meta-data/services/domain
http://169.254.169.254/latest/meta-data/placement/availability-zone

有关实例元数据的完整详细信息,请参阅this page

在 ECS 中,我很想知道这些是否仍然有效——我的直觉是它们会起作用,因为容器应该向主机的 API 查询答案,而 ECS 主机是肯定是 EC2 实例。

让我们知道这是否有效?

使用metadata server查询availability-zone,从中可以得到region

$ curl 169.254.169.254/latest/meta-data/placement/availability-zone/
us-east-1a

如果您使用 python SDK,一个例子是:

import os

az = os.popen("curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/").read()
print az[:-1]
>>> us-east-1