我需要在 EC2 实例中获取 Python 中特定标签的值。
限制:无法使用 Python EC2 元数据模块,因为“元数据中允许的标签”将不会启用。
所以我不能执行“ec2_metadata.tags[“Name”]”,因为这会引发 404 错误。
我们还能通过什么其他方式做到这一点? curl 方法也不起作用,因为这还需要启用元数据标签。
从
http://169.254.169.254/latest/meta-data/instance-id
获取实例 ID,然后使用 describe_instances
API 和实例 ID。
我的解决方案:
region = ec2_metadata.region
instance_id = ec2_metadata.instance_id
ec2_resource = boto3.resource(‘ec2’,region_name=region)
ec2_instance = ec2_resource.Instance(instance_id)
tags = ec2_instance.tags
然后我通过以下方式获取特定标签的值:
for tag in tags:
if tag[“Key”] == “Name”:
print(tag[“Value”])
我确信还有其他解决方案,但由于我现在必须实施任何解决方案,所以就是这样。
我想看看是否有一种简单的方法可以通过实例元数据标签打开on来做到这一点,而谷歌把我甩在这里,所以我将为其他发现自己处于类似情况的人回答这个问题:
即使打开本地元数据标签,也无法一次提取所有标签值,因此需要进行多次调用。这是一个基本的 Python 3 脚本,可以做到这一点
from urllib.request import urlopen
def get_instance_tags():
base_url = "http://169.254.169.254/latest/meta-data/tags/instance/"
tag_list = urlopen(base_url).read().decode().split("\n")
return {tag: urlopen(base_url + tag).read().decode() for tag in tag_list}
如果您没有打开实例元数据标签,则必须进行 boto 调用,如其他答案中所述。