T2インスタンス調査結果

先日、新インスタンスタイプとなるT2インスタンスがリリースされましたね！

[【AWS発表】バースト可能な性能を持つ新しい低コストEC2インスタンス](http://aws.typepad.com/aws_japan/2014/07/low-cost-burstable-ec2-instances.html)

いままで特にお世話になっていた **t1.micro/m1.small** の
後継というべきインスタンスでしょうか。
しかし実際に使ってみると、T2インスタンスならではの特徴がいくつかあるようです。
これから一番お世話になりそうなT2インスタンスですし
もう少し詳細に調査し、その結果をまとめてみました。

<br>

# ベースライン／クレジット／バーストという概念
CPUの性能に関する概念です。
t1.microにもバーストという機能はありましたが
T2では実装が大きく異なるようです。

要約すると

```
クレジットを持っている分だけ、CPUの性能が向上するバーストが発動する。
クレジットがなくなると、CPUの性能がベースラインに留まる。
```

という感じでしょうか。
また、
``１クレジット＝１分間バースト可能``
と覚えておくとよいでしょう。
10クレ持っていれば、10分間バーストし続けられる、ということです。

## インスタンス詳細

タイプ | vCPUs |	RAM (GiB) |	時間あたりの料金 (Linux)(東京) | 月あたりの料金 (Linux)(東京)
-------| ------| ------------ | --------- | -------------| ------------------ | -----------------------| ---------
t2.nano |	1 	|0.5 |	$0.008| 	$5.76
t2.micro |	1 	|1 |	$0.016| 	$11.52
t2.small |	1 	|2 |	$0.032| $23.04
t2.medium |	2 	|4 | 	$0.064|	$46.08
t2.large | 	2 	|8 |	$0.128|	$92.16
t2.xlarge | 	4 	|16 |	$0.256|	$184.32
t2.2xlarge | 	8 	|32 |	$0.512|	$368.64

## ベースラインについて
インスタンスタイプ毎に異なります。
100%がCPU10割使えるとすると、
たとえばmicroだとCPU１割の性能しか使うことが出来ないということですね。

|インスタンスタイプ|ベースラインCPU利用率|
|:-----------:|:------------:|
| t2.nano | 5% |
| t2.micro | 10% |
| t2.small | 20% |
| t2.medium | 40% |
| t2.large | 60% |
| t2.xlarge | 90% |
| t2.2xlarge | 135% |


## 初期クレジットについて
初期クレジットですが、調べたところLaunch直後は
以下のクレジットがチャージされているようです。

|インスタンスタイプ|初期クレジット量|
|:-----------:|:------------:|
| t2.nano | 30 |
| t2.micro | 30 |
| t2.small | 30 |
| t2.medium | 60 |
| t2.large | 60 |
| t2.xlarge | 120 |
| t2.2xlarge | 240 |

仮想コア１つにたいして 30クレ、という感じでしょうか。
t2.mediumは60クレなので
初回から60分間CPUを全力でぶん回せるということですね。

## クレジットの回復について
１時間毎に回復します。インスタンスタイプ毎に回復量が異なります。

|インスタンスタイプ|１時間毎のクレジット回復量|
|:-----------:|:------------:|
|t2.nano |3|
|t2.micro |6|
|t2.small |12|
|t2.medium |24|
|t2.large |36|
|t2.xlarge |54|
|t2.2xlarge |81|

グレードの高いインスタンスほど、回復量が多いですね。

## クレジットの最大チャージ料
インスタンスタイプ毎に異なります。
計算式としては「２４時間チャージし続けたときの数値」です。
これ以上はクレジットがチャージされません。

|インスタンスタイプ|最大クレジットチャージ量|
|:-----------:|:------------:|
|t2.nano |72（1時間12分間バースト可能）|
|t2.micro |144（2時間24分間バースト可能）|
|t2.small |288（4時間48分間バースト可能）|
|t2.medium |576（9時間36分間バースト可能）|
|t2.large |864（14時間24分間バースト可能）|
|t2.xlarge |1296（21時間36分間バースト可能）|
|t2.2xlarge |1944（32時間24分間バースト可能）|

## クレジットのリセットについて
インスタンスrebootならリセットされませんが、
stop/startだと初期値にリセットされるようです。
クレジットが溜まっている時には気をつけたほうが良いでしょう。

## クレジットの確認方法について
CloudWatchの
**CPUCreditUsage** / **CPUCreditBalance**
という項目で確認できます。
EC2一覧のmonitoringタブから確認できますし、通知も出来る？（未確認）はず。

<br>


# その他T2ならではの特徴

## HVMのみサポート
PVインスタンスでは起動することが出来ません。
すでに、PVインスタンスからHVMインスタンスに移行するツールもあるようです。
https://github.com/j3tm0t0/pv2hvm

## VPCのみサポート
T2インスタンスはVPC上にしか作ることが出来ません。
EC2-Classicのみで運用しているアカウントではVPCを作り、
その上でインスタンスを起動しましょう。
### API経由でT2インスタンスを起動したい場合
APIから起動する場合、
**subnet-id（またはnetwork-id）が必須** になっていたり<sub><a href="#1">1</a></sub>
**セキュリティグループの指定がid必須** になっていたりと、
バッチ処理などでインスタンス起動する場合には
多少手を加える必要があるかもしれません。
[AWS Document:T2:vpc-support](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html#t2-instances-vpc-support)


# ユースケース
常にCPUを使いまくるようなサーバでなければ有用だと思います。
例えば以下のようなロールでしょうか。

* テストサーバ
* 開発サーバ
* バッチサーバ
* 管理画面サーバ
* Packer用サーバ
* CIサーバ（デプロイ多いと辛いかも）
* ベンチマークサーバ（長時間だと辛いかも）

# まとめ
クレジット内で収まるような要件ならだいぶコスト節約できそうです。
いろいろなインスタンスタイプで試してみて、
クレジット量をみながら徐々に移行していくのが良いかと思います。

SUICAみたいに足りなくなったらお金払って
クレジットチャージできるようになったら面白いなぁ…


## おまけ：バースト時実際どのくらい速いの？
con_mameさんが既に性能評価されているようです。
[T2インスタンスがでたので簡単に性能をみてみた](http://d.conma.me/entry/2014/07/02/214746)

また別ブログですが、以下は他のインスタンスと比較した結果です。
[microインスタンスはlimitかけると大きくパフォーマンスが向上する（※再追記あり）](http://d.hatena.ne.jp/toritori0318/20140312)
バースト時にはおよそc3インスタンスと遜色ない性能が出ているような感じです。
良い感じですね！！！

<br>

# 参考
* [【AWS発表】バースト可能な性能を持つ新しい低コストEC2インスタンス](http://aws.typepad.com/aws_japan/2014/07/low-cost-burstable-ec2-instances.html)
* [AWS Document: T2 Instances - Amazon Elastic Compute Cloud](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html)



<a name="1">1.</a> 指定しないと "VPCResourceNotSpecified" というエラーが発生する