我刚开始使用boto3,并尝试获取描述实例调用的特定值。例如,如果我想获取“hypervisor”值,或者ebs的输出中有“deleteontermation”值。下面是我当前用于调用和迭代字典输出的代码。

import boto3
import pprint
from datetime import datetime
import json

client = boto3.client('ec2')

filters = [{
'Name': 'tag:Name',
'Values': ['*']
}]


class DatetimeEncoder(json.JSONEncoder):
  def default(self, obj):
    if isinstance(obj, datetime):
        return obj.strftime('%Y-%m-%dT%H:%M:%SZ')
    elif isinstance(obj, date):
        return obj.strftime('%Y-%m-%d')
    # Let the base class default method raise the TypeError
    return json.JSONEncoder.default(self, obj)


output = json.dumps((client.describe_instances(Filters=filters)), cls=DatetimeEncoder)

pprint.pprint(output)

for v in output:
  print v['Hypervisor']

获取此错误:
类型错误:字符串索引必须是整数,而不是str
使用pprint查看输出中的所有可用值。
谢谢。。

最佳答案

以下是您如何通过AWS Command-Line Interface (CLI)显示信息:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, Hypervisor, NetworkInterfaces[0].Attachment.DeleteOnTermination]'

下面是一些蟒蛇:
import boto3

client = boto3.client('ec2')

response = client.describe_instances()

for r in response['Reservations']:
  for i in r['Instances']:
    print i['InstanceId'], i['Hypervisor']
    for b in i['BlockDeviceMappings']:
      print b['Ebs']['DeleteOnTermination']

07-24 09:38