AWS

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

スポンサーリンク
EC2 Auto Scaling入門 - スケーリングポリシーなし AWS
スポンサーリンク
スポンサーリンク

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

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

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

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

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

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

構築する環境

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テンプレートを配置しています。

awstut-fa/089 at main · awstut-an-r/awstut-fa
Contribute to awstut-an-r/awstut-fa development by creating an account on GitHub.

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

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

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

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

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およびバージョンを指定します。
公式ページを参考にして設定しました。

AWS::AutoScaling::AutoScalingGroup - AWS CloudFormation
Use the AWS CloudFormation AWS::AutoScaling::AutoScalingGroup resource for AutoScaling.

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

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

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

環境構築

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グループの希望数・最小数・最大数を統一することによって、常時、規定数のインスタンスを起動・維持できることを確認しました。

タイトルとURLをコピーしました