ECSタスクがデプロイされた場所のEC2メタデータをフェッチできるようにする方法はありますか?
ec2インスタンスメタデータのAWSドキュメントから、ec2インスタンス自体の内部にいるときにEC2インスタンスメタデータを取得できます。私はinstance-idをフェッチすることにもっと興味があり、コマンドで達成できます
curl http://169.254.169.254/latest/meta-data/instance-id
これは、ec2インスタンスに直接移動してクエリ/コマンドを実行する場合にのみ実現されますが、EC2インスタンスで実行されているECSタスクからec2メタデータをフェッチする場合、これはどのように可能ですか?タスクメタデータのAWSドキュメントに基づいて、ECSタスク自体の詳細をフェッチすることはできましたが、タスクが実行されているec2メタデータをフェッチすることはできませんでした。
これは可能ですか?
セットアップ:
IPを使用するメタデータエンドポイント169.254.169.254
は、EC2の詳細のみを取得することを目的としています。
どこ169.254.170.2
ECSタスクのメタデータを取得するためのものです。
タスク内でEC2メタデータエンドポイントを呼び出してEC2の詳細を取得できるはずです。
以下のサンプルセットアップでは、ECSクラスターの1つのEC2インスタンス部分があり、1つの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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加