Индексы списка ошибок Python 3 Boto должны быть целыми или кусочками, а не dict - PullRequest
0 голосов
/ 28 февраля 2019

Мой сценарий просит пользователя ввести список идентификаторов экземпляров AWS.Затем распечатайте информацию об экземплярах и завершите их.

Но я получаю эту ошибку, когда запускаю свой скрипт:

    File ".\aws_ec2_terminate_instances.py", line 15, in <module>
    name = instance['Tags'][{'Key': 'Name', 'Value': instance_id}]
TypeError: list indices must be integers or slices, not dict

Это код:

import sys
import boto3
import collections
from collections import defaultdict

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:
    print(instance_id)
    instance = ec2.describe_instances(
        InstanceIds=[instance_id]
        )['Reservations'][0]['Instances'][0]
    name = instance['Tags'][{'Key': 'Name', 'Value': instance_id}]
    ec2info = defaultdict()
    # Add instance info to a dictionary
    print(instance.get('Instances'))
    ec2info[instance.id] = {
        'Name': name,
        '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 = ['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("------")
        print("Terminating the instance:")
        ec2.instances.filter(InstanceIds=instance).stop()
        ec2.instances.filter(InstanceIds=instance).terminate()

Как мне пройти эту ошибку?

1 Ответ

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

Мне удалось получить это работая со следующим кодом:

import boto3
import collections
from collections import defaultdict

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:
    print(instance_id)
    instance = ec2.describe_instances(
        InstanceIds=[instance_id]
        )['Reservations'][0]['Instances'][0]
    ec2info = defaultdict()
    tags = instance['Tags']
    name = ""
    for tag in tags:
        if tag["Key"] == "Name":
            name = tag["Value"]
    print("Name = ", name)

Создает следующий вывод:

Enter an instance ID separated by commas: i-04be74d3a1713ce84
Deleting Instance IDs:
i-04be74d3a1713ce84
Name =  test1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...