EC2 Auto Scaling入門 – スケーリングポリシーなし

EC2 Auto Scaling入門 – スケーリングポリシーなし

EC2 Auto Scalingを利用することによって、任意の数のEC2インスタンスを起動し、アプリケーションの可用性を高めることができます。

今回はEC2 Auto Scaling入門ということで、スケーリングポリシーを設定せず、常に2台のEC2インスタンスが起動するように設定します。

なおシンプルスケーリングに関しては、以下のページをご確認ください。

あわせて読みたい
EC2 Auto Scaling – CPU使用率に基づいてシンプルスケーリング 【EC2 Auto Scaling - CPU使用率に基づいてシンプルスケーリング】 以下のページでEC2 Auto Scalingの基本事項を取り上げました。 https://awstut.com/2022/10/08/intro...

ステップスケーリングに関しては、以下のページをご確認ください。

あわせて読みたい
EC2 Auto Scaling – CPU使用率に基づいてステップスケーリング 【EC2 Auto Scaling - CPU使用率に基づいてステップスケーリング】 以下のページでEC2 Auto Scalingの基本事項を取り上げました。 https://awstut.com/2022/10/08/intro...

ターゲット追跡スケーリングに関しては、以下のページをご確認ください。

あわせて読みたい
EC2 Auto Scaling – CPU使用率に基づいてターゲット追跡スケーリング 【EC2 Auto Scaling - CPU使用率に基づいてターゲット追跡スケーリング】 以下のページでEC2 Auto Scalingの基本事項を取り上げました。 https://awstut.com/2022/10/08...

構築する環境

Diagram of Introduction to EC2 Auto Scaling - No Scaling Policy

ALBを作成し、パブリックサブネット内のEC2 Auto Scalingをアタッチします。

Auto Scalingは以下の通りに設定します。

  • 最小数:2
  • 最大数:2
  • 希望数:2

Auto Scalingグループ内で起動するEC2インスタンスですが、最新版のAmazon Linux 2とします。
S3上のyumリポジトリからApacheをインストールし、Webサーバとして動作するように設定します。

CloudFormationテンプレートファイル

上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。

https://github.com/awstut-an-r/awstut-fa/tree/main/089

テンプレートファイルのポイント解説

本ページでは、Auto Scalingの基本的な構成について取り上げます。

プライベートサブネット内のリソースをALBにアタッチする方法については、以下のページをご確認ください。

あわせて読みたい
プライベートサブネット内のインスタンスをALBにアタッチする 【プライベートサブネット内のインスタンスをALBにアタッチする構成】 プライベートサブネット内に設置されたインスタンスを、ALBにアタッチする方法を確認します。 AWS...

プライベートサブネット内のインスタンスでyumを実行する方法については、以下のページをご確認ください。

あわせて読みたい
プライベートサブネットのインスタンスでyum/dnfを実行する 【プライベートサブネット内のインスタンスでyum/dnfを実行する構成】 プライベートサブネット内のインスタンスで、yum/dnfを実行する方法を確認します。 今回は以下の2...

EC2 Auto Scaling

EC2 Auto Scalingを構築するために、以下の2つのリソースを作成します。

  • 起動テンプレート( or 起動設定)
  • Auto Scalingグループ

起動テンプレート

Resources:
  LaunchTemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties:
      LaunchTemplateData:
        IamInstanceProfile:
          Arn: !GetAtt InstanceProfile.Arn
        ImageId: !Ref ImageId
        InstanceType: !Ref InstanceType
        SecurityGroupIds:
          - !Ref InstanceSecurityGroup
        UserData: !Base64 |
          #!/bin/bash -xe
          yum update -y
          yum install -y httpd
          systemctl start httpd
          systemctl enable httpd
          ec2-metadata -i > /var/www/html/index.html
      LaunchTemplateName: !Sub "${Prefix}-LaunchTemplate"
Code language: YAML (yaml)

起動テンプレートはAuto Scalingグループ内で起動するEC2インスタンスの設定情報に関するリソースです。
EC2 Auto Scalingを構成する上で、起動テンプレートまたは起動設定を作成する必要があります。
ただし現在、起動設定を使用してAuto Scalingを構成することは非推奨となっています。

起動設定を使用しないことを強くお勧めします。Amazon EC2 Auto Scaling または Amazon EC2 には完全な機能を提供していません。起動設定に関する情報は、起動設定から起動テンプレートにまだ移行していないお客様向けに提供しています。

起動設定

