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

gzz*_*gzz 5 amazon-ec2 amazon-web-services amazon-ecs

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

ec2 实例元数据的 AWS 文档中,当我位于 ec2 实例本身内部时,我可以检索 EC2 实例元数据。我对获取实例 ID更感兴趣,可以通过命令来实现

curl http://169.254.169.254/latest/meta-data/instance-id
Run Code Online (Sandbox Code Playgroud)

只有当我直接转到 ec2 实例并执行查询/命令时才能实现这一点,但是如果我想在 EC2 实例上运行的 ECS 任务中获取 ec2 元数据,这将如何实现?根据任务元数据的AWS文档,我只能获取ECS任务本身的详细信息,但无法获取任务运行时的ec2元数据。

这可能吗?

设置:

  • ec2实例位于ecs集群中
  • ecs任务随机部署在集群内的任何ec2实例上

Imr*_*ran 1

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

as169.254.170.2用于检索 ECS 任务元数据。

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

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

我通过 ssh ( 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 
Run Code Online (Sandbox Code Playgroud)