Проверьте, включено ли прекращение для всех экземпляров AWS EC2 - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть код, который перечисляет все экземпляры 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

1 Ответ

0 голосов
/ 25 сентября 2018

Объект клиента boto3, который вы создали как client, локализован в области 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...