2017-05-26 100 views
3

如果我在AWS ECS(EC2容器服務)中運行基於Docker的容器,是否可以從應用程序內部識別我的容器是否在AWS ECS上運行?這是必需的,因爲我的Docker容器可以在任何平臺上運行,但是當它在AWS ECS上運行時,我需要執行一些額外的操作。如何識別我的容器是否在AWS ECS上運行?

回答

2

也許你可以使用Amazon ECS Container Agent Introspection

亞馬遜ECS容器劑提供了收集有關運行代理的容器實例並在該實例上運行的相關任務的詳細信息的API。

您可以使用容器實例內的curl命令查詢Amazon ECS容器代理(端口51678)並返回容器實例元數據或任務信息。

例如,從容器內:

[ec2-user ~]$ curl http://localhost:51678/v1/metadata 

輸出:

{ 
    "Cluster": "default", 
    "ContainerInstanceArn": "<container_instance_ARN>", 
    "Version": "Amazon ECS Agent - v1.14.1 (467c3d7)" 
} 

的另一標準,如由OP in the comments提及,是Instance MetaData and User Data

實例元數據是關於您的實例的數據,可用於配置或管理正在運行的實例。實例元數據分爲多個類別。

從運行的實例中查看實例元數據的所有類別,請使用以下URI:

http://169.254.169.254/latest/meta-data/ 

注意,你無需支付用於檢索實例元數據和用戶數據的HTTP請求。

您可以使用諸如cURL之類的工具,或者如果您的實例支持GET命令;例如:

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ 

所以一個成功的curl是不夠的:

curl -sL -w "%{http_code}\\n" "http://169.254.169.254/latest/meta-data/" -o /dev/null 

如果確定這將顯示200。
見「Linux script with curl to check webservice is up

+0

如果我在正常的EC2實例上運行,該怎麼辦? –

+1

Amazon ECS代理仍應可訪問。 – VonC

+0

在正常的EC2實例中,curl http:// localhost:51678/v1/metadata - 不起作用。所以我找到了另一種識別相同的方法,就是使用:curl http://169.254.169.254/latest/meta-data/ - 如果你得到200 OK,那麼你在EC2/ECS上運行。 –

2

大量的試驗和錯誤之後,我發現了以下最有幫助的:
調用http://169.254.169.254/latest/meta-data/
如果您得到200 OK,那麼你可以假設你是AWS EC2/ECS內運行。
但是,如果您沒有獲得200 OK,那麼您沒有在AWS EC2/ECS中運行。

相關問題