2017-02-13 13 views
0

私はPythonとLambdaを使い慣れていません。すべての地域でin-useボリュームのリストを取得しようとしています。AWS Lambda Boto describe_volumes

from datetime import datetime, date 
import boto3 

def lambda_handler(event, context): 
    ec2 = boto3.client('ec2') 

    # Get list of regions 
    regions = ec2.describe_regions().get('Regions',[]) 

    # Iterate over regions 
    for region in regions: 
     print "Looking at region %s " % region['RegionName'] 
     reg=region['RegionName'] 

     # Connect to region 
     ec2 = boto3.client('ec2',region_name=reg) 

     # Get all in-use volumes  
     volumes = ec2.describe_volumes(Filters=[{'Name': 'status', 'Values': ['in-use']}]) 

     for volume in volumes: 
      print "Looking at volume %s" % volume['VolumeId'] 

私は次のエラーを取得しておくと理由を把握することはできません。

String indices must be integers, not str: TypeError 
Traceback (most recent call last): 
    File "/var/task/lambda_function.py", line 22, in lambda_handler 
    print "Looking at volume %s" % volume['VolumeId'] 
TypeError: string indices must be integers, not str 

答えて

3

volumesは、ボリュームの辞書ではありません。

>>> volumes.keys() 
['ResponseMetadata', u'Volumes'] 

volumes['Volumes']をループする必要があります。これを試してみてください:

for volume in volumes['Volumes']: 
    print "Looking at volume %s" % volume['VolumeId'] 

出力

Looking at region ap-south-1 
Looking at volume vol-1234853ed7652bbb1 
Looking at volume vol-00aac56781f21a83 
Looking at region eu-west-2 
Looking at region eu-west-1 
Looking at region ap-northeast-2 
Looking at region ap-northeast-1