マルチリージョンのインスタンス一覧を取得する

2014.05.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんばんは。武川です。RIの計算をするのに今あるEC2インスタンス、RDSインスタンスの一覧をExcelに読みこむ必要がありました。先日みた 【30分で動かすシリーズ】AWS EC2の利用料金表を扱いやすくしてみるというサーバワークスさんのブログを参考にしてみてシェルでインスタンス一覧をCSVで表示するスクリプトを作ってみました。

スクリプトを動かしてみる

list_instance.shとなづけました。引数なしで動かします。

$ ./list_instances.sh 
region,Instance ID,State,Launched time,Instance type,Name
us-west-2, "i-71e1bf78","running","2014-04-17T10:54:21.000Z","m3.xlarge","SGW" 
us-west-2, "i-a71a43ae","running","2014-04-17T11:14:09.000Z","m3.medium","FileServer" 
us-west-2, "i-f4550dfd","running","2014-04-18T06:22:21.000Z","m3.medium","AD" 
us-west-2, "i-2388d32a","running","2014-04-19T01:11:49.000Z","t1.micro","NAT" 
region,Instance ID,State,Created time,Instance type,Multi-AZ,Engine,Version
ap-northeast-1, "mypostgres","creating",,"db.t1.micro",false,"postgres","9.3.3"

全てのリージョンのEC2インスタンスとRDSインスタンスの一覧が表示されています。EC2とRDSで表示される項目が微妙に異なりますが、RIの計算がしやすいようにインスタンスタイプの部分のカラムはあわせています。 整形して表示するとこんなかんじです。

$ ./list_instances.sh   | column -s, -t
region          Instance ID    State         Launched time               Instance type  Name
us-west-2        "i-71e1bf78"  "running"     "2014-04-17T10:54:21.000Z"  "m3.xlarge"    "SGW" 
us-west-2        "i-a71a43ae"  "running"     "2014-04-17T11:14:09.000Z"  "m3.medium"    "FileServer" 
us-west-2        "i-f4550dfd"  "running"     "2014-04-18T06:22:21.000Z"  "m3.medium"    "AD" 
us-west-2        "i-2388d32a"  "running"     "2014-04-19T01:11:49.000Z"  "t1.micro"     "NAT" 
region          Instance ID    State         Created time                Instance type  Multi-AZ       Engine      Version
ap-northeast-1   "mypostgres"  "backing-up"  "2014-04-19T13:07:26.372Z"  "db.t1.micro"  false          "postgres"  "9.3.3"

スクリプトについて

IAM roleを使わない場合、アクセスキーとシークレットキーをうめこむ必要があります。

#!/bin/sh
export AWS_ACCESS_KEY_ID=アクセスキー
export AWS_SECRET_ACCESS_KEY=シークレットキー

EC2_REGIONS=("us-east-1" "us-west-1" "us-west-2" "eu-west-1" "ap-southeast-1" "ap-southeast-2" "ap-northeast-1" "sa-east-1")

#Listing ec2 instances
echo "region,Instance ID,State,Launched time,Instance type,Name"
for reg in ${EC2_REGIONS[@]}; do
 export AWS_DEFAULT_REGION=$reg
 aws ec2 describe-instances | jq -r "@csv \"$reg, \(.Reservations[].Instances[] | [.InstanceId, .State.Name, .LaunchTime, .InstanceType, .Tags[0].Value]) \""
done

#Listing rds instances
echo "region,Instance ID,State,Created time,Instance type,Multi-AZ,Engine,Version"
for reg in ${EC2_REGIONS[@]}; do
 export AWS_DEFAULT_REGION=$reg
 aws rds describe-db-instances | jq -r "@csv \"$reg, \(.DBInstances[] | [.DBInstanceIdentifier, .DBInstanceStatus, .InstanceCreateTime, .DBInstanceClass, .MultiAZ , .Engine , .EngineVersion ]) \""
done

行なっていることは単純でEC2_REGIONSに定義されたリージョンに対して一つ一つawsコマンドを発行してEC2、RDSのインスタンスを取得し、jqで整形しています。

おわりに

作って気づきましたが、インスタンスの消し忘れにも使えます。 料金表もjsonで取れるので、もうちょっとがんばるとコマンド一つで現在の環境のRI費用が一発で取ることもできるようになりますね。 ではでは。