如何在实例内从Python获取EC2实例标签?

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

我需要在 EC2 实例中获取 Python 中特定标签的值。

限制:无法使用 Python EC2 元数据模块,因为“元数据中允许的标签”将不会启用。

所以我不能执行“ec2_metadata.tags[“Name”]”,因为这会引发 404 错误。

我们还能通过什么其他方式做到这一点? curl 方法也不起作用,因为这还需要启用元数据标签。

python python-3.x amazon-web-services amazon-ec2
3个回答
2
投票

http://169.254.169.254/latest/meta-data/instance-id
获取实例 ID,然后使用
describe_instances
API 和实例 ID。


0
投票

我的解决方案:

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”])

我确信还有其他解决方案,但由于我现在必须实施任何解决方案,所以就是这样。


0
投票

我想看看是否有一种简单的方法可以通过实例元数据标签打开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 调用,如其他答案中所述。

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