オンラインでも変更可能なT2 Unlimitedを試してみて気付いた注意点 #reinvent

2017.12.02

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

西澤です。

re:Invent 2017で発表された素晴らしいアップデートであるT2 Unlimited。丁寧なブログも公開されていますが、私自身少し触ってみて気付いたことがあったのでまとめてご紹介してみようと思います。概要等については、まず速報ブログをご覧ください。

【速報】高いパフォーマンスが継続できるT2 Unlimitedがリリースされました!! #reinvent

T2インスタンスの課題

T2インスタンスは一時的な高負荷にもバースト可能な環境をリーズナブルに利用できるというところが、最大の魅力です。ところが、このバーストが曲者で、予期せぬ負荷がかかるようなシステムで利用している場合に、一気に性能がベースラインにまでおちこむという問題がありました。この状態に陥ると、対処をしようにもシステムがまともに応答しないということにより、結果復旧が遅れ、被害が拡大してしまうようなケースもあった為、特に本番環境でのご利用については、十分に特性をご理解をいただいた上でご利用いただくようご案内していました。

T2 Unlimitedの使いどころ

そこで、今回登場したT2 Unlimitedを有効にするという選択肢が新たに取れるようになりました。T2 Unlimitedを有効にすると、通常消費されるCPUCreditBalanceに加えて、実質的に1日分のCPUSurplusCreditBalanceが前借りして利用できるようになり、さらにそれを超過する負荷が発生した場合には、Linuxなら、$0.05 per vCPU-Hour、Windowsなら、$0.096 per vCPU-Hourの追加料金を支払うことで、バーストを継続できるようになりました。ただし、お金をいくらでもかけられるユーザであれば、T2ではなく他のインスタンスタイプを使っているはずですから、恒常的に有効化する場合には、CPUSurplusCreditsChargedがカウントされた時には通知するようなアラーム設定も忘れずにセットで設定するようにしましょう。

T2 Unlimitedを困ったときにだけ使いたい

実は個人的には、今回試したかったモチベーションはこちらでした。T2 Unlimitedはオンラインで変更できるらしいとのこと!これは困った時にだけ使えば良いやつなのでは?と思い、早速試してみました。

GUIで変更する場合、速報ブログにもある通り、日本語コンソールだと CPU使用率の変更 というやや直感的ではない?と思われるメニューな為、少し注意が必要です(英語コンソールならそのまま、 Change T2 Unlimited なのでこちらの方がわかりやすいかもしれません)。

今回はAWS CLIを使ってオンラインでの変更を試しました。実質コマンド1行ですので、拍子抜けするほど簡単です。

$ aws --version
aws-cli/1.14.2 Python/2.7.10 Darwin/16.7.0 botocore/1.8.6

$ aws ec2 describe-instance-credit-specifications --instance-id ${IID}
{
    "InstanceCreditSpecifications": [
        {
            "InstanceId": "i-12345678901234567",
            "CpuCredits": "standard"
        }
    ]
}

$ aws ec2 modify-instance-credit-specification \
  --instance-credit-specification "[{\"InstanceId\": \"${IID}\",\"CpuCredits\": \"unlimited\"}]"

{
    "SuccessfulInstanceCreditSpecifications": [
        {
            "InstanceId": "i-12345678901234567"
        }
    ],
    "UnsuccessfulInstanceCreditSpecifications": []
}


$ aws ec2 describe-instance-credit-specifications --instance-id ${IID}
{
    "InstanceCreditSpecifications": [
        {
            "InstanceId": "i-12345678901234567",
            "CpuCredits": "unlimited"
        }
    ]
}

それでは、変更後のvmstatの様子を御覧ください。事前準備として、EC2ではCPUをぶん回しておいて、CPUCreditが空の状態にしていたのですが、modify-instance-credit-specificationを実行してから1分程度で、stealが綺麗になくなることが確認できました。

[2017/12/01 12:28:40] 11  1      0 290668  13212 128620    0    0     0     0   33   60  5  0  0  0 95
[2017/12/01 12:28:41] 11  1      0 290668  13212 128620    0    0     0     0   29   48  5  0  0  0 95
[2017/12/01 12:28:42] 11  1      0 290668  13220 128620    0    0     0    16   31   49  6  0  0  0 94
[2017/12/01 12:28:44] 11  1      0 290668  13220 128620    0    0     0     0   34   57  5  0  0  0 95
[2017/12/01 12:28:45] 12  1      0 290668  13220 128620    0    0     0     0   29   48  5  0  0  0 95
[2017/12/01 12:28:46] procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
[2017/12/01 12:28:46] r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
[2017/12/01 12:28:46] 12  1      0 290668  13220 128620    0    0     0    12  211  244 79  0  0  0 21
[2017/12/01 12:28:47] 11  1      0 290668  13220 128620    0    0     0     0  259  314 98  1  0  0  1
[2017/12/01 12:28:48] 11  1      0 290668  13220 128620    0    0     0     0  252  280 96  1  0  0  3
[2017/12/01 12:28:49] 11  1      0 290668  13228 128620    0    0     0    12  256  291 98  1  0  0  1
[2017/12/01 12:28:50] 11  1      0 290668  13228 128620    0    0     0     0  257  290 98  0  0  0  2

これはすごく便利ですね!T2インスタンスを本番運用で利用されている方は、どうしても困ったときにだけ手動でT2 Unlimitedに切り替えるという選択肢も用意しておくと良いのではないかと思いました。ちなみに、T2 Standardに戻すのも同じくらい簡単なのですが、ちょっと注意が必要です。

T2 Unlimitedを辞める時の注意点

CPUの負荷が収まった後の流れを抑えておく必要があります。T2 Unlimitedを使って1日分の前借りクレジットであるCPUSurplusCreditBalanceを消費した場合、こちらがまず回復し、こちらが0になった後、CPUCreditBalanceが回復するという順序になります。ここで注意なのですが、1日分の前借りクレジットであるCPUSurplusCreditBalanceはあくまで前借りなので、すべて返済が終わらないと追加請求の対象となるという点です。公式ブログにも記載があるのですが、

残りの CPUSurplusCreditBalance の請求は、インスタンス終了時またはT2 Standardとして構成された時に処理されます。 新しいT2 Unlimited – バーストを超え、高い性能を発揮 | Amazon Web Services ブログ

ということで、TerminateまたはT2 Standardへの変更のタイミングで、前借りであったCPUSurplusCreditBalanceは追加請求であるCPUSurplusCreditsChargedにそのまま変更されるのです。

こちらは下のグラフを見ていただくのがわかりやすいと思います。

  1. 前借りクレジットが上限に達する
  2. 追加請求がカウントされ始める
  3. 前借りの返済が終わる前にT2 Standardに変更
  4. 前借りも請求確定

ということで、どうすれば良いのかということですが、T2 Unlimitedに一時的に変更した後、急場を凌いだら、少し様子を見てシステムが安定し、前借り返済をできるだけ済ませてからT2 Standardに戻した方がお得ということになります。T2 Unlimitedを有効にすること自体は課金対象になるわけではありませんので、急いで元に戻すと逆に損をする可能性があると覚えておきましょう。

まとめ

何はともあれ、空きリソースを漏れなく使ってもらいたいというAWSのサービス精神が溢れた素晴らしいアップデートだと思います。これでT2インスタンスの使いみちも大いに広がりますね。

どこかの誰かのお役に立てば嬉しいです。