我正在尝试使用 salt 和本文设置在创建实例时自动在 route53 中注册实例的方法。
本文用于ec2-metadata
获取实例 ID 和主机名。我想知道是否有办法在实例中使用 bash 来获取实例名称。ec2-metadata
似乎只显示实例ID。提前致谢。
我正在尝试使用 salt 和本文设置在创建实例时自动在 route53 中注册实例的方法。
本文用于ec2-metadata
获取实例 ID 和主机名。我想知道是否有办法在实例中使用 bash 来获取实例名称。ec2-metadata
似乎只显示实例ID。提前致谢。
首先,您需要获取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。
我希望这有帮助。谢谢!
首先,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
对于比内置--query
选项更高级的 CLI JSON 输出处理,您可以求助于jq(轻量级且灵活的命令行 JSON 处理器)。
Overthink 的答案提供了一个基于现在遗留的Amazon EC2 API 工具的示例(请注意评论,其中正确指出您现在处理凭证的方式不同,请参阅告诉 CLI 工具您是谁和EC2 实例的 IAM 角色了解详细信息)。
不确定使用 bash 会是什么样子,但如果您可以获得实例 ID,则可以使用实例本身的 SDK。您将查询 ec2 资源并传入 ec2 实例 ID。使用 ruby sdk 它看起来像:
i = ec2.instances["i-12345678"]
puts i.dns_name
使用此命令显示哪些元数据可用
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
发现 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