概要
- AWSで使用中のEC2やRDSの情報を一覧で取得したい時ってありますよね。そんな時は、以下のコマンドをAWS CLIで実施すればすぐに取得できます。
前提
- aws-cli: 2.11.10
- jq: 1.5
- CSV形式で取得する前提
AWS CLIコマンドで取得する方法
- AWS CloudShellにアクセスします。
- AWS CLI(Command Line Interface)がインストールされており、認証情報の設定がされている方は、そちらから実施してもOKです。
- CLIで、
describeコマンド(AWSのリソースに関する情報を取得するためのコマンド)を利用します。-
--queryオプションを使用して、取得する情報のフィールドを指定し、--outputオプションを使用して、出力形式を指定できます。 - 具体的には以下の通りです。
-
- 他にも色々オプションがありますが、今回は最低限のものだけ記載しておきます。
- 例えば、
--filtersオプションを使えば、実行中のインスタンスの情報のみ取得することができます。
- 例えば、
EC2の情報を調べる場合
- Nameタグ, インスタンスタイプ, プラットフォーム(OS)を知りたい場合
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value | [0], InstanceType, PlatformDetails]' \
--output text | sed -e 's/\t/,/g'
-
PlatformDetailsは、インスタンスのプラットフォームがLinuxベースの場合です。- Windowsインスタンスの場合は
Platformになります。
- Windowsインスタンスの場合は
- 単純なテキスト形式で出力されるのでCSV形式に変換します。
-
sed:テキスト処理を行うコマンド -
-e:後続する文字列がスクリプトとして解釈されることを指定 -
s/\t/,/g:スクリプトの中で実行される置換コマンドで、タブ文字(\t)をカンマ(,)に置換することを指定-
g:全てのタブ文字を置換することを指定します。
-
-
RDSの情報を調べる場合
- DB インスタンス ID、インスタンスクラス、ストレージ、エンジンを知りたい場合
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier, DBInstanceClass, AllocatedStorage, Engine]' \
--output text | sed -e 's/\t/,/g'
- 上記はEC2の時と同様、
sedコマンドを使用して取得する -
jqコマンドを利用して、以下のように取得することもできます。
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier, DBInstanceClass, AllocatedStorage, Engine]' \
--output json \
| jq -r 'map(select(. != null) | @csv)[]'
-
jq:JSONデータのフィルタリングや変換を行うコマンドラインツール -
-r:ダブルクォーテーションを除去 -
map(select(. != null) | @csv)[]:配列からnull値を除去して、カンマ区切りのCSV形式に変換
--output csvで出力できないのか?
-
--output textを--output csvにすればCSV形式で取得できるんじゃないの?って思いましたが、以下のようなメッセージが返ってきてしまいます。AWS CLIには存在しないオプションみたいです。できるようにしてほしいなぁ。需要ありそうだけど。。。
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: argument --output: Invalid choice, valid choices are:
json | text
table | yaml
yaml-stream