T2 Unlimited(T2無制限)オプションをオートスケール環境で利用してみた

2018.01.11

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

はじめに

AWSチームのすずきです。

「T2」ファミリーのEC2インスタンス、CPUクレジットの枯渇を心配する事なく利用できる T2 Unlimited。

オートスケール環境で設定する機会がありましたので、紹介させていただきます。

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

AWS CLI

バージョン「1.14.2」以降の「awscli」を利用する事で、 T2 Unlimited オプションを有効としたオートスケールの起動設定(Launch Config)を作成する事ができます。

$ aws --version
aws-cli/1.14.9 Python/2.7.12 Linux/4.9.27-14.31.amzn1.x86_64 botocore/1.8.13

$ aws ec2 create-launch-template \
  --launch-template-name testlaunchtemplate \
  --launch-template-data ImageId=ami-33c25b55,InstanceType=t2.nano,CreditSpecification={CpuCredits=unlimited}
{
    "LaunchTemplate": {
        "LatestVersionNumber": 1,
        "LaunchTemplateId": "lt-*****************",
        "LaunchTemplateName": "testlaunchtemplate",
        "DefaultVersionNumber": 1,
        "CreatedBy": "arn:aws:sts::************:assumed-role/ec2-role-dummy/i-*****************",
        "CreateTime": "2018-01-10T**:**:**.000Z"
    }
}

CloudFormation

2018年1月現在、CloudFormationの「AWS::AutoScaling::LaunchConfiguration」の設定項目として、 T2 Unlimited オプションは存在しないため、EC2インスタンスの起動時にAWSCLI利用した設定を「Userdata」に反映させました。

Userdata

  • CloudFormationテンプレートの抜粋(YAML)
    Type: AWS::AutoScaling::LaunchConfiguration
    Properties:
      UserData:
        Fn::Base64: |
          #!/bin/bash
          yum update aws-cli -y
          INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id`
          REGION=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'`
          SPECIFICATIONS_JSON="[{\"InstanceId\": \"${INSTANCE_ID}\",\"CpuCredits\": \"unlimited\"}]"
          echo "INSTANCE_ID: ${INSTANCE_ID}"
          echo "REGION: ${REGION}"
          echo "SPECIFICATIONS_JSON: ${SPECIFICATIONS_JSON}"
          aws --region ${REGION} ec2 describe-instance-credit-specifications --instance-id ${INSTANCE_ID}
          aws --region ${REGION} ec2 modify-instance-credit-specification --instance-credit-specification "${SPECIFICATIONS_JSON}"
          aws --region ${REGION} ec2 describe-instance-credit-specifications --instance-id ${INSTANCE_ID}
  • aws-cliを最新版にアップデートした後、「meta-data」より取得した情報を利用してCLIを実行しています。
  • 必要に応じ環境確認などの前処理や、例外処理などを追加してご利用ください。

テンプレートサンプル

  • AMIは東京リージョンの「Amazon Linux AMI 2017.09.1」を利用した、LaunchConfigとAutoScalingGroupのサンプルです。
  • T2 Unlimitedの設定に必要な最小限のIAM権限を、Ec2ロールで付与しています

autoscale-t2-unlimited.yaml

実行例

オートスケール起動したEc2インスタンス、T2 Unlimited(T2無制限) オプションが有効な事を確認できました。

まとめ

CloudFormationで管理されたオートスケール環境でも、「Userdata」によるT2 Unlimited オプションの設定が可能でした。

T2ファミリーのインスタンス多数起動するオートスケールをCloudFormationで管理し、 「AutoScalingReplacingUpdate」ポリシーを設定した環境では、 EC2インスタンス交換を伴うアップデート後、起動クレジットの制限(デフォルトでは24時間あたり100回)に抵触し、 負荷分散による十分な性能確保ができない事がありました。

CPUクレジットの枯渇がシステム性能に大きな影響が及ぶシステムでは、 T2 Unlimited オプションを保険、転ばぬ先の杖としてご活用ください。