如何识别我的容器是否在AWS ECS上运行?
如果我在AWS ECS(EC2容器服务)中运行基于Docker的容器,是否可以从应用程序内部识别我的容器是否在AWS ECS上运行?这是必需的,因为我的Docker容器可以在任何平台上运行,但是当它在AWS ECS上运行时,我需要执行一些额外的操作。如何识别我的容器是否在AWS ECS上运行?
也许你可以使用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”
大量的试验和错误之后,我发现了以下最有帮助的:
调用http://169.254.169.254/latest/meta-data/
如果您得到200 OK,那么你可以假设你是AWS EC2/ECS内运行。
但是,如果您没有获得200 OK,那么您没有在AWS EC2/ECS中运行。
如果我在正常的EC2实例上运行,该怎么办? –
Amazon ECS代理仍应可访问。 – VonC
在正常的EC2实例中,curl http:// localhost:51678/v1/metadata - 不起作用。所以我找到了另一种识别相同的方法,就是使用:curl http://169.254.169.254/latest/meta-data/ - 如果你得到200 OK,那么你在EC2/ECS上运行。 –