индексы списка должны быть целыми числами или слайсами, а не str python3.6 - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть сценарий python, который извлекает все идентификаторы и теги экземпляра EC2 во всех принадлежащих мне учетных записях AWS.Я пытаюсь разобрать только одно значение одного ключа.В частности, я хочу только проанализировать Value из Key email из ответа, но я получаю сообщение об ошибке: list indices must be integers or slices, not str.Ниже мой код и ответ json.

Code:

import boto3
import json

conn = boto3.resource('ec2', 
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
aws_session_token=session_token)

instances = conn.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])

for instance in instances:
    host_list = instance.id
    host_tags = instance.tags
    print(host_tags['Key']['email']['Value'])

Sample JSON:

[{
    'Key': 'gitlab',
    'Value': 'true'
  }, {
    'Key': 'portfolio',
    'Value': 'xxx'
  }, {
    'Key': 'runner-manager-name',
    'Value': 'xxxxxx'
  }, ...
]

Error:

list indices must be integers or slices, not str

1 Ответ

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

Ваша проблема со строками:

host_tags = instance.tags
print(host_tags['Key']['email']['Value'])

Перепишите это так:

host_tags = instance.tags
for tag in host_tags:
    print('Key: ' + tag['Key'] + ' Value: ' + tag['Value'])

instance.tags - это массив dict. Вам необходимо обработать каждый элемент (тег) в массиве. Затем вам нужно обработать dict, извлекая его пары ключ / значение.

...