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


我正在尝试使用salt和本文设置一种在创建实例时自动在route53中注册实例的方法: http://cantina.co/2012/01/25/automated-dns-for-aws-instances-using-route-53/

文章使用 ec2-metadata 获取instance-id和主机名。我想知道是否有一种方法,在实例中使用bash来获取实例名称。 ec2-metadata 似乎只显示了instance-id。提前致谢。


8587
2017-08-20 15:07


起源



答案:


首先,最重要的是 亚马逊EC2  实例元数据服务 还提供了其他一些 名称 除了 instance-id,如果这些可能是您正在寻找的 - 请参阅 实例元数据类别

  • hostname  - 实例的私有主机名。在存在多个网络接口的情况下,这指的是eth0设备(设备编号为0的设备)。
  • local-hostname  - 实例的私有DNS主机名。在存在多个网络接口的情况下,这指的是eth0设备(设备编号为0的设备)。
  • public-hostname  - 实例的公共DNS。如果实例位于VPC中,则仅当enableDnsHostnames属性设置为true时才返回此类别。

如果你正在寻找 名称 暴露在 AWS管理控制台 但是,你确实需要使用其中一个 适用于Amazon Web Services的工具 检索它 - 那 名称 实际上只是一个带键的常规标签 名称 (看到 标记您的Amazon EC2资源),恰好在大多数AWS服务中用于显而易见的目的。

以下是如何使用它 AWS命令行界面 例如(跳过区域和凭据):

aws ec2 describe-tags \
--filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name \
--query Tags[].Value --output text

10
2017-08-20 22:31



您还可以使用--query命令行参数和--output直接输出实例名称,例如: aws ec2 describe-tags --filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name --query Tags[].Value --output text - Carlos P
@CarlosP - 我用你提出的更简单的方法更新了答案 --query 从get get开始,AWS CLI中没有可用的选项,感谢您指出这一点! - Steffen Opel


答案:


首先,最重要的是 亚马逊EC2  实例元数据服务 还提供了其他一些 名称 除了 instance-id,如果这些可能是您正在寻找的 - 请参阅 实例元数据类别

  • hostname  - 实例的私有主机名。在存在多个网络接口的情况下,这指的是eth0设备(设备编号为0的设备)。
  • local-hostname  - 实例的私有DNS主机名。在存在多个网络接口的情况下,这指的是eth0设备(设备编号为0的设备)。
  • public-hostname  - 实例的公共DNS。如果实例位于VPC中,则仅当enableDnsHostnames属性设置为true时才返回此类别。

如果你正在寻找 名称 暴露在 AWS管理控制台 但是,你确实需要使用其中一个 适用于Amazon Web Services的工具 检索它 - 那 名称 实际上只是一个带键的常规标签 名称 (看到 标记您的Amazon EC2资源),恰好在大多数AWS服务中用于显而易见的目的。

以下是如何使用它 AWS命令行界面 例如(跳过区域和凭据):

aws ec2 describe-tags \
--filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name \
--query Tags[].Value --output text

10
2017-08-20 22:31



您还可以使用--query命令行参数和--output直接输出实例名称,例如: aws ec2 describe-tags --filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name --query Tags[].Value --output text - Carlos P
@CarlosP - 我用你提出的更简单的方法更新了答案 --query 从get get开始,AWS CLI中没有可用的选项,感谢您指出这一点! - Steffen Opel


首先,你需要得到 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
2017-07-17 08:17





不确定使用bash会是什么样子,但如果可以获得实例ID,则可以使用实例本身的SDK。您将查询ec2资源并传入ec2实例ID。使用ruby sdk它看起来像:

i = ec2.instances["i-12345678"]
puts i.dns_name

0
2017-08-20 15:31





发现描述标签在我的配置中不起作用,因“UnauthorizedOperation”错误而失败。得到了这个与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配置文件的[default]部分的区域和访问键进行命令:〜/ .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

-2
2017-08-10 11:55