Elastic BeanstalkでT3インスタンスのUnlimitedモードを無効にして起動するようにする


やりたいこと

(ほぼタイトルのまんまですが、、、)
今回の目標は、Elastic Beanstalk環境でebextensionsを使って、EC2のT3インスタンスをUnlimitedモードを無効にして起動するようにすることです。

T3インスタンスのUnlimitedモードはデフォルトで有効になっている

公式ドキュメントにも以下のように記載があります。

T3 インスタンスは、デフォルトで unlimited として起動します。T3スポットインスタンスを unlimited として起動し、CPU クレジットを計上するためのアイドル時間なしに、すぐに短期間使用する場合は、余剰クレジットの料金が発生します。24 時間の平均 CPU 使用率がベースラインを超えた場合は、余剰クレジットに対しても課金されます。T3スポットインスタンスは標準モードで起動して、コストが高くならないようにすることをお勧めします。

余剰クレジットこわぁ。。。/(^o^)\

Unlimitedモードを無効にしてT3インスタンスを起動するようにする

今回は、AutoScalingで自動で起動されるEC2インスタンスでもUnlimitedモードを無効にしておいてほしいので、ebextensionsを使って対応します。

以下のファイルを作成して、.ebextensionsフォルダ内に置いてデプロイします。

disable-t3-unlimited.config
files:
  "/tmp/disable-t3-unlimited.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash
      instance=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
      region=ap-northeast-1
      aws ec2 modify-instance-credit-specification --region $region --instance-credit-specification "InstanceId=$instance,CpuCredits=standard"

commands:
  disable-t3-unlimited:
    command: |
      /tmp/disable-t3-unlimited.sh
      rm -f /tmp/disable-t3-unlimited.sh

補足

1. EC2インスタンスメタデータの取得

実行中のEC2インスタンスのメタデータは

http://169.254.169.254/latest/meta-data/

で取得できます。
今回はinstance-idが欲しいので、そいつだけ取得しています。

2. リージョンの指定

今回はリージョンをap-northeast-1に設定してありますが、EC2を置いているリージョンを指定する必要があります。

region=ap-northeast-1

3. aws ec2コマンドを叩く際の注意点

記事の中で下のコマンドを普通に叩いていますが、aws ec2コマンドを叩くためには先にIAMユーザーの認証情報を設定しておく必要があります。

aws ec2 modify-instance-credit-specification --region $region --instance-credit-specification "InstanceId=$instance,CpuCredits=standard"

今回は主題とズレるため割愛させていただきますが、AWSの認証情報を設定するためのebextensionsを別に作ることをおすすめします。

確認してみる

EC2インスタンスのコンソール画面から反映されているか確認してみます。

できてた\‪( ´ ‿`)‬/

参考