【问题标题】:Check if termination is enabled for all EC2 AWS instances检查是否为所有 EC2 AWS 实例启用了终止
【发布时间】:2019-03-01 02:21:20
【问题描述】:

我有一个列出所有区域中所有 ec2 实例的代码

import boto3



client = boto3.client('ec2',region_name='us-east-1')

ec2_regions = [region['RegionName'] for region in client.describe_regions()['Regions']]

for region in ec2_regions:
    conn = boto3.resource('ec2',region_name=region)
    instances = conn.instances.filter()
    for instance in instances:
        #if instance.state["Name"] == "running":
     print instance.id #   , instance.instance_type, region)

现在,我想在所有情况下检查是否启用了终止保护

terminate_protection=client.describe_instance_attribute(InstanceId =instance.id,Attribute = 'disableApiTermination')

上面的代码仅列出来自 us-east-1 的实例,如果传递的 instanceID 不是来自该区域,则它会抱怨(未找到实例)

如何将instanceID传递给describe_instance_attribute

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

    您创建为client 的boto3 客户端对象已本地化到us-east-1 区域,因为这是您使用region_name 参数指定的。您需要为每个区域创建一个单独的客户端:

    client = boto3.client('ec2')  # Doesn't actually matter what region you use here
    ec2_regions = [region['RegionName'] for region in client.describe_regions()['Regions']]
    
    for region in ec2_regions:
        # Need to create a new client per-region
        client = boto3.client('ec2', region_name=region)
        conn = boto3.resource('ec2',region_name=region)
        instances = conn.instances.filter()
        for instance in instances:
            print instance.id #   , instance.instance_type, region)
            # Now we can get the termination state
            terminate_protection=client.describe_instance_attribute(InstanceId =instance.id,Attribute = 'disableApiTermination')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-27
      • 2019-12-16
      • 2023-03-29
      • 1970-01-01
      • 2016-06-18
      • 2021-04-09
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多