雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

AWS CLIでAWSリソース情報をCSV形式で取得する

これはなに?

EC2やLambdaなどのリソース情報をCSV形式で取得するAWS CLIコマンド群。
コスト削減を目的としてデータ集めていたので、課金に関連するパラメータが多いです。
実行環境はWindows。

目次

実行環境

  • Microsoft Windows 10 Pro
  • jqコマンド

コマンド内では、 ”jq” で実行できるようにしています。環境に合わせて読み替えてください。
以下から実行ファイルダウンロードできます。
jq

コマンドリスト

--profile <your_profile_name> の箇所を自身のクレデンシャルに設定している値に置換してください。
--queryとjqのパラメータ変更すれば自身の好きな値を取得できるようになるので、よしなに。 クエリの指定の仕方は以下参照。
AWS CLI からのコマンド出力の制御 - AWS Command Line Interface

また、csvにヘッダー行を入れていないので、コマンド内に説明入れてあります。

実行イメージ
f:id:ykoomaru:20200701200226p:plain

EC2

aws ec2 describe-instances --profile <your_profile_name> --output json --query "Reservations[].Instances[].{Name:Tags[?Key==`Name`].Value,InstanceId:InstanceId,InstanceType:InstanceType,LaunchTime:LaunchTime,State:State.Name,Platform:Platform}" | jq -r ".[] | [.Name[0],.InstanceType,.InstanceId,.LaunchTime,.State,.Platform] | @csv"
# カラム 説明
1 Name Nameタグ
2 InstanceType インスタンスタイプ
3 InstanceId インスタンスID
4 LaunchTime 起動日時
5 Platform Windowsの場合のみ? 表示

EBS

aws ec2 describe-volumes --profile <your_profile_name> --output json --query "Volumes[].{VolumeId:VolumeId,Size:Size,State:State,VolumeType:VolumeType,Name:Tags[?Key==`Name`].Value,CreateTime:CreateTime}"| jq -r ".[]| [.VolumeId,.VolumeType,.Size,.State,.Name[0],.CreateTime]|@csv"
# カラム 説明
1 VolumeId EBSボリュームID
2 VolumeType EBSボリュームタイプ
3 Size EBSボリュームサイズ
4 State EBSの状態
5 Name あればNameタグ
6 CreateTime 作成日

EBS スナップショット

aws ec2 describe-snapshots --owner self --output json --profile <your_profile_name> --query "Snapshots[].{SnapshotId:SnapshotId,VolumeId:VolumeId,VolumeSize: VolumeSize,State:State,StartTime:StartTime,Description:Description}"|jq -r ".[]| [.SnapshotId,.VolumeId,.VolumeSize,.State,.StartTime]|@csv"
# カラム 説明
1 SnapshotId スナップショットID
2 VolumeId 元となっているEBSボリュームID
3 VolumeSize EBSスナップショットのボリュームサイズ
4 State スナップショットの状態
5 StartTime スナップショットを取得開始した日時

Lambda

aws lambda list-functions --profile <your_profile_name> --query "Functions[].{FunctionName:FunctionName,Runtime:Runtime,Timeout:Timeout,MemorySize:MemorySize}" |jq -r ".[] | [.FunctionName,.Runtime,.MemorySize,.Timeout] | @csv"
# カラム 説明
1 FunctionName Lamnbdaファンクション名
2 Runtime ランタイム
3 MemorySize メモリサイズ
4 Timeout タイムアウト

Glue Jobs

aws glue get-jobs --profile <your_profile_name> --query "Jobs[].{Name:Name,JobLanguage:DefaultArguments,Timeout:Timeout,MaxCapacity:MaxCapacity}"|jq -r ".[]| [.Name,.JobLanguage[\"--job-language\"],.Timeout,.MaxCapacity] | @csv"
# カラム 説明
1 Name Glueジョブ名
2 job-language ランタイム
3 Timeout タイムアウト
4 MaxCapacity DPUの割り当て値

CloudWatch Logs

aws logs describe-log-groups --profile <your_profile_name> --query "logGroups[].{logGroupName:logGroupName,storedBytes:storedBytes,creationTime:creationTime}"| jq -r ".[]|[.logGroupName,.storedBytes,.creationTime] | @csv"
# カラム 説明
1 logGroupName CloudwatchLogs名
2 storedBytes データ保存量
3 creationTime 作成日

CloudWatch Events

aws events list-rules --profile <your_profile_name> --query "Rules[].{Name:Name,State:State,ScheduleExpression:ScheduleExpression}"|jq -r ".[]|[.Name,.State,.ScheduleExpression] | @csv"
# カラム 説明
1 Name CloudWatchEvents名
2 State 状態。有効/無効
3 ScheduleExpression スケジュール実行の場合は、実行日時

S3

aws s3api list-buckets --profile <your_profile_name>  --query "Buckets[].{Name:Name,CreationDate:CreationDate}" | jq -r ".[]|[.Name,.CreationDate] | @csv"
# カラム 説明
1 Name S3バケット名
2 CreationDate 作成日時

本当は保存量も取れたらよかったのですが、コマンド一発じゃ厳しそうなので、いったん保留。

Stepfunctions ステートマシン

aws stepfunctions  list-state-machines --profile <your_profile_name> --query "stateMachines[].{name:name,creationDate:creationDate}"|jq -r ".[]|[.name,.creationDate] | @csv"
# カラム 説明
1 name ステートマシン名
2 creationDate 作成日時

Cost

aws ce get-cost-and-usage  --time-period Start=YYYY-MM-DD,End=YYYY-MM-DD  --granularity MONTHLY   --metrics "BlendedCost" "UnblendedCost" "UsageQuantity"  --group-by Type=DIMENSION,Key=SERVICE Type=TAG,Key=Environment  --profile <your_profile_name> --query "ResultsByTime[].Groups[].{Keys:Keys,BlendedCost:Metrics.BlendedCost.Amount}"|jq -r ".[]|[.Keys[0],.BlendedCost] | @csv"
# カラム 説明
1 SERVICE Type サービス名
2 BlendedCost 混合コスト

コスト関連もCLIで取得できるのいいですね。 BlendedCost の意味は以下参照。
明細項目の詳細 - AWS コストと使用状況レポート

IAM User

aws iam list-users --profile <your_profile_name> --query "Users[].{UserName:UserName,Arn:Arn,CreateDate:CreateDate,PasswordLastUsed:PasswordLastUsed}"|jq -r ".[]|[.UserName,.Arn,.CreateDate,.PasswordLastUsed] | @csv"
# カラム 説明
1 UserName IAM ユーザー名
2 Arn Arn
3 CreateDate IAMユーザー作成日
4 PasswordLastUsed IAMユーザー最終利用日 パスワードを保持している場合のみ

github

一応githubにもコード上げました。 github.com