やりたいこと
Python初心者だけど、
Pythonを使って以下実施したい。
- PythonでAWS のIAMユーザ情報を取得
- 取得した情報をExcelに出力
調べるとそれぞれ以下対応により実現できそう。
- PythonでAWS のIAMユーザ情報を取得
⇒Boto3を使えば簡単にAWSに対する操作ができそう。
参考サイト:Python boto3 でAWSを自在に操ろう ~入門編~
【Python3入門】boto3を使ってPython3とAWSに触れてみよう!【60分】 - 取得した情報をExcelに出力
⇒glob・openpyxlを使えばファイル・Excelに対する操作ができそう。
参考サイト:OpenPyXLでExcelファイルを読み取る
Excelは以下最低限の整形を想定していたので、
それぞれ参考になりそうなサイトを見つけました。
- 罫線を引く
参考サイト:openpyxlで罫線を引く - セル幅を入力文字数に合わせて設定する
参考サイト:openpyxlでセル幅を自動設定する - 項目セルの背景色を設定する
参考サイト:【Python】openpyxl:エクセルの背景色を変更する方法(セル・行列)
完成コード
つぎはぎを繋ぎ合わせて作成しました。
import boto3 as b3 # AWS SDK
import openpyxl # Excel操作
from openpyxl.styles.borders import Border, Side # 罫線
from openpyxl.utils import get_column_letter # セル指定
from openpyxl.styles import PatternFill # 背景色
import glob # ファイル操作
# IAMインスタンスオブジェクト作成
iam_client = b3.client('iam')
# IAMユーザ情報取得
iam_users = iam_client.list_users()
# 使用するExcelファイルを定義
excel_file_name = 'IAMユーザ情報.xlsx'
# 同じディレクトリのファイルを全取得
files = glob.glob("*.xlsx")
# 使用するExcelファイルが存在しない場合はファイル作成
if excel_file_name in files:
pass
else:
create_file = openpyxl.Workbook()
create_file.save(excel_file_name)
# 使用するファイルを読み込み
excel_file = openpyxl.load_workbook(excel_file_name)
# ファイル内のシートを取得
sheet_list = excel_file.sheetnames
# シート名を定義
sheet_name = 'IAMユーザ一覧'
# シートが存在しない場合はシート作成
if sheet_name in sheet_list:
pass
else:
excel_file.create_sheet(title=sheet_name)
# 書き込むExcelシートを定義
sheet = excel_file[sheet_name]
# 行列の初期化
start_row = 1
start_col = 1
# 項目作成
fields = iam_users['Users'][0].keys()
for x, field in enumerate(fields):
x += 1
sheet.cell(
1,
x,
field
)
# IAM情報挿入
for user in iam_users['Users']:
start_col += 1
start_row = 1
for item in user.values():
sheet.cell(
start_col,
start_row,
str(item)
)
start_row += 1
# 罫線設定
side = Side(style='thin', color='000000')
border = Border(top=side, bottom=side, left=side, right=side)
for row in sheet:
for cell in row:
sheet[cell.coordinate].border = border
# セルのサイズを自動調整
for col in sheet.columns:
max_length = 0
column = col[0].column
for cell in col:
# print(len(str(cell.value)))
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
just_width = (max_length + 2) * 1.2
sheet.column_dimensions[get_column_letter(column)].width = just_width
# 背景色定義
back_fill = PatternFill(patternType="solid", fgColor="8DB4E2")
# 項目に背景色設定
for x, item in enumerate(fields):
x += 1
sheet.cell(1, x).fill = back_fill
# 保存
excel_file.save(excel_file_name)
改善・修正の余地が多分にあるコードですが、
やりたいことは最低限達成できました。
以下実行する環境の前提条件です。
・Windows環境
・Pythonがインストールされている
参考サイト:Python公式
・下記コマンドで必要なライブラリがインストールされている
pip install boto3
pip install openpyxl
・AWS CLIが実行可能であること
参考サイト:Configuration basics
つまづいたこと
セル幅を入力文字数に合わせて設定する際に、
下記エラーが発生し想定通り実行できませんでした。
TypeError: <class 'openpyxl.worksheet.dimensions.ColumnDimension'>.index should be <class 'str'> but value is <class 'int'>
下記サイトを参考にコードを修正してあげることで解決しました。
参考サイト:openpyxl – adjust column width size
openpyxl.utils.cell module
【×】sheet.column_dimensions[column].width = just_width
【〇】from openpyxl.cell import get_column_letter # cellのモジュールなのでインポートしとく
sheet.column_dimensions[get_column_letter(column)].width = just_width
終わりに
IAMユーザをマネジメントコンソール上で定期的に確認するのが面倒くさいなと思い、
今回はPythonを使った方法でIAMユーザ取得とExcel化を実現してみました。
あとは月に一回とかでバッチ処理をかけてあげれば楽できるかな、とか考えています。
Pythonの利用経験が少ないため冗長的なコードになっていますが、
どこかの誰かのお役に立てれば幸いです。
コメント