我想成立route53注册实例时自动创建的实例,使用盐和本文的手段:http://cantina.co/2012/01/25/automated-dns-for-aws-instances-using-route-53/如何从AWS中的实例获取实例名称?
文章使用ec2-metadata
获得实例ID和和主机名。我想知道是否有一种方法,在实例中使用bash来获取实例名称。 ec2-metadata
似乎只显示实例ID。提前致谢。
我想成立route53注册实例时自动创建的实例,使用盐和本文的手段:http://cantina.co/2012/01/25/automated-dns-for-aws-instances-using-route-53/如何从AWS中的实例获取实例名称?
文章使用ec2-metadata
获得实例ID和和主机名。我想知道是否有一种方法,在实例中使用bash来获取实例名称。 ec2-metadata
似乎只显示实例ID。提前致谢。
不确定bash会是什么样子,但如果可以获取实例ID,则可以使用实例本身的SDK。您将查询ec2追索权并传入ec2实例ID。使用Ruby SDK它会是什么样子:
i = ec2.instances["i-12345678"]
puts i.dns_name
首先,在Amazon EC2实例元数据服务也提供了相当长的一段其他名称除了instance-id
,如果这些可能是你在找什么 - 看Instance Metadata Categories:
hostname
- 实例的专用主机名。在存在多个网络接口的情况下,这指的是eth0设备(设备号为0的设备)。local-hostname
- 实例的私有DNS主机名。在存在多个网络接口的情况下,这指的是eth0设备(设备号为0的设备)。public-hostname
- 该实例的公共DNS。如果实例位于VPC中,则只有在enableDnsHostnames属性设置为true时才会返回此类别。如果您正在寻找名称如暴露在AWS Management Console不过,你的确会需要诉诸使用Tools for Amazon Web Services的一个检索它 - 这名称其实只是一个普通的标签使用密钥名称(请参阅Tagging Your Amazon EC2 Resources),它恰好在大多数AWS服务中用于显而易见的目的。
下面是如何与AWS Command Line Interface得到它例如(跳过区和证书):
aws ec2 describe-tags \
--filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name \
--query Tags[].Value --output text
对于比什么是可能与内置的--query
选择更先进的CLI JSON输出处理,你可以请使用jq(轻量级且灵活的命令行JSON处理器)。
Overthink's answer提供了基于现在遗留Amazon EC2 API Tools一个例子(请注意评论,这些评论正确地指出,你现在处理的凭证不同,详见Tell the CLI Tools Who You Are和IAM Roles for EC2 instances)。
发现describe-tags不能在我的配置文件中工作,失败并显示'UnauthorizedOperation'错误。得到这个与描述-情况下工作:使用区域和访问键
aws ec2 describe-instances --filters Name=instance-id,Values=$(wget -qO- http://instance-data/latest/meta-data/instance-id) --query Reservations[].Instances[].Tags[].Value --output text
命令从当前用户的AWS配置文件的[default]部分:〜/ .aws /配置。如果(可以在AWS控制台的IAM仪表板中找到)需要使用其他用户的区域/按键,你可以像这样把它们添加到该文件中的另一个部分,例如[用户2]并使用命令:
3210
你还可以使用--query命令行参数和--output直接输出实例名称,例如:'aws ec2 describe-tags --filters Name = resource-id,Values = i-abcd1234 Name = key,Values = Name --query Tags []。Value --output text' –
@CarlosP - 我已经用你提出的确实更简单的方法更新了答案('--query'选项在AWS CLI中不可用得到去),谢谢你指出这一点! –