こんにちは、技術1課の折戸です。
今日も屋根裏からお送りします。
今回はAmazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシーを設定する方法をご紹介します。
- Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー とは
- 前提条件
- EC2 起動
- 起動テンプレート作成
- ALB 作成
- AutoScalingグループ作成
- 確認
- 最後に
Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー とは
スケーリングメトリクスを選択してターゲット値を設定します。Amazon EC2 Auto Scaling は、スケーリングポリシーをトリガーする CloudWatch アラームを作成および管理し、メトリクスとターゲット値に基づいてスケーリング調整値を計算します。スケーリングポリシーは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するため、必要に応じて容量を追加または削除します。
一言で説明すると、
メトリクスタイプとターゲット値によって様々な条件でスケーリングできる機能
といったところでしょうか。
メトリクスタイプは以下から選択できます。
- 平均 CPU 使用率
- 平均ネットワーク入力 (バイト)
- 平均ネットワーク出力 (バイト)
- ターゲットごとの Application Load Balancer リクエスト数
それぞれのメトリクスタイプで閾値を設定し、柔軟にスケーリングさせることが可能です。
今回はこの中から ターゲットごとの Application Load Balancer リクエスト数 の検証をやってみます。
前提条件
こちらの構成で検証します。
VPC、サブネット、セキュリティグループ、InternetGatewayなどは以下の内容で作成済みとします。
VPC
- 以下のサブネットが配置されていること
サブネット
- ALB配置用パブリックサブネット x 2(ap-northeast-1aとap-northeast-1c)
- EC2配置用プライベートサブネット x 2(ap-northeast-1aとap-northeast-1c)
セキュリティグループ
- ALB用
- インターネットから80ポート(HTTP)アクセス許可
- EC2用
- 作業環境から22ポート(SSH)アクセス許可
- ALB用のセキュリティグループから80ポート(HTTP)アクセス許可
- ALB用
EC2 起動
EC2 起動
ストレージやセキュリティグループ、キーペアなどは適宜設定して下さい。
AMI
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type - ami-03d79d440297083e3 (64 ビット x86) / ami-0feb52c8d51bafff6 (64 ビット Arm)
を使用しましたインスタンスタイプ
t2.micro
を選択しましたネットワーク、サブネット
前提条件
のEC2配置用のVPCとプライベートサブネットのどちらかを選択ユーザーデータ
HTTPアクセスとALBのヘルスチェック用に、ユーザーデータへ以下のスクリプトを記載しておきます。
#cloud-config runcmd: - yum install httpd -y - systemctl enable httpd - systemctl start httpd write_files: - content: | test path: /var/www/html/index.html
3.インスタンスの設定 > 高度な詳細 > ユーザーデータ
- セキュリティグループ
前提条件
のEC2用セキュリティグループをアタッチ
EC2 起動後 チェック
SSHログインしてhttpdが起動していることを確認しましょう
[ec2-user@ip-x-x-x-x ~]$ curl http://localhost/ test
test
と返ってくればOKです。
起動テンプレート作成
AMI 作成
起動したEC2のAMIを作成します。
EC2 > インスタンス > アクション > イメージとテンプレート > イメージを作成
- イメージ名
任意の値を入力
イメージを作成
クリック
起動テンプレート作成
作成したEC2のAMIを元にした起動テンプレートを作成します。
この起動テンプレートを元にして、AutoScalingスケールアウト時のEC2が作成されます。
テンプレートの起動 > 起動テンプレートを作成
起動テンプレート名
任意の値を入力アプリケーションおよび OS イメージ (Amaozon マシンイメージ)
- 自分の AMI
自己所有
選択
作成したAMIを選択
- 自分の AMI
インスタンスタイプ
t2.micro
選択キーペア
任意のキーを選択サブネット
起動テンプレートに含めないで下さい
選択ファイアウォール (セキュリティグループ)
既存のセキュリティグループを選択する
選択- セキュリティグループ
EC2用セキュリティグループを選択
- セキュリティグループ
起動テンプレートを作成
クリック
EC2インスタンス停止
起動テンプレートの元となるインスタンスはAutoScalingが発動すると区別がつけずらく紛らわしいので、停止しておきましょう。
ALB 作成
ターゲットグループ作成
ターゲットグループ > Create target group
- Choose a target type
Instances - Target group name
任意の値を入力 - VPC
任意のVPCを選択
他項目はデフォルトのまま
Next
クリック
- Available instances
何も選択しません
Create target group
クリック
ロードバランサー 作成
ロードバランサー > ロードバランサーの作成
Application Load Balancer
Create
クリック
- Load balancer name
任意の値を入力 - VPC
任意のVPCを選択 - Mappings
ALB用のパブリックサブネットを選択
2つ以上のサブネット選択必須
- Security groups
ALB用のセキュリティグループを選択 - Listeners and routing
作成したターゲットグループを選択
Create load balancer
クリック
AutoScalingグループ作成
Auto Scaling グループ > Auto Scaling グループの作成
- 名前
任意の値を入力 - 起動テンプレート
作成した起動テンプレートを選択
次へ
クリック
VPC
任意のVPCを選択EC2配置用プライベートサブネットを2つ選択
次へ
クリック
ロードバランシング
既存のロードバランサーにアタッチ
選択既存のロードバランサーにアタッチ
ロードバランサーのターゲットグループから選択
選択- 既存のロードバランサーターゲットグループ 作成したALBのターゲットグループを選択
ヘルスチェック
ELB
チェック
次へ
クリック
グループサイズ
- 希望する容量
2 - 最小キャパシティ
1 - 最大キャパシティ
3
- 希望する容量
スケーリングポリシー
ターゲット追跡スケーリングポリシー
選択メトリクスタイプ
ターゲットごとの Application Load Balancer リクエスト数
を選択ターゲットグループ 作成したターゲットグループを選択
ターゲット値
50
次へ
クリック
通知を追加
次へ
クリックタグを追加
次へ
クリック
内容を確認し、 Auto Scaling グループを作成
クリック
確認
アクティビティ 確認
インスタンスが作成されていることを確認しましょう。
作成したAuto Scaling グループ名
クリック
アクティビティ
タブクリック
↓
2つのインスタンス起動が PreInService
から Successful
へと変われば、起動成功です。
アクセス確認
ALBのDNS名を確認し、HTTPアクセスできることを確認しましょう。
ロードバランサー > 作成したALB選択 > DNS名
http://【DNS名】/
へブラウザアクセス
test
が表示されれば成功です。
EC2が2つのAZへ起動されてることの確認
nslookupコマンドでALBのIPを確認し、それぞれのIPでアクセスして2つのAZに起動されたEC2インスタンスへアクセスできていることも確認できます。
ALBのIPアドレス確認
% nslookup 【DNS名】 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: 【DNS名】 Address: 【ap-northeast-1a経由のIP】 Name: 【DNS名】 Address: 【ap-northeast-1c経由のIP】
2つのAZに起動されたEC2インスタンスへアクセスできている
% curl http://【ap-northeast-1a経由のIP】/ test % curl http://【ap-northeast-1c経由のIP】/ test
最後に
手順は多いですが、慣れてしまえば簡単にAmazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシーの構成を構築することができます。
また、次回はこの設定を元に実際に負荷をかけてスケールアウト/スケールインする様子がわかるように動作確認してみます。
では。