Boto3 AttributeError: у объекта 'dict' нет атрибута 'tags' - PullRequest
0 голосов
/ 27 февраля 2019

Когда я запускаю свой скрипт, я получаю сообщение об ошибке: AttributeError: 'dict' object has no attribute 'tags'

Вот мой код:

import sys
import boto3
ec2 = boto3.client('ec2')
instance_id_list = input("Enter an instance ID separated by commas: ")
instance_ids = instance_id_list.split(",")
print("Deleting Instance IDs:")
for instance_id in instance_ids:
    instance = ec2.describe_instances(
        InstanceIds=[instance_id]
    ) ['Reservations']

    #ec2info = defaultdict()
    #for tag in instance.tags:
    #    if 'Name'in tag['Key']:
    #         print(tag['Key'])
    #        name = tag['Value']
    # Add instance info to a dictionary    \
    print(instance.get('Instances'))
    ec2info[instance.id] = {
        'Name': instance.get('Reservations').get('Instances').get('InstanceId'),
        'Instance ID': instance.id,
        'Type': instance.instance_type,
        'State': instance.state['Name'],
        'Private IP': instance.private_ip_address,
        'Public IP': instance.public_ip_address,
        'Launch Time': instance.launch_time
        }


attributes = ['Name', 'Instance ID', 'Type',
              'State', 'Private IP', 'Public IP', 'Launch Time']
for instance_id, instance in ec2info.items():
    for key in attributes:
        print("{0}: {1}".format(key, instance[key]))
        #print(instance.terminate())
        print("------")

Вот полный вывод моего скрипта:

        Enter an instance ID separated by commas: i-024d1b8e8eaa8e417,i-03804b280877175be
    Deleting Instance IDs:
    Traceback (most recent call last):
      File ".\aws_ec2_terminate_instances.py", line 13, in <module>
        for tag in instance.tags:

AttributeError: 'dict' object has no attribute 'tags'

Как я могу исправить эту ошибку?

1 Ответ

0 голосов
/ 27 февраля 2019

Необходимы 2 исправления

1) Добавить [0]['Instances'][0], чтобы получить подробности об экземпляре

instance = ec2.describe_instances(
        InstanceIds=[instance_id]
    ) ['Reservations'][0]['Instances'][0]

2) instance не объект, а обычный диктет, содержащийКлавиша «Теги».

>>> instance['Tags']
[{'Key': 'Name', 'Value': 'instance-1'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...