[小ネタ]CloudFormationでT3インスタンスのUnlimitedモードを無効にして起動する

マネジメントコンソールではチェックを外せばStandardモードに出来るT3インスタンスのCPUクレジットの設定ですが、CloudFormationでも同じようにStandardモードが選べるようにしたい!と思ってやってみました。小ネタオブ小ネタです。
2019.06.05

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

T3インスタンスの Unlimitedを無効にした状態 でEC2インスタンスを立ち上げたくなった事はありませんか?

こんにちは、AWS事業本部のShirotaです。
今月はちょっとした事でも使えそうな事を皆様にお伝えしていけるよう、個人的ブログ強化月間でお送りしていこうと思います。

▲ S3バケットアイコンって顔みたいだなと思ったら描いてました。S3頭になりたい(耐久性な意味で)

T3インスタンスのデフォルトはUnlimitedモード

早速ですが、T3インスタンス、使っていますか?
T3インスタンスはT2インスタンスの後継で(T系である事からもお分かりかと思いますが)、T2系で懸念されがちだった性能面が改善され(CPU数の増加)、1時間当たりの使用量もT2系より安くなっている事が多いインスタンスファミリーです。
そんなT3インスタンスがT2インスタンスと 大きく異なる点 、それはCPUのバーストパフォーマンスが デフォルトでUnlimitedモード(無制限モード) である事です。

▲ マネジメントコンソールでT3インスタンスを立ち上げようとすると、チェックが入ってます

そもそも、T3インスタンスはT2インスタンスと違い、vCPU数に応じて貰える起動クレジットが存在しません。
代わりに、vCPU数が倍なので獲得クレジットも蓄積可能な最大獲得クレジットも多いのですが、如何せん起動時にCPUのパフォーマンスを上げたいと思ったらUnlimitedを使用する事になります。
またUnlimitedはCPUクレジットを使い切ってもバースト出来るモードです。下手すると、現状よりも大きい固定CPUを持つインスタンスを立ち上げた方が、最終的にコストが安くなる可能性もあります。

  • 一時的にUnlimitedを使用する可能性がある
  • ただ、インスタンスの立ち上げ時にはUnlimitedを明示的に無効(Standardモード)にしておきたい
  • CloudFormation でUnlimitedを明示的に無効(Standardモード)にしてT3インスタンスを立ち上げたい  

ようやく出て来たのですが今回の本題はこれです。

CloudFormationでUnlimitedを無効にしてT3インスタンスを立ち上げたい

CloudFormationでT3インスタンスを立ち上げる時、特に明示していないとT3インスタンスはUnlimitedモードで起動します。マネジメントコンソール上でのデフォルトと同じ状態ですね。
これを制御するプロパティがあります。
CreditSpecificationというプロパティです。
AWSの公式ドキュメントには、以下のように説明があります。

CreditSpecification
T2 インスタンスの CPU 使用に関するクレジットオプションを指定します。
Required: No
Type: Amazon EC2 Instance CreditSpecification。
更新に伴う要件: 中断はありません。

RequiredがNoの為、このプロパティが無くてもスタックは動作してEC2インスタンスを構築する事が出来ます。
このプロパティの構文を見てみましょう。

JSON

    {    
        "CPUCredits" : String  
    }

YAML

    CPUCredits: String

これだけです。CPUCreditsに standardunlimitedを入れて起動させます。

実際に書いてみた(YAML)

今回は、スタック作成画面で「standard」か「unlimited」かを選べるようにテンプレートを作成してみました。

    AWSTemplateFormatVersion: '2010-09-09'  
    Description: "Build EC2 Instance(T3 Standard)."  
        Parameters: 
        ---中略---
          CPUCredits:
            Description: "Choose unlimited or standard from CPUCredits"
            Type: String
            Default: standard
            AllowedValues:
            - standard
            - unlimited
        Resources:
          EC2Server:
            Type: AWS::EC2::Instance
            Properties:
        ---中略---
              CreditSpecification:
                CPUCredits:
                  Ref: CPUCredits

実際にこのテンプレートを使ってスタックを作成してみます。

▲ デフォルトでstandardが選ばれていて、かつunlimitedも選択できます

実際に起動したEC2インスタンスを見てましょう。

▲ CloudFormationでもデフォルトStandardが作りたいっ!ってアニメ、ありそうですね

その1クリックを減らす事で得られるものは?

改めて見ると、滅茶苦茶細やかな小ネタです。
でも、一々マネジメントコンソールやAWS CLIを使って EC2インスタンスの起動後にUnlimitedに設定を変える必要 がこれで省けます。
塵も積もれば山となる 」という言葉があるように、その1クリック、1コマンドの省略が積もれば馬鹿にできない効率化となっていきます。え、CFnが数行増えた?
更に、意識せずUnlimitedモードにしてしまう事もこれなら防げます。
そう考えてみると結構嬉しい小ネタだと思いませんか?

少しでも、この記事を読んでUnlimitedを意識的に使い、T3インスタンスのデフォルトをStandardモードにする手間が省ける人が増えてくれたら嬉しいです!