2014-02-12 56 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

太棒了,謝謝!這是結束了,我的工作: '數據= cfn.get_all_users() 用戶在data.list_users_result.users: 打印(user.user_name)' – mike

+0

我放棄試圖在評論格式代碼現在,arg。只要說我需要遍歷'data.list_usres_result.users',它就像一個魅力。 – mike

+0

boto3中的一件好事是在所有服務之上的統一對象層,因此您不必在低級數據結構中混淆。 – garnaat

相關問題