如何从AWS中的实例获取实例名称?

时间:2013-08-20 15:07:36

标签: bash amazon-web-services amazon-ec2

我正在尝试设置一种方法,在创建实例时自动在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。提前谢谢。

5 个答案:

答案 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

答案 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

Reference from AWS

答案 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