我正在尝试设置一种方法,在创建实例时自动在route53中注册实例,使用salt和本文:http://cantina.co/2012/01/25/automated-dns-for-aws-instances-using-route-53/
本文使用ec2-metadata
来获取instance-id和主机名。我想知道是否有一种方法,在实例中使用bash来获取实例名称。 ec2-metadata
似乎只显示了instance-id。提前谢谢。
答案 0 :(得分:12)
首先,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来检索它 - < em> Name 实际上只是一个带有 Name 键的常规标签(参见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处理器< / em>的)。
Overthink's answer提供了一个基于现有遗留Amazon EC2 API Tools的示例(请注意评论,这些评论正确地指出您现在以不同方式处理凭据,请参阅Tell the CLI Tools Who You Are和IAM Roles for EC2 instances了解详情。
答案 1 :(得分:10)
首先,您需要获取instance-id
。
AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
比使用下面的命令可以获得ec2 instance name
。
EC2_NAME=$(aws ec2 describe-tags --region $REGION --filters "Name=resource-id,Values=$AWS_INSTANCE_ID" "Name=key,Values=Name" --output text | cut -f5)
请确保您已安装AWS Cli。
我希望这会有所帮助。 谢谢!
答案 2 :(得分:0)
不确定使用bash会是什么样子,但如果可以获取实例ID,则可以使用实例本身的SDK。您将查询ec2资源并传入ec2实例ID。使用ruby sdk看起来像:
i = ec2.instances["i-12345678"]
puts i.dns_name
答案 3 :(得分:0)
使用此命令显示可用的元数据
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
您可以链接下面的任何文件/文件夹以显示所需的信息
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-keys/
reservation-id
例如instance-type
可以如下链接到上面的命令:
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/instance-type
答案 4 :(得分:-2)
发现在我的配置中无法使用的describe-tags失败了&#39; UnauthorizedOperation&#39;错误。使用describe-instances:
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 / config。如果需要使用其他用户的区域/密钥(可以在AWS控制台的IAM仪表板中找到),您可以将它们添加到该文件中的另一个部分,例如[user2]并在这样的命令中使用:
aws --profile user2 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