EC2インスタンス 時間単価選手権

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

よく訓練されたアップル信者、都元です。みなさん、安いの好きですよね! ボクも好きです!

さてその昔、EC2は特殊用途でない限り、m1シリーズを使っておけば大体OKでした。スペックをストレージ側に寄せたいとか、メモリ側に寄せたいとか、そういう要件はそんなに多くないため、いわゆる「平均的な」スペックとしてm1シリーズが大変重宝されていました。っていうか今も重宝されてます。

そんな状況であるため、インスタンスのサイジングというのはt1.microの検証用からはじまり、あとはm1.small, m1.medium, m1.large, m1.xlargeと大きくしていけばいいんだよね。まぁ、この順で強く、そして高くなって行くんでしょ。というのが世間一般的なゆるーい認識であるかと思います。

しかし最近は「m1は一世代前のスペックで、m3シリーズこそが現行世代なんだ」とか、「c3シリーズのコスパがマジパネェ」だとか、いろんな話が出てきています。c3ってアレか。性能をCPU側に寄せたアレか。そーゆーのも「一般的な目的」のサイジングの選択肢に入れちゃいますか…。

となると、もうスペック云々じゃなくて安い順にインスタンスを並べてサイジング考えればいいんじゃ。ということでやってみました。

手順

EC2の価格は、Amazon EC2 料金表に載っておりますが、ここはひとつエンジニアらしく、shell上で処理してみましょう。まず、Chromeのデベロッパーツール等でHTTPアクセスを洗ってみると、どうやら料金データは下記のURLから取得しているようです。

http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/linux-od.js

こいつの中身を覗いてみると、先頭行と最終行を取り除けば単なるJSONになりそうだということがわかります。

$ curl http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/linux-od.js
callback(
  {
   "vers":0.01,
(略)
}
)

ならばこうしてしまおう。special thanks 植木サン。私のためにPerl書いてくれたのん。

$ curl -s http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/linux-od.js \
  | perl -ne '($.!=1)&&{print $l and $l=$_}'
  {
   "vers":0.01,
(略)
}

あとはjqでごにょごにょすると…。

$ curl -s http://aws-assets-pricing-prod.s3.amazonaws.com/pricing/ec2/linux-od.js \
 | perl -ne '($.!=1)&&{print $l and $l=$_}' \
 | jq -c "[.config.regions[] | select(.region == \"apac-tokyo\") | .instanceTypes[].sizes[] | {size, price: .valueColumns[].prices.USD | tonumber}] | sort_by(.price) | .[]"
{"price":0.027,"size":"t1.micro"}
{"price":0.088,"size":"m1.small"}
{"price":0.171,"size":"m3.medium"}
{"price":0.175,"size":"m1.medium"}
{"price":0.185,"size":"c1.medium"}
{"price":0.192,"size":"c3.large"}
{"price":0.342,"size":"m3.large"}
{"price":0.35, "size":"m1.large"}
{"price":0.383,"size":"c3.xlarge"}
{"price":0.505,"size":"m2.xlarge"}
{"price":0.684,"size":"m3.xlarge"}
{"price":0.7,  "size":"m1.xlarge"}
{"price":0.74, "size":"c1.xlarge"}
{"price":0.766,"size":"c3.2xlarge"}
{"price":0.943,"size":"g2.2xlarge"}
{"price":1.01, "size":"m2.2xlarge"}
{"price":1.051,"size":"i2.xlarge"}
{"price":1.368,"size":"m3.2xlarge"}
{"price":1.532,"size":"c3.4xlarge"}
{"price":2.02, "size":"m2.4xlarge"}
{"price":2.101,"size":"i2.2xlarge"}
{"price":2.96, "size":"cc2.8xlarge"}
{"price":3.064,"size":"c3.8xlarge"}
{"price":3.44, "size":"hi1.4xlarge"}
{"price":4.202,"size":"i2.4xlarge"}
{"price":4.31, "size":"cr1.8xlarge"}
{"price":5.67, "size":"hs1.8xlarge"}
{"price":8.404,"size":"i2.8xlarge"}

あとはご自由に眺めてお楽しみください。

考察

これで終わるとあまりにも投げっぱなしなので、一言だけ考察しておきましょうか。

まず、mediumとlarge,xlargeを見てみると、m1よりもm3の方が安いんですね。もうm1シリーズはsmall以外を新規で使う理由はほぼ無いと言って良いでしょう。同じように、c1(前の世代)とc3(現行世代)も比べてみると、c1を使う理由はほぼ無さそうです。

進化の速い世界です。いつまでも昔のイメージに引きずられないように注意しましょう。ではー。