【Auto Scaling】ターゲットトラッキングスケーリングポリシーを設定してみた 〜その① 設定〜

記事タイトルとURLをコピーする

こんにちは、技術1課の折戸です。

今日も屋根裏からお送りします。

今回はAmazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシーを設定する方法をご紹介します。

Amazon EC2 Auto Scaling のターゲットトラッキングスケーリングポリシー とは

docs.aws.amazon.com

スケーリングメトリクスを選択してターゲット値を設定します。Amazon EC2 Auto Scaling は、スケーリングポリシーをトリガーする CloudWatch アラームを作成および管理し、メトリクスとターゲット値に基づいてスケーリング調整値を計算します。スケーリングポリシーは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するため、必要に応じて容量を追加または削除します。

一言で説明すると、
メトリクスタイプとターゲット値によって様々な条件でスケーリングできる機能
といったところでしょうか。

メトリクスタイプは以下から選択できます。

  • 平均 CPU 使用率
  • 平均ネットワーク入力 (バイト)
  • 平均ネットワーク出力 (バイト)
  • ターゲットごとの Application Load Balancer リクエスト数

それぞれのメトリクスタイプで閾値を設定し、柔軟にスケーリングさせることが可能です。
今回はこの中から ターゲットごとの Application Load Balancer リクエスト数 の検証をやってみます。

前提条件

こちらの構成で検証します。 f:id:swx-orito:20220208115741p:plain

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)アクセス許可

EC2 起動

EC2 起動

ストレージやセキュリティグループ、キーペアなどは適宜設定して下さい。

  • AMI
    Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type - ami-03d79d440297083e3 (64 ビット x86) / ami-0feb52c8d51bafff6 (64 ビット Arm)
    を使用しました f:id:swx-orito:20220207171238p:plain

  • インスタンスタイプ
    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.インスタンスの設定 > 高度な詳細 > ユーザーデータ f:id:swx-orito:20220207165619p:plain

  • セキュリティグループ
    前提条件 のEC2用セキュリティグループをアタッチ

EC2 起動後 チェック

SSHログインしてhttpdが起動していることを確認しましょう

[ec2-user@ip-x-x-x-x ~]$ curl http://localhost/
test

test と返ってくればOKです。

起動テンプレート作成

AMI 作成

起動したEC2のAMIを作成します。

EC2 > インスタンス > アクション > イメージとテンプレート > イメージを作成 f:id:swx-orito:20220208152145p:plain

f:id:swx-orito:20220208152404p:plain

  • イメージ名
    任意の値を入力
    イメージを作成 クリック

起動テンプレート作成

作成したEC2のAMIを元にした起動テンプレートを作成します。
この起動テンプレートを元にして、AutoScalingスケールアウト時のEC2が作成されます。

テンプレートの起動 > 起動テンプレートを作成 f:id:swx-orito:20220208152720p:plain

f:id:swx-orito:20220208153304p:plain

  • 起動テンプレート名
    任意の値を入力

  • アプリケーションおよび OS イメージ (Amaozon マシンイメージ)

    • 自分の AMI
      • 自己所有 選択
        作成したAMIを選択

f:id:swx-orito:20220208153841p:plain

  • インスタンスタイプ
    t2.micro 選択

  • キーペア
    任意のキーを選択

  • サブネット
    起動テンプレートに含めないで下さい 選択

  • ファイアウォール (セキュリティグループ)
    既存のセキュリティグループを選択する 選択

    • セキュリティグループ
      EC2用セキュリティグループを選択

起動テンプレートを作成 クリック

EC2インスタンス停止

起動テンプレートの元となるインスタンスはAutoScalingが発動すると区別がつけずらく紛らわしいので、停止しておきましょう。

ALB 作成

ターゲットグループ作成

ターゲットグループ > Create target group f:id:swx-orito:20220207172009p:plain

f:id:swx-orito:20220207173406p:plain

  • Choose a target type
    Instances
  • Target group name
    任意の値を入力
  • VPC
    任意のVPCを選択

f:id:swx-orito:20220207172613p:plain 他項目はデフォルトのまま
Next クリック

f:id:swx-orito:20220207173723p:plain

  • Available instances
    何も選択しません

Create target group クリック

ロードバランサー 作成

ロードバランサー > ロードバランサーの作成 f:id:swx-orito:20220207174021p:plain

f:id:swx-orito:20220207174136p:plain Application Load Balancer Create クリック

f:id:swx-orito:20220207175601p:plain

  • Load balancer name
    任意の値を入力
  • VPC
    任意のVPCを選択
  • Mappings
    ALB用のパブリックサブネットを選択
    2つ以上のサブネット選択必須

f:id:swx-orito:20220207175017p:plain

  • Security groups
    ALB用のセキュリティグループを選択
  • Listeners and routing
    作成したターゲットグループを選択

Create load balancer クリック

AutoScalingグループ作成

Auto Scaling グループ > Auto Scaling グループの作成 f:id:swx-orito:20220207180305p:plain

f:id:swx-orito:20220207180616p:plain

  • 名前
    任意の値を入力
  • 起動テンプレート
    作成した起動テンプレートを選択
    次へ クリック

f:id:swx-orito:20220207224212p:plain

  • VPC
    任意のVPCを選択

  • EC2配置用プライベートサブネットを2つ選択

次へ クリック

f:id:swx-orito:20220207181535p:plain

  • ロードバランシング
    既存のロードバランサーにアタッチ 選択

  • 既存のロードバランサーにアタッチ
    ロードバランサーのターゲットグループから選択 選択

    • 既存のロードバランサーターゲットグループ 作成したALBのターゲットグループを選択
  • ヘルスチェック
    ELB チェック

次へ クリック

f:id:swx-orito:20220207231006p:plain

  • グループサイズ

    • 希望する容量
      2
    • 最小キャパシティ
      1
    • 最大キャパシティ
      3
  • スケーリングポリシー
    ターゲット追跡スケーリングポリシー 選択

    • メトリクスタイプ
      ターゲットごとの Application Load Balancer リクエスト数 を選択

    • ターゲットグループ 作成したターゲットグループを選択

    • ターゲット値
      50

次へ クリック

  • 通知を追加 次へ クリック

  • タグを追加 次へ クリック

f:id:swx-orito:20220208142455p:plain f:id:swx-orito:20220208142548p:plain

内容を確認し、 Auto Scaling グループを作成 クリック

確認

アクティビティ 確認

インスタンスが作成されていることを確認しましょう。 f:id:swx-orito:20220208142800p:plain

作成したAuto Scaling グループ名 クリック

f:id:swx-orito:20220208142953p:plain アクティビティ タブクリック

f:id:swx-orito:20220208155103p:plainf:id:swx-orito:20220208143308p:plain 2つのインスタンス起動が PreInService から Successful へと変われば、起動成功です。

アクセス確認

ALBのDNS名を確認し、HTTPアクセスできることを確認しましょう。
ロードバランサー > 作成したALB選択 > DNS名 f:id:swx-orito:20220208160619p:plain

http://【DNS名】/ へブラウザアクセス f:id:swx-orito:20220208160821p:plain 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 のターゲットトラッキングスケーリングポリシーの構成を構築することができます。
また、次回はこの設定を元に実際に負荷をかけてスケールアウト/スケールインする様子がわかるように動作確認してみます。

では。

折戸 亮太(執筆記事の一覧)

2021年10月1日入社
クラウドインテグレーション部技術1課

屋根裏エンジニア