AWS CLIで情報を出力しようEC2編(Linux版-その1)

1. AWS CLIを利用すると色々なリソース情報が見れます!

AWS EC2をコンソールから作成し、管理するサーバが多くなったら、一覧が欲しいですよね。
コンソールでは、分かり難いし、一覧を管理したい。そこで、AWS CLIコマンドを利用すると
EC2のリソース情報を取得し、且つ、必要な情報に絞って出力するように出来ます。
今回はEC2の情報を出力してみます。

2. まずはAWS CLIをインストールしよう!

Linuxのコンソール画面で以下のコマンドを実行してインストールします

$curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o "awscliv2.zip"
$unzip awscliv2.zip
$sudo ./aws/install

3. AWS CLIを使ってみよう!

3.1 AWS CLI のバージョンを確認する!

aws --version
aws-cli/2.4.15 Python/3.8.8
 
最新でなかった場合はバージョンアップしましょう
バージョンアップ方法は以下です

3.2 AWS CLIのバージョンアップ方法!

curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update 
aws --version
aws-cli/2.4.29 Python/3.8.8

2022/03/28時点で最新バージョンです
詳しくは、以下を参照 AWS CLI 最新バージョンをインストールまたは更新する https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

3.3 利用中のリージョンでec2 インスタンスの情報をすべて出力してみよう!

利用中のリージョンに存在するEC2インスタンスのすべての情報を出力するには以下のように記述します SQLの  select * from ec2 みたいなものです

aws ec2 describe-instances

画像A 出力結果
                 画像A 出力結果

Json形式で どばーっと出力されます

3.2 出力する情報を絞りこんでみよう!

上記コマンドでは沢山の情報が出力されるのでqueryオプションを使用して情報を絞り込みます
Sqlの select name,OS from EC2 みたいなものです。EC2名とOSに絞り込みます

aws ec2 describe-instances \
--query "Reservations[*].Instances[*].[{OS:PlatformDetails,Name:Tags[0].Value}]" \
--out table 

画像B 2項目出力
                画像B2項目出力

queryオプションの設定は以下のようになります
Json形式で出力されるので、これを踏まえて絞り込む内容を記述します
まず、Reservations[*].Instances[*]   (画像C 階層) トップレベルがReservations
一つ下の階層がInstances これがリスト[]になっているので、
すべてを対象にする為に、Reservations[*].Instances[*] と指定します
更に下の階層(画像D PlatformDetails項目)の値と、
同じ階層にある(画像E Name項目)Tags:[0]リストの最初の項目Value値 を指定します
.[{OS:PlatformDetails,Name:Tags[0].Value}]
{key1:value,key2:value}のdict形式にフォーマットして、項目名と値を出力するようにする
--out table テーブル形式にすることで見た目が分かり易すくなります

画像C 階層
                  画像C 階層
画像D PlatformDetails項目
              画像D PlatformDetails項目
画像E Name項目
                 画像E Name項目

2.3 出力項目を増やしてみよう!(インスタンスタイプ)

aws ec2 describe-instances \
--query "Reservations[*].Instances[*].[{OS:PlatformDetails,Name:Tags[0].Value,Type:InstanceType}]" \
--out table

画像F 3項目出力
                 画像F 3項目出力

追加したqueryオプションの設定は以下のようになります
[{OS:PlatformDetails,Name:Tags[0].Value,Type:InstanceType}]"
下の階層の (画像G Instancetype項目) の値を追加して、出力するようにする

画像G InstanceType項目
               画像G InstanceType項目

2.5 出力形式をTEXTに変更してみよう!

aws ec2 describe-instances \
--query "Reservations[*].Instances[*].[{OS:PlatformDetails,Name:Tags[0].Value,Type:InstanceType}]" \
--out text

画像H Text形式
                 画像H text形式

Text形式で出力して、情報を加工し易くすることが可能になります

4 応用してみよう!

利用可能なインスタンスタイプ、アーキテクチャ、仮想化、プロセッサー、Hypervisorを
出力しよう。インスタンスタイプの変更可否(互換性)を確認したい場合に重宝します。

aws ec2 describe-instance-types \
--query "InstanceTypes[*].[{InstanceType:InstanceType,Hypervisor:Hypervisor, \
CPU:ProcessorInfo.SupportedArchitectures[0], \
Clock_Ghz:ProcessorInfo.SustainedClockSpeedInGhz}]" \
--out table

                 画像I 出力結果

5 感想

query を利用することで、必要な項目を絞ることができました。 jqを利用しても可能ですが、こちらを利用しても、同様のことができそうです。最初は書き方に悩みましたが、pythonのlist[],dict{}を連想すると、分かり易いです。次回はRDSの情報出力についてです。

参考URL AWS CLI の query による絞り込み
https://qiita.com/draco/items/fa09ae0c2f51de9de449

Linux版その2 RDSの情報出力  https://opt-p.co.jp/blog/aws/post-1718/

Linux版その3 VPCの情報出力  https://opt-p.co.jp/blog/aws/post-2080/

Linux版その4 色々な情報出力 https://opt-p.co.jp/blog/aws/post-2421/