ECS 任务有没有办法检索它(任务)部署位置的 ec2 元数据?

Is there a way for an ECS Task to retrieve ec2 metadata of where it(the task) is deployed?

有没有办法让 ECS 任务能够获取其部署位置的 EC2 元数据?

AWS documentation of ec2 instance metadata 开始,当我在 ec2 实例本身内部时,我可以检索 EC2 实例元数据。我对获取 instance-id 更感兴趣并且可以通过命令

实现
curl http://169.254.169.254/latest/meta-data/instance-id

这只有在我直接转到 ec2 实例并执行 query/command 时才能实现,但是如果我想在执行 ECS 任务时获取 ec2 元数据,这将如何实现 运行 在 EC2 实例上?基于 AWS documentation of task metadata,我只能获取 ECS 任务本身的详细信息,但无法获取任务 运行 所在的 ec2 元数据。

这可能吗?

设置:

IP 为 169.254.169.254 的元数据端点仅用于检索 EC2 详细信息。

其中 169.254.170.2 用于检索 ECS 任务元数据。

您仍然应该能够在任务中调用 EC2 元数据端点并获取 EC2 详细信息。

在下面的示例设置中,我有一个 ECS 集群的 EC2 实例部分,上面有一个 nginx 任务 运行。

我通过 ssh'ed (docker exec -it ab8 /bin/sh) 进入我的 nginx 任务并且仍然能够正确到达 EC2 元数据端点并获得 EC2 instanceId(i-0086xxxxxxxxxxx).

现在,根据您的任务运行时(java、nodejs、python 等),您应该能够在任务中进行 EC2 元数据调用。

[root@ip-172-31-91-251 ec2-user]# docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS                NAMES
ab825479c673        ewoutp/docker-nginx-curl:latest   "nginx"             11 minutes ago      Up 11 minutes       0.0.0.0:80->80/tcp   ecs-nginx-17-nginx-c6d8ba82f0afc3f96b00
c99dede7f091        amazon/amazon-ecs-agent:latest    "/agent"            11 days ago         Up 11 days                               ecs-agent

[root@ip-172-31-91-251 ec2-user]# docker exec -it ab8 /bin/sh

# curl http://169.254.169.254/latest/meta-data/instance-id -v
* Hostname was NOT found in DNS cache
*   Trying 169.254.169.254...
* Connected to 169.254.169.254 (169.254.169.254) port 80 (#0)
> GET /latest/meta-data/instance-id HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 169.254.169.254
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/plain
< Accept-Ranges: bytes
< ETag: "916097910"
< Last-Modified: Tue, 30 Apr 2019 01:59:51 GMT
< Content-Length: 19
< Connection: close
< Date: Tue, 30 Apr 2019 02:07:38 GMT
< Server: EC2ws
< 
* Closing connection 0
i-0086xxxxxxxxxxx