1
0

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

以前作成したEC2+EFS環境を少し発展させていきたいと思います。具体的にはAutoScalingを試してみます。
AutoScalingされて自動デプロイされたEC2からも自動でEFSを使用できるかを確認してみます。また、ALBもついでにデプロイしてロードバランシング環境も構築します。
前回の記事は以下となります。

環境イメージ

今回は以下の環境のような環境を作っていきます。
AutoScalingグループを使用して、EFSに自動でマウントするEC2を自動でデプロイしていきます。また、併せてALBもデプロイします。
ALB経由でWebブラウジングをすると、EFS上にあるindex.htmlがされることを確認していきます。
さらに、EC2のCPU使用率を意図的に高めることで自動でEC2がスケールアウトされることも確認します。
20240620から-ページ23.drawio.png

構築

既存のEC2からAMIを作成する

前回作成したEC2を選択し、イメージとテンプレートからイメージを作成を押下します。
image.png
以下のように設定を行いました。名前をqiita-efs-ec2-amiとしました。
image.png
AMIの管理画面で確認が可能となります。ステータスが利用可能となることを確認します。
image.png

テンプレートを作成する

起動テンプレートの管理画面に移動します。起動テンプレートを作成を押下します。
image.png
今回は以下の設定で作成します。
名前をqiita-efs-ec2-templateとし、AMIは先ほど作成したものを選択。
インスタンスタイプは検証なので、最も小さいt2.microを選択しました。キーペアはこのテンプレートで作成されたEC2にSSH接続する際に必要なものになります。SGは前回作成したもの(icmpやSSH、HTTP、NFSのInboundを許可しているもの)を選択。
最後のユーザデータに関しては以下を張り付けています。これを張り付けておくことで、EC2がデプロイされたときに自動でこのコマンドセットが実行されます。前回作成した際に使用したコマンドから必要なものだけを抽出しました。

#!/bin/bash
yum update -y
yum install -y amazon-efs-utils httpd
mkdir /mnt/efs
mount -t efs -o tls fs-0039132e986f1c7c1:/ /mnt/efs
rmdir /var/www/html
ln -s /mnt/efs /var/www/html
systemctl start httpd
systemctl enable httpd

screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-04-08_08_22.png
作成できたことを確認します。
image.png

AutoScalingグループを作成する

AutoScalingの管理画面を開きます。
グループを作成を押下します。
image.png
今から作成するグループの名前を決めます。今回はqiita-efs-ec2-autoscalingとしました。
また先ほど作成したテンプレートを指定します。
screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-04-08_11_25.png
インスタンスタイプやネットワークの要件を決めていきます。
AutoScaling時に指定のVPC/Subnetにデプロイしてほしいので、編集して指定しておきます。
screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-04-08_12_44.png
ALB(AWS ELB)をデプロイしてAutoScalingされたEC2にLBしてもらいます。
新しいロードバランサにアタッチするを選択し、Application Load balancerを選択します。
インターネットからのアクセスを想定しているので、Internet-facingを選択。VPCやAZ/Subnetが先ほど設定した通りであることを確認します。また、今回ALBはHTTP通信を受け付けるので、80ポートを指定します。
ALBにLBするターゲットグループはここで作成します。中身は空で問題ありません。不安になるかもしれませんが自動で紐づけされるようです。
screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-09-20_25_33.png
AutoScalingのサイズを決めます。希望するキャパシティを2として、CPU使用率の平均が10%を超えたら上限3台迄スケールアウトするように設定を入れております。
※スクショだとターゲット値が50%となっていますが、自動でスケールアウトすることをサクッと確認したかったので、グループ作成後10%と修正しました。
screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-09-23_20_35.png
この辺りは今回は省略しました。
image.png
image.png
確認して作成ボタンを押下します。
screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-09-20_29_52.png
AutoScalingグループが作成されたことを確認します
image.png

デプロイ状態の確認と接続試験

AutoScalingグループが作成されると、裏側で設定に応じて環境が自動デプロイされます。
今回の設定の場合、EC2が2台作成されます。
image.png
ALBに紐づくターゲットグループや、ALB自体もデプロイされます。
ターゲットグループにEC2が紐づいてヘルスステータスがHealthyとなっていることや、ALBのリソースマップを確認して、ターゲットグループやEC2と紐づいていることを確認します。
image.png
image.png
ALBのセキュリティグループの穴あき状態を確認します。IDを押下します。
image.png
HTTPのインバウンドが解放されていることを確認します。空いていないようであれば空けましょう。
image.png
接続試験を行います。ALBの画面に戻りDNS名を控えます。今回はhttp://qiita-efs-ec2-autoscaling-ALB-256392127.ap-northeast-1.elb.amazonaws.comでしたので、これをWebブラウザに突っ込みます。
image.png
以下のように以前作成したHTMLファイルの中身が表示されていることを確認します。自動デプロイ&EFSへの自動マウントが出来ていることがわかりますね。
image.png

スケールアウトされることの確認

各EC2のCPUに対して意図的に負荷をかけていき、それにより自動でスケールアウトされることを確認していきます。
各EC2にSSH接続し以下のコマンドを実行。CPUに負荷をかけます。

[root@ip-192-168-2-248 ~]# dnf install -y stress
[root@ip-192-168-2-248 ~]# stress --cpu 1 --timeout 600 &

image.png
暫くすると、EC2の管理画面にてインスタンスが1台自動でデプロイされることが確認出来ました。AZもまだデプロイされていないものが選択されていますね。
image.png
ALBのリソースマップを見てみても、スケールアウト前から1台追加でぶら下がっていることが確認できます。
image.png
ALBのDNS名を使って再度通信確認してみます。問題なく通信できてますね。
image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0