EC2の新しいT3インスタンスの注意点？

## はじめに
主に検証用途に使うことが多いAWSのT2インスタンスですが、
新しい世代のT3インスタンスが利用できるようになりました。

**New T3 Instances – Burstable, Cost-Effective Performance**
https://aws.amazon.com/jp/blogs/aws/new-t3-instances-burstable-cost-effective-performance/

※2019/2/11 起動クレジットなどについての情報を追記しました。

## 古いAMIからの移行
性能30%upでT2よりお値段も安いので、新しく起動するものに関してはT3を活用したいです。
ただしT3はハイパーバイザが新しい世代になっているので、古いAMIからの起動は注意が必要です。
これは他の最新世代の C5,M5,R5 に移行を検討する場合も同様です。

**NITRO世代(C5、M5)へのEC2インスタンスタイプ変更を試してみた(Amazon Linux編)**
https://dev.classmethod.jp/cloud/aws/change-type-to-m5-nitro-generation/

インスタンスが移行可能な状態になっているかどうかは
c5_m5_checks_script で確認することもできます。

**タイプを C5 または M5 に変更した後に、Linux インスタンスが起動しなくなったのはなぜですか？**
https://aws.amazon.com/jp/premiumsupport/knowledge-center/boot-error-linux-m5-c5/

移行に必要な PVDriver（Windowsのみ）、EnaNetworkDriver、NVMeDriverは
Systems Managerのランコマンド経由でインストールすることも可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/6180110c-a31d-b5af-8c49-341011dad38c.png)





## T3 Unlimited がデフォルトで有効

CPUクレジットを使い切っても性能を維持できるT3 Unlimitedがデフォルトで有効になっています。
T2シリーズの場合はデフォルトでチェックが入っていませんが、
T3シリーズの場合は有効化のチェックが入っている状態です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/5bfc429b-721b-52a5-65d4-a848f8f286af.png)

CPUクレジットを使い切ってもバーストできる代わりにvCPU時間あたり
0.05ドルの料金が発生するので気になる場合はチェックを外します。

CLIの場合は --credit-specification で standardを指定します

```bash
$ aws ec2 run-instances --image-id ami-abc12345 --count 1 --instance-type t3.micro --key-name MyKeyPair --credit-specification "CpuCredits=standard"
```

かなりレアケースだと思いますが、AutoScalingグループでT3を利用し、
更にUnlimitedを無効化したいような場合は
CreditSpecification={CpuCredits=standard} を指定して予め起動テンプレートを作成しておきます。

また 2019/11/26 にアカウントレベルで無制限モードの設定を変更することができるようになりました。

**Amazon EC2 T instances now support Unlimited Mode at AWS account level**
https://aws.amazon.com/jp/about-aws/whats-new/2019/11/amazon-ec2-t-instances-now-support-unlimited-mode-at-aws-account-level/

CLIまたはSDKからEC2を起動する際に
T2をデフォルトUnlimitedで起動するようにしたり
T3をデフォルトでStandardで起動するように変更することができます。

## T3インスタンスは起動クレジットが無い
T2のスタンダードインスタンスは、起動時またはスタート時に vCPU あたり 
30 クレジットを獲得しますが、T3は起動クレジットがありません。

そのため、T2は起動直後もある程度バースト可能ですが、
T3の場合は起動直後はCPU使用率が頭打ちになりやすいと言えます。
例えばt3.microの場合、CloudWatch上は20%まで。
（vCPUあたりのベースラインパフォーマンスが10%かつvCPUが2つで20%）

起動直後の処理でCPUがバーストできず、T3のパフォーマンスが出ない、
あるいは固まってしまうような場合は、以下のいずれかの対応が考えられます。

* 一時的にT3 Unlimitedを有効化する
* 起動クレジットが獲得できるT2インスタンスで起動する
* t3.small, t3.largeのようなベースラインパフォーマンスがより高いインスタンスタイプに変更する

起動直後のt2.micro(左)とt3.microのクレジット残高
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/a98eed4a-2a30-2a89-0eaf-0f513f4ad7b8.png)![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/d60eb611-8384-6ff3-0df4-f19e76d3ed22.png)

### ドキュメント
**バースト可能パフォーマンスインスタンスの CPU クレジットおよびベースラインパフォーマンス**
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html

**スタンダードモード**
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/burstable-performance-instances-standard-mode.html

> * T2 スタンダードインスタンスは、獲得クレジット と 起動クレジットの 2 種類の CPU クレジットを受け取ります。
> * T3 スタンダードインスタンスは起動クレジットを受け取りません。
> * 起動クレジットは、インスタンスが獲得クレジットを蓄積できるようになる前に、起動してすぐにバーストできるよう、最適な起動エクスペリエンスを提供するために設計されています

## t3.micro は無料利用枠対象外
個人利用でない限り、気にしないとは思いますが。。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/6c67d1ca-858e-3d98-2ed3-ee9a0d067849.png)
以上です。
参考になれば幸いです。