【问题标题】:AWS lambda python function - stopping VMs with a specific tagAWS lambda python函数-使用特定标签停止VM
【发布时间】:2020-12-31 22:17:58
【问题描述】:

我创建了一个 Lampda 函数,用于停止带有特定标签的 ec2 实例,python 代码如下所示。此解决方案的主要任务是停止所有带有 "name: purpose, value: temp" 标签的实例。当我执行此脚本时,所有 ec2 实例都将停止。我想下面这个过滤器instances = ec2.instances.filter(Filters=[{'Name': 'tag:purpose', 'Values': ['temp']}]) 有问题。 功能代码如下:

import boto3
def lambda_handler(event, context):
    client = boto3.client('ec2')
    ec2_regions = [region['RegionName'] for region in client.describe_regions()['Regions']]
    for region in ec2_regions:
        ec2 = boto3.resource('ec2',region_name=region)
        instances = ec2.instances.filter(Filters=[{'Name': 'tag:purpose', 'Values': ['temp']}])
        RunningInstances = [instance.id for instance in instances]
        for i in RunningInstances:
            stoppingInstances = ec2.instances.stop(i)

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 aws-lambda


    【解决方案1】:

    您的标签过滤器错误,您需要更改它:

        filters = [{
            'Name': 'tag:Name',
            'Values': ['Shut']
        },
            {
                'Name': 'instance-state-name',
                'Values': ['running']
        }
        ]
    

    这是完整的工作示例:

    import boto3
    
    #define the connection
    ec2 = boto3.resource('ec2')
    
    
    def lambda_handler(event, context):
        # Use the filter() method of the instances collection to retrieve
        # all running EC2 instances.
        filters = [{
            'Name': 'tag:Name',
            'Values': ['Shut']
        },
            {
                'Name': 'instance-state-name',
                'Values': ['running']
        }
        ]
    
        #filter the instances
        instances = ec2.instances.filter(Filters=filters)
    
        #locate all running instances
        RunningInstances = [instance.id for instance in instances]
    
        #print the instances for logging purposes
        #print RunningInstances
    
        #make sure there are actually instances to shut down.
        if len(RunningInstances) > 0:
            #perform the shutdown
            shuttingDown = ec2.instances.filter(
                InstanceIds=RunningInstances).stop()
            print(shuttingDown)
        else:
            print("No Instances to shut down")
    

    【讨论】:

      【解决方案2】:

      试试这个代码。我做了一个小改动

        import boto3
        def lambda_handler(event, context):
        client = boto3.client('ec2')
        ec2_regions = [region['RegionName'] for region in client.describe_regions(['Regions']]
        for region in ec2_regions:
            ec2 = boto3.resource('ec2',region_name=region)
             instances = ec2.describe_instances(Filters=[{'Name': 'tag:purpose', 'Values': ['temp']}]) #you can try by adding describe_instances()
             RunningInstances = [instance.id for instance in instances]
             for i in RunningInstances:
                stoppingInstances = ec2.instances.stop(i)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 2021-05-08
        • 2021-07-13
        • 2018-05-16
        • 2019-01-17
        • 2021-09-19
        • 1970-01-01
        相关资源
        最近更新 更多