2017-02-13 27 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