maemaewaterの日記

エンジニア兼ゲーマーの人の日記です。PHP/Python/JavaScript/C#/C++などによるプログラムに関することを主に書いています。

AWS CLI (Windows)とPowerShell

AWS CLIPowerShellから使うのあればAWS Tools for Windows PowerShellを使えたことの後で気がつきましたがメモ代わりに残しておこうと思います。

AWS CLI自体はWindows版のインストーラーから入れてしまえば大丈夫ですが、PowerShellから使いやすいようにaws configureなどで初期設定するところで出力をjsonにしています。

awsのコマンドをPowerShellから使うには特殊なことはありません。EC2のインスタンスを出力するのであれば、コマンドプロンプトと同じです。

PowerShell:

aws ec2 describe-instances

しかし、このままではJSONで出力されているためPowerShellのコマンドレットであるWhere-ObjectやSelect-Objectが使えません。このため、JSONの出力をオブジェクトに変換してくれるものが必要になります。そこで、探してみると都合の良い事にConvertFrom-Jsonというコマンドレットが用意されています(PowerShellの標準で入っています)。

PowerShell:

aws ec2 describe-instances | ConvertFrom-Json

これでオブジェクトの形式に変換ができます。これでPowerShellのコマンドレットが使えるようになったということで状態がrunningのインスタンスの情報だけ出力するようにしてみたのが次の例です。

PowerShell:

(aws ec2 describe-instances | ConvertFrom-Json).Reservations | Where-Object {$_.Instances.State.Name -eq "running"} | Select-Object @{Name="InstanceId";Expression={$_.Instances.InstanceId}},@{Name="State";Expression={$_.Instances.State.Name}},@{Name="Public IP";Expression={$_.Instances.PublicIpAddress}}

LinuxなどではJSONを扱うのにjqというコマンドを使うと良いようですが、PowerShellでなんとかならないかなと思っていたらConvertFrom-Jsonが用意されていたという流れでした。

また、出力させるものをawsコマンドでフィルタをかけられるので、上の例のようにコマンドレットでフィルタをかけない方が効率は良さそうですね。

参考にさせていただいたページ: