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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BOTO3:如何过滤标签“不相等”的实例?相关的知识,希望对你有一定的参考价值。

我们可以找到很多关于ec2过滤机智boto3的例子。但我正在寻找一个解决方案来列出所有实例,除了具有特定标签的实例...

这怎么可能?

非常感谢

答案

自动应答(如果它可能对其他人有用......或者被优化:))

import boto3
import logging

#define client connection
ec2c = boto3.client('ec2')
#define ressources connection
#ec2r = boto3.resource('ec2')

def lambda_handler(event, context):
    global ec2c
    global ec2r

    # Get list of regions
    regionslist = ec2c.describe_regions().get('Regions',[] )

    # Iterate over regions
    for region in regionslist:
        print("=================================

")
        print ("Looking at region %s " % region['RegionName'])
        reg=region['RegionName']

        # Connect to region
        #ec2r = boto3.setup_default_session(region_name=reg)
        ec2r = boto3.resource('ec2', region_name=reg)

        # get a list of all instances
        all_running_instances = [i for i in ec2r.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])]
        for instance in all_running_instances:
            print("Running instance : %s" % instance.id)

        # get instances with filter of running + with tag `Name`
        instances = [i for i in ec2r.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}, {'Name':'tag:KeepMeAlive', 'Values':['Yes']}])]
        for instance in instances:
            print("Running instance with tag : %s" % instance.id)

        # make a list of filtered instances IDs `[i.id for i in instances]`
        # Filter from all instances the instance that are not in the filtered list
        instances_to_delete = [to_del for to_del in all_running_instances if to_del.id not in [i.id for i in instances]]

        # run over your `instances_to_delete` list and terminate each one of them
        for instance in instances_to_delete:
            instance.stop()
            print("Instance : %s stopped" % instance.id)
        print("=================================

")
另一答案

我刚刚发现了这个:Shutdown EC2 instances that do not have a certain tag using Python

但我忘了确切地说我想跨地区去做。我想我需要使用boto3.client和boto3.resource,但我不明白该怎么做。

以上是关于BOTO3:如何过滤标签“不相等”的实例?的主要内容,如果未能解决你的问题,请参考以下文章

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

boto3如何获取单个ec2实例的所有标签并附加新标签

使用 boto3 按状态过滤实例

即使配置了过滤器,AWS Lambda 函数也会停止所有实例

Boto3:describe_auto_scaling_groups 在输入中给出未知参数:“过滤器”错误

boto3 instance.filter 数组