EC2オートスケールの新しいインスタンス置き換え「終了する前に起動」を試してみた。

EC2オートスケールのインスタンス更新時、一時的にオートスケールの最大数を超えるインスタンス起動が可能となり、インスタンス台数を保ったメンテナンスが簡単になりました。
2023.11.20

2023年11月15日、Amazon EC2 Auto Scaling のアップデートで、 EC2オートスケールのインスタンス交換時、新しいインスタンスを予め起動させた後、古いインスタンスを終了させる「終了する前に起動」が可能になりました。

EC2インスタンス交換中の性能や可用性の低下を回避できる、新しい置き換え操作を試す機会がありましたので、紹介させていただきます。

準備

EC2オートスケールの「インスタンスの更新」を評価するため、 希望数、最小数、最大数、全て「4」と設定したオートスケール環境を用意しました。

Auto_Scaling_グループの詳細

  • 今回設置には以下のCloudFormationテンプレートを利用しました。
AWSTemplateFormatVersion: '2010-09-09'
Description:  Auto Scaling Test
Parameters:
  Ec2ImageId:
    Type: AWS::SSM::Parameter::Value<String>
    Default: /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64
Resources:
  Ec2LaunchTemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties:
      LaunchTemplateData:
        ImageId: !Ref Ec2ImageId
        InstanceType: t4g.nano
  Ec2InstanceAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      DesiredCapacity: 4
      MinSize: 4
      MaxSize: 4
      LaunchTemplate:
        LaunchTemplateId: !Ref 'Ec2LaunchTemplate'
        Version: !GetAtt 'Ec2LaunchTemplate.LatestVersionNumber'
      AvailabilityZones: 
        - ap-northeast-1a

操作

EC2ダッシュボードを利用して、Auto Scaling グループを指定、「インスタンスの更新」を行いました。

検証時、全てのインスタンスを交換対象とするため、スキップマッチングは「無効」としました。

スキップマッチング

最大数「150%」

インスタンス置き換え方法 として「終了する前に起動」、 インスタンスの最大数は「150%」、一時的に6台までEC2インスタンスを起動する指定としました。

インスタンス更新150

2台起動→2台終了→2台起動→2台終了との動作が確認できました。

履歴 _150

最大数「200%」

インスタンス置き換え方法 として「終了する前に起動」、 インスタンスの最大数は「200%」一時的に8台までEC2インスタンスを起動する指定としました。

4台起動→4台終了との動作が確認できました。

インスタンス更新200

最小「50%」

インスタンス置き換え方法 として「終了してから起動」、最小数「50%」とする指定を試しました。

インスタンス更新_終了してから起動50

2台終了→2台起動→2台終了→2台起動 との動作が確認できました。

インスタンス更新50

まとめ

インスタンスの更新時、従来も最小正常率を指定する事は可能でしたが、 インスタンス交換中の性能や可用性の低下を回避する必要がある場合、事前、事後にオートスケール台数の調整が必要でした。

通常のEC2インスタンス、1秒単位のオンデマンド料金やスポット料金で利用する場合、「終了する前に起動」によるコスト影響は軽微と予想されます。 高性能が求められるオートスケール環境で、EC2インスタンスの入れ替えをオンラインで行う必要が生じた際には、今回のアップデートをご活用ください。