AWSの利用料金やスペック、たとえばEC2はAWSのこちらのサイトに掲示されていますが、料金計算の元ネタにしたりなど二次的利用する際は、サイトに載っている状態ですと少し不便です。
こちらを比較的利用しやすいようにしてみました。
概要
EC2のスペックや料金はAWSサイトにJSON形式のファイルにまとめられています。
これを取り込んでうまい具合に加工して出力します。
用意するもの
- curl
- jq
- シェルスクリプトが動く環境
jqについて
jqは、JSON形式のデータを流し込むと指定されたカタチに加工して出力してくれるsedやawkのようなフィルタリングコマンドです。
LinuxやOSX、Windowsの各プラットフォームのバイナリが用意されていて、パスが通ったところに格納するだけですぐ使えます。
JSON形式のデータを加工するには必須のものと言えるでしょう。
実際に動かしてみる
下記のようなスクリプトを書いてみました。こちらを動かしてみてください。
ec2price.shと名前をつけてみます。
#! /bin/bash 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") JSON_NAME=("us-east" "us-west" "us-west-2" "eu-ireland" "apac-sin" "apac-syd" "apac-tokyo" "sa-east-1") i=0 for reg in ${EC2_REGIONS[@]}; do if [ "${reg}" = "$1" ]; then break; fi i=$i+1 done URL="" if [ "$2" = "Linux" ]; then URL="http://aws.amazon.com/ec2/pricing/json/linux-od.json" fi if [ "$2" = "Windows" ]; then URL="http://aws.amazon.com/ec2/pricing/json/mswin-od.json" fi if [ "$2" = "RHEL" ]; then URL="http://aws.amazon.com/ec2/pricing/json/rhel-od.json" fi echo "size,USD,vCPU,ECU,memoryGiB,storageGB" curl -s $URL | jq -r --arg REGION ${JSON_NAME[$i]} '.config.regions[] | select(.region == $REGION).instanceTypes[] | .sizes[] | "(.size),(.valueColumns[].prices.USD),(.vCPU),(.ECU),(.memoryGiB),(.storageGB)"'
使い方
ec2price.sh リージョン OS種類
リージョンは下記のお馴染みのもの。
us-east-1 / us-west-1 /us-west-2 /eu-west-1 /ap-southeast-1 /ap-southeast-2 /ap-northeast-1 /sa-east-1
東京リージョンは「ap-northeast-1」ですね
OS種類はひとまず下記の3つが指定できます。
Linux … Amazon Linux / Windows … Windows Server / RHEL … Redhat Enterprise Linux
すべてオンデマンド (通常の従量課金)です。
動かした結果
下記のように出力されます。
$ ./ec2price.sh ap-northeast-1 Linux size,USD,vCPU,ECU,memoryGiB,storageGB m3.xlarge,0.684,4,13,15,2 x 40 SSD m3.2xlarge,1.368,8,26,30,2 x 80 SSD m1.small,0.088,1,1,1.7,1 x 160 m1.medium,0.175,1,2,3.75,1 x 410 m1.large,0.350,2,4,7.5,2 x 420 m1.xlarge,0.700,4,8,15,4 x 420 c3.large,0.192,2,7,3.75,2 x 16 SSD c3.xlarge,0.383,4,14,7.5,2 x 40 SSD c3.2xlarge,0.766,8,28,15,2 x 80 SSD c3.4xlarge,1.532,16,55,30,2 x 160 SSD c3.8xlarge,3.064,32,108,60,2 x 320 SSD c1.medium,0.185,2,5,1.7,1 x 350 c1.xlarge,0.740,8,20,7,4 x 420 cc2.8xlarge,2.960,32,88,60.5,4 x 840 m2.xlarge,0.505,2,6.5,17.1,1 x 420 m2.2xlarge,1.010,4,13,34.2,1 x 850 m2.4xlarge,2.020,8,26,68.4,2 x 840 cr1.8xlarge,4.310,32,88,244,2 x 120 SSD i2.xlarge,1.051,4,14,30.5,1 x 800 SSD i2.2xlarge,2.101,8,27,61,2 x 800 SSD i2.4xlarge,4.202,16,53,122,4 x 800 SSD i2.8xlarge,8.404,32,104,244,8 x 800 SSD hs1.8xlarge,5.670,16,35,117,24 x 2048 hi1.4xlarge,3.440,16,35,60.5,2 x 1024 SSD t1.micro,0.027,1,variable,0.615,ebsonly
カンマ区切りのCSVになっていますので、出力内容をファイルにリダイレクトするなりコピペしてみんな大好きエクセルに取り込めます。
ひとまずすぐ見たい、ちょっと見やすくしたい場合は、columnコマンドに流してやるとうまいことやってくれます。
$ ./ec2price.sh ap-northeast-1 Linux | column -s, -t size USD vCPU ECU memoryGiB storageGB m3.xlarge 0.684 4 13 15 2 x 40 SSD m3.2xlarge 1.368 8 26 30 2 x 80 SSD m1.small 0.088 1 1 1.7 1 x 160 m1.medium 0.175 1 2 3.75 1 x 410 m1.large 0.350 2 4 7.5 2 x 420 m1.xlarge 0.700 4 8 15 4 x 420 c3.large 0.192 2 7 3.75 2 x 16 SSD c3.xlarge 0.383 4 14 7.5 2 x 40 SSD c3.2xlarge 0.766 8 28 15 2 x 80 SSD c3.4xlarge 1.532 16 55 30 2 x 160 SSD c3.8xlarge 3.064 32 108 60 2 x 320 SSD c1.medium 0.185 2 5 1.7 1 x 350 c1.xlarge 0.740 8 20 7 4 x 420 cc2.8xlarge 2.960 32 88 60.5 4 x 840 m2.xlarge 0.505 2 6.5 17.1 1 x 420 m2.2xlarge 1.010 4 13 34.2 1 x 850 m2.4xlarge 2.020 8 26 68.4 2 x 840 cr1.8xlarge 4.310 32 88 244 2 x 120 SSD i2.xlarge 1.051 4 14 30.5 1 x 800 SSD i2.2xlarge 2.101 8 27 61 2 x 800 SSD i2.4xlarge 4.202 16 53 122 4 x 800 SSD i2.8xlarge 8.404 32 104 244 8 x 800 SSD hs1.8xlarge 5.670 16 35 117 24 x 2048 hi1.4xlarge 3.440 16 35 60.5 2 x 1024 SSD t1.micro 0.027 1 variable 0.615 ebsonly
最後に
今回は、限られたOSのオンデマンドEC2のみをフォローしました。
他にリザーブドインスタンスやEC2以外のサービスに関するJSONファイルもありますので、やる気と根性があれば今回の応用で対応できます。
※今回のスクリプトや出力内容につきましては無保証です。自己責任でお使いください。