当我们不提及节点名称时,厨师如何获取aws ec2的实例ID

问题描述 投票:2回答:3

如果我在我的刀ec2服务器中给出了--node-name选项,则创建节点名称

例如:

 knife ec2 server create -r "role[test]" -I ami-59aas30 --flavor
 t1.micro -x ubuntu --ssh-key VS_Key --availability-zone us-east-1a -p
 22 --tags Name=filetext --subnet subnet-f7sdfdf -g sg-8adsf3e4
 --node-name Testnode

我的问题是,如果我没有提到任何节点名称如何将instance-id作为节点名称,我想在我的代码中使用实例ID。我想知道,它是如何采用实例的ID

amazon-web-services amazon-ec2 chef
3个回答
1
投票

您无法指定Amazon EC2实例ID - EC2会在您创建新虚拟机时为您生成这些值。 --node-name标志对应于Chef服务器中的节点名称,而不是实例ID。

要获取特定实例的id,可以使用AWS Command Line Tools

ec2-describe-instances

或者你可以使用knife

knife ec2 server list

或者,您可以在节点属性中搜索此值:

knife search node "node_name:YOURNAME" -a ec2.instance_id

1
投票

在ubuntu上,您可以使用ec2metadata,它是cloud-utils apt-get包的一部分:

apt-get install cloud-utils

ec2metadata --instance-id


0
投票

您可以从instance identity document中检索实例ID

instance_info = 
  Chef::HTTP.new('http://169.254.169.254/latest/dynamic/instance-identity/document').get('/')
instance_id = JSON.parse(instance_info)['instanceId']

169.254.169.254是提供这些文档的亚马逊服务的IP,因此只要您从运行在AWS上的计算机上运行它,它就可以运行。

© www.soinside.com 2019 - 2024. All rights reserved.