我正在尝试使用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。提前致谢。
我正在尝试使用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。提前致谢。
首先,最重要的是 亚马逊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
对于比内置的更高级的CLI JSON输出处理 --query
选项,你可以诉诸 JQ (轻量级且灵活的命令行JSON处理器)。
Overthink的回答 提供了一个基于现在遗留的例子 Amazon EC2 API工具 (请注意评论,这些评论正确地指出您现在以不同方式处理凭据,请参阅 告诉CLI工具您的身份 和 IAM对EC2实例的角色 详情)。
首先,最重要的是 亚马逊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
对于比内置的更高级的CLI JSON输出处理 --query
选项,你可以诉诸 JQ (轻量级且灵活的命令行JSON处理器)。
Overthink的回答 提供了一个基于现在遗留的例子 Amazon EC2 API工具 (请注意评论,这些评论正确地指出您现在以不同方式处理凭据,请参阅 告诉CLI工具您的身份 和 IAM对EC2实例的角色 详情)。
首先,你需要得到 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 安装。
我希望这有帮助。 谢谢!
不确定使用bash会是什么样子,但如果可以获得实例ID,则可以使用实例本身的SDK。您将查询ec2资源并传入ec2实例ID。使用ruby sdk它看起来像:
i = ec2.instances["i-12345678"]
puts i.dns_name
发现描述标签在我的配置中不起作用,因“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