2014-02-12 4 views
1

새내기 질문입니다.boto (AWS Python)을 사용하면 IAM 사용자 목록을 어떻게 얻을 수 있습니까?

import boto 
from boto.iam.connection import IAMConnection 
cfn = IAMConnection() 
cfn.get_all_users() 
for user in userList: 
    print user.user_id 

연결이 잘 작동하지만 마지막 줄은 오류 " '유니 코드'개체가 어떤 속성 'USER_ID를'이 없다"반환 : 나는 다음과 같은 일을 할 수 있기를 기대하고있다.

나는 type(userList)을 작성했으며 형식이 'boto.jsonresponse.Element'> 인 < 클래스로보고되었는데, 이는 (?) 표시되지 않습니다. 일반 JSON 구문 분석을 사용하면 작동하지 않습니다.

another source에서이 의도의 결과가 "pythonized"인 것처럼 보입니다.

어쨌든, 저는 boto를 처음 접해 보았습니다. 그래서 나는 이것을 해내는 간단한 방법이 있다고 생각합니다.

Thx!

답변

2

일부 오래된 AWS 서비스의 경우 boto는 XML 응답을 서비스에서 가져와 멋진 Python 객체로 변환합니다. 다른 사람들은 XML 응답을 받아 원시 Python 데이터 구조로 직접 변환합니다. boto.iam 모듈은 후자의 형식입니다. 그래서, get_all_users()에 의해 반환되는 실제 데이터는 다음과 같습니다 : 그래서

{u'list_users_response': 
    {u'response_metadata': {u'request_id': u'8d694cbd-93ec-11e3-8276-993b3edf6dba'}, 
    u'list_users_result': {u'users': 
    [{u'path': u'/', u'create_date': u'2014-01-21T17:19:45Z', u'user_id': 
     u'<userid>', u'arn': u'<arn>', u'user_name': u'foo'}, 
     {...next user...} 
    ] 
    } 
} 

, 당신이 원하는 모든 데이터가, 그것을 찾을 조금 어렵습니다. boto.jsonresponse.Element 개체가 반환되면 약간의 도움이됩니다. 이 같은 것을 할 사실 수 있습니다

data = cfn.get_all_users() 
for user in data.user: 
    print(user['user_name']) 

을하지만 데이터는 당신이 찾고있는 것을 발견하는 반환에 대부분의 경우 당신은 단지 주변에 파고해야합니다.

+0

굉장합니다, 감사합니다! 이것은 나를 위해 일한 것입니다 : data.list_users_result.users의 사용자를위한 의 데이터 : : – mike

+0

지금, arg. 'data.list_usres_result.users'를 반복 할 필요가 있다고 말하면 충분하며, 매력처럼 작동합니다. – mike

+0

boto3에서 제공되는 좋은 점 중 하나는 모든 서비스 상단에 균일 한 객체 계층이 있으므로 낮은 수준의 데이터 구조에서 고민 할 필요가 없다는 것입니다. – garnaat