在 Boto3 中获取具有特定标签和值的 EC2 实例列表

Posted

技术标签:

【中文标题】在 Boto3 中获取具有特定标签和值的 EC2 实例列表【英文标题】:Get list of EC2 instances with specific Tag and Value in Boto3 【发布时间】:2018-06-12 20:00:38 【问题描述】:

如何使用 boto3 的标签和值过滤 AWS 实例?

import boto3

ec2 = boto3.resource('ec2')
client = boto3.client('ec2')

response = client.describe_tags(
Filters=['Key': 'Owner', 'Value': 'user@example.com'])
print(response)

【问题讨论】:

正确的语法如下所示。 @helloV 仅显示与 client.describe_tags() ***.com/questions/37293366/…987654321@ 相比的简单答案 【参考方案1】:

您使用了错误的 API。使用describe_instances

import boto3

client = boto3.client('ec2')

custom_filter = [
    'Name':'tag:Owner', 
    'Values': ['user@example.com']]
    
response = client.describe_instances(Filters=custom_filter)

【讨论】:

谢谢!!只需稍加修改,我就能达到我的要求!【参考方案2】:

有标签的实例和没有标签的实例可以如下检索 可以获取如下所有标签

import boto3

ec2 = boto3.resource('ec2',"us-west-1")
instances = ec2.instances.filter(Filters=['Name': 'instance-state-name', 'Values': ['running']])
for instance in instances:
    if instance.tags != None:
        for tags in instance.tags:
        if tags["Key"] == 'Name' or tags["Key"] == 'Owner':
            if tags["Key"] == 'Name':
                instancename = tags["Value"]
            if tags["Key"] == 'Owner':
                owner = tags["Value"]
    else:
        instancename='-'
    print("Inastance Name - %s,  Instance Id - %s, Owner - %s " %(instancename,instance.id,owner))
   

【讨论】:

【参考方案3】:

boto3.client.describe_tags() 是通用的,但使用起来很乏味。因为您需要嵌套并指定要过滤的服务、标签键名和标签值。即

client = boto3.client('ec2')
filters =[
    'Name': 'resource-type', 'Values': ['instance'],
    'Name': 'Key', 'Values': ['Owner'],
    'Name': 'Values', 'Values' : ['user@example.com']
]
response = client.describe_instances(Filters=filters)

正如@helloV 所建议的,使用 describe_instances() 会容易得多。 describe_tags 允许用户创建函数来遍历所有服务标签。

【讨论】:

以上是关于在 Boto3 中获取具有特定标签和值的 EC2 实例列表的主要内容,如果未能解决你的问题,请参考以下文章

BOTO3:如何过滤标签“不相等”的实例?

遍历 ec2 描述实例 boto3

LINQ:获取包含具有特定名称和值的属性的数组中的对象

Apache Drill 与 mongodb。在地图中查询具有特定键和值的文档

具有特定键和值的通用类型

具有特定属性名称和值的 Scrapy .css 选择元素