1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonで AWSの組織に属する Account一覧 を取得してみました

Posted at

概要

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に登録されているアカウントリストをすべて取得する

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?