2016-06-30 10 views
3

私は、boto3の作業を開始し、記述インスタンスコールの特定の値を取得しようとしました。たとえば、「Hypervisor」の値を取得したい場合や、Ebsの出力に「DeleteOnTermintation」の値がある場合などです。以下は現在私が呼び出しを行い、辞書の出力を繰り返し使用している現在のコードです。ec2を繰り返すインスタンスを記述するboto3

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'] 

このエラーを取得:

はTypeError:文字列のインデックスは出力から利用可能なすべての値を参照するPPRINTを使用し

をstrない、整数でなければなりません。

おかげで..

答えて

7

ここでは、AWS Command-Line Interface (CLI)を介して情報を表示することができ方法は次のとおりです。ここで

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

は、いくつかのPythonの:

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'] 
+1

おかげでジョン...今私はあなたの例で構築することができますスクリプトをさらにカスタマイズすることができます。 – user2040074

関連する問題