首页 > 解决方案 > 如何查找所有缺少特定标签和值的 ec2 实例

问题描述

在哪里可以找到有关 python boto3 库中的 .filter() 或 .all() 等函数的信息。我在以下代码中使用它,它正确显示了所有信息。

导入 boto3

def Diff(li1, li2): 返回 (list(set(li1)^set(li2)))

def my_handler(事件,上下文):

Custom_filters_ec2=[{'Name': 'tag:Project','Values': ['Himanshu']},{'Name': 'tag:Email','Values': ['hima']},{'Name':'instance-state-name','Values':['running','stopped']}
     ]
Custom_filters_all=[{'Name': 'tag:Project','Values': ['Himanshu']},{'Name': 'tag:Email','Values': ['hima']},]     
ec2=boto3.resource('ec2',region_name='us-east-1')
ec=boto3.client('ec2',region_name='us-east-1')

#Terminate Instances
valid_instance=ec2.instances.filter(Filters=Custom_filters_ec2)
all_instance=iec2.instances.all()
Untagged_Instances=[]
Untagged_Instances=Diff(valid_instance,all_instance)
for i in Untagged_Instances:
    i.terminate()

#Terminate Snapshot
valid_snapshots = ec2.snapshots.filter(Filters=Custom_filters_all).filter(OwnerIds=["XXXXXXXXXXXX"]).all()
all_snapshots = ec2.snapshots.filter(OwnerIds=["XXXXXXXXXXXX"]).all()
Untagged_snapshots=Diff(valid_snapshots,all_snapshots)
for i in Untagged_snapshots:
    i.delete()

但是当我这样做时:

ec2.SecurityGroup.all() 或 ec2.SecurityGroup.filter(Filters=Custom_filters_all) 我收到以下错误:

sg=ec2.SecurityGroup.filter(Filters=Custom_filters_all) AttributeError: 'function' object has no attribute 'filter'

我正在寻找有关如何使用这些函数的文档,例如.all()or`.filter() 或其他未记录的函数。为什么它适用于 ec2,快照但在尝试获取安全组时不起作用。

标签: amazon-web-servicesamazon-ec2automationaws-lambdaboto3

解决方案


boto3 EC2 snapshot.filter() 文档解释了可用的过滤器。

但是,与其尝试创建过滤器,我建议您获取完整的快照列表,然后使用 Python 将列表过滤为您想要的。这可以通过一些列表推导或简单for循环来完成。另外,语法通常要容易得多!


推荐阅读