如何查找所有缺少特定标记和值的ec2实例

时间:2019-05-16 07:46:51

标签: amazon-web-services amazon-ec2 automation aws-lambda boto3

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

导入boto3

def Diff(li1,li2):     return(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:“函数”对象没有属性“过滤器”

我正在寻找有关如何使用这些功能的文档,例如.all()或`.filter()或其他未记录的功能。  为什么它可以在ec2,快照上运行,但在尝试获取安全组时却无法运行。

1 个答案:

答案 0 :(得分:0)

boto3 EC2 snapshot.filter() documentation说明了可用的过滤器。

但是,我建议您获取快照的完整列表,而不是尝试创建过滤器,然后使用Python将列表过滤到所需的内容。这可以通过一些列表理解或简单的for循环来完成。另外,语法通常要容易得多!