【30分で動かすシリーズ】AWS EC2の利用料金表を扱いやすくしてみる

記事タイトルとURLをコピーする

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ファイルもありますので、やる気と根性があれば今回の応用で対応できます。
※今回のスクリプトや出力内容につきましては無保証です。自己責任でお使いください。