概要
- 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