概要
AWSの組織に所属する Account一覧を取得する Pythonプログラムを作成してみました。
- Account一覧の取得データの戻り値を 以下2パターンで作成
- リスト型
- 辞書型
実行環境
macOS Monterey 12.3.1
python 3.8.12
実行プログラム
GetUsers.py
import boto3
import pprint
import pandas as pd
from tabulate import tabulate
# 組織の全アカウント情報の取得:リスト型
def get_organization_accounts_list(master_acct):
# AWSに認証情報プロファイルを利用して親組織へ接続する
session = boto3.session.Session(profile_name=master_acct)
organizations = session.client('organizations')
# 全組織のアカウント情報を取得する
pagenator = organizations.get_paginator('list_accounts')
response_iterator = pagenator.paginate()
# アカウント情報の為のキーと値の定義
row_key = ["Id", "Name"]
row_value = []
# 各アカウントの Account ID と Account Name の取得
for response in response_iterator:
for acct in response['Accounts']:
# 取得するアカウント情報のリスト化
val = [acct['Id'], acct['Name']]
row_value.append(val)
# 取得した全アカウント情報の結合
row_list = [dict(zip(row_key, item)) for item in row_value]
print(tabulate(row_list, headers='keys'), "\n")
# アカウント名で昇順ソートする
accounts = sorted(row_list, key=lambda x:x['Name'], reverse=False)
return accounts
# 組織の全アカウント情報の取得:辞書型
def get_organization_accounts_dict(master_acct):
# AWSに認証情報プロファイルを利用して親組織へ接続する
session = boto3.session.Session(profile_name=master_acct)
organizations = session.client('organizations')
# 全組織のアカウント情報を取得する
pagenator = organizations.get_paginator('list_accounts')
response_iterator = pagenator.paginate()
# アカウント情報用リストの定義
row_id = []
row_name = []
# 各アカウントの Account ID と Account Name の取得
for response in response_iterator:
for acct in response['Accounts']:
# 取得するアカウント情報のリスト化
row_id.append(acct['Id'])
row_name.append(acct['Name'])
# 取得した全アカウント情報を辞書型へ
accounts = pd.DataFrame({"Id":row_id, "Name":row_name})
print(tabulate(accounts, headers='keys'), "\n")
# アカウント名で昇順ソートする
accounts.sort_values(by='Name',ascending=True, inplace=True)
return accounts
# メイン
if __name__ == '__main__':
print("\n組織の全アカウント情報の取得:リスト型\n")
accounts = get_organization_accounts_list('iapp')
pprint.pprint(accounts)
print(type(accounts), "\n")
print("\n組織の全アカウント情報の取得:辞書型\n")
accounts = get_organization_accounts_dict('iapp')
print(accounts)
print(type(accounts), "\n")
プログラムの実行
## それぞれの方法による Account一覧の取得
$ python GetOrganizationAccount.py
組織の全アカウント情報の取得:リスト型
Id Name
------------ ------------------
988888888888 tech-sss
677777777777 tech-nnn
655555555555 tech-yaya
900000000000 dede-rrr
688888888888 tech-ccc
722222222222 aws-master
[{'Id': '722222222222', 'Name': 'aws-master'},
{'Id': '900000000000', 'Name': 'dede-rrr'},
{'Id': '688888888888', 'Name': 'tech-ccc'},
{'Id': '677777777777', 'Name': 'tech-nnn'},
{'Id': '988888888888', 'Name': 'tech-sss'},
{'Id': '655555555555', 'Name': 'tech-yaya'}]
<class 'list'>
組織の全アカウント情報の取得:辞書型
Id Name
-- ------------ ------------------
0 988888888888 tech-sss
1 677777777777 tech-nnn
2 655555555555 tech-yaya
3 900000000000 dede-rrr
4 688888888888 tech-ccc
5 722222222222 aws-master
Id Name
5 722222222222 aws-master
3 900000000000 dede-rrr
4 688888888888 tech-ccc
1 677777777777 tech-nnn
0 988888888888 tech-sss
2 655555555555 tech-yaya
<class 'pandas.core.frame.DataFrame'>
まとめ
これで AWSの組織内の Account一覧情報を取得し、その戻り値を利用形態に合わせて list型/dict型のどちらかを利用することができるようになりました。
参考記事
以下の記事を参考にさせていただきました。感謝申し上げます。
AWS Organizationsに登録されているアカウントリストをすべて取得する