基本的にはEC2インスタンスと同様の設定項目です。
例えばImageIdやInstanceTypeプロパティで、起動させるインスタンスのAMIやインスタンスタイプを指定します。

UserDataプロパティでユーザデータを設定できます。
今回はApacheをインストールおよび有効化し、HTMLファイルにインスタンスIDを書き込み、Apacheのルートページに設定します。

Auto Scalingグループ

Resources:
  AutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      AutoScalingGroupName: !Sub "${Prefix}-AutoScalingGroup"
      DesiredCapacity: !Ref DesiredCapacity
      LaunchTemplate:
        LaunchTemplateId: !Ref LaunchTemplate
        Version: !GetAtt LaunchTemplate.LatestVersionNumber
      MaxSize: !Ref MaxSize
      MinSize: !Ref MinSize
      VPCZoneIdentifier:
        - !Ref PrivateSubnet1
        - !Ref PrivateSubnet2
      TargetGroupARNs:
        - !Ref ALBTargetGroup
Code language: YAML (yaml)

Auto ScalingグループはEC2 Auto Scaling内に作成されるEC2インスタンスを集めたリソースです。
Auto Scalingグループ内に、起動テンプレートから生成されたEC2インスタンスが作成されます。

LaunchTemplateプロパティで、先述の起動テンプレートのIDおよびバージョンを指定します。
公式ページを参考にして設定しました。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html

Auto Scalingグループ内に作成するインスタンス数は、以下のプロパティで設定できます。
今回は常時2つのインスタンスが起動するように、いずれのプロパティにも2を指定します。

  • DesiredCapacity:希望数
  • MaxSize:最小数
  • MinSize:最大数

TargetGroupARNsプロパティで、アタッチするALBのターゲットグループのARNを指定します。

環境構築

CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。

CloudFormationスタックを作成し、スタック内のリソースを確認する

CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • ALB:fa-089-ALB
  • ALBのDNS名:http://fa-089-alb-762314289.ap-northeast-1.elb.amazonaws.com/
  • ALBターゲットグループ:fa-089-ALBTargetGroup
  • 起動テンプレート:fa-089-LaunchTemplate
  • EC2 Auto Scalingグループ:fa-089-AutoScalingGroup

作成されたリソースをAWS Management Consoleから確認します。
ALBを確認します。

Detail of ALB 1.

ALBのDNS名等が確認できます。

起動テンプレートを確認します。

Detail of Auto Scaling 1.

起動テンプレートがバージョン1として作成されていることがわかります。

Auto Scalingグループを確認します。

Detail of Auto Scaling 2.

希望数・最小数・最大数がいずれも2です。つまりAuto Scalingグループ内には、常に2つのインスタンスが起動することになります。
Auto Scalingグループに先述の起動テンプレートが適用されていることがわかります。

Detail of Auto Scaling 3.

Auto Scalingグループのアクティビティ履歴を見ると、空だったグループ内に2つのインスタンスが作成されたことがわかります。

Detail of Auto Scaling 4.

グループ内のインスタンスを確認すると、確かに2つのインスタンスが起動していることがわかります。

動作確認

リソース構築時

準備が整いましたので、ALBにアクセスします。

Detail of ALB 2.
Detail of ALB 3.

2つのインスタンスに交互にアクセスできました。
確かにALBにAuto Scalingグループがアタッチされており、グループ内には2つのインスタンスが生成されていることがわかります。

手動でインスタンス停止

意図的にインスタンスを1つ停止させて、Auto Scalingの挙動を確認します。

Detail of Auto Scaling 5.
Detail of Auto Scaling 6.

一方のインスタンスを削除しました。

Auto Scalingグループのアクティビティ履歴を確認します。

Detail of Auto Scaling 7.

インスタンスが削除されたことと、即座に自動的に新たなインスタンスが生成されたことがわかります。

Auto Scalingグループ内のインスタンスを確認します。

Detail of Auto Scaling 8.

2台のインスタンスが「InService」の状態です。
つまりAuto Scalingグループ内のインスタンス数が2台に維持されていることがわかります。

改めてALBにアクセスします。

Detail of ALB 4.

新たなインスタンスにもアクセスすることができました。
このように起動テンプレートおよびAuto Scalingグループを設定することによって、EC2 Auto Scalingが構成できることがわかりました。

まとめ

EC2 Auto Scalingを構成する起動テンプレートおよびAuto Scalingグループの設定方法を確認しました。
Auto Scalingグループの希望数・最小数・最大数を統一することによって、常時、規定数のインスタンスを起動・維持できることを確認しました。