35

我正在尝试使用 salt 和本文设置在创建实例时自动在 route53 中注册实例的方法。

本文用于ec2-metadata获取实例 ID 和主机名。我想知道是否有办法在实例中使用 bash 来获取实例名称。ec2-metadata似乎只显示实例ID。提前致谢。

4

5 回答 5

30

首先,您需要获取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

我希望这有帮助。谢谢!

于 2018-07-17T08:17:01.470 回答
20

首先,Amazon 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
于 2013-08-20T22:31:05.397 回答
0

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

i = ec2.instances["i-12345678"]
puts i.dns_name
于 2013-08-20T15:31:44.270 回答
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

来自 AWS 的参考

于 2020-09-02T11:17:18.460 回答
-1

发现 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/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
于 2016-08-10T11:55:20.377 回答