0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWSハンズオン実践】Amazon EC2 Auto Scaling スケーリング基礎

0
Last updated at Posted at 2025-09-09

1. ハンズオン内容

image.png

  • ハンズオンでは各リソースを段階的に作成していきます

※Cloud9はVSCodeとPowerShellで代用
※画像はAWS公式ページより引用

1.1. 前提条件&注意事項

  • 一部課金が発生します(数十円程度)。終了後は必ず削除しましょう。このハンズオンはec2が多いので注意です
  • 親ページ見てない人は見てね
  • UIの操作はルートアカウントを使っています。

2. (Step1)環境構築

image.png

※画像はハンズオンより引用

2.1 (Step1)環境構築

ハンズオンでテンプレートが用意されているのですが、json形式なので、ymlに変換して使います

  • CloudFormation > スタック > スタックの作成

スタックの作成

大項目 中項目 選択肢 備考
前提条件 - テンプレートの準備 テンプレートの準備 既存のテンプレートを選択
テンプレートの指定 テンプレートソース テンプレートファイルのアップロード
テンプレートファイルのアップロード h4b-ec2autoscaling-template.yml
スタック名を提供 スタック名 h4b-ec2autoscaling-template
アクセス許可 - オプション IAM ロール (なし) ユーザ権限で作成
上記以外 全てデフォルト

このハンズオンでELBとターゲットグループがある理由はわかりません。ブラウザから挙動を確認する場合は必要だが、実施はしていない。

3. (Step2)スケジュールスケーリング

image.png

※画像はハンズオンより引用

スケジュールスケーリングとは指定した時刻に〇台起動といったことをするスケーリングです。実施するには図に示す3つの工程があります。

3.1 (Step2)起動テンプレート作成

image.png
※画像はハンズオンより引用

  • EC2 > 起動テンプレート > 起動テンプレートを作成

動くようにアップデートしています。

画面名:起動テンプレートを作成

大項目 中項目 選択肢 備考
起動テンプレート名と説明 🔴起動テンプレート名 - 必須 h4b-template
テンプレートバージョンの説明
Auto Scaling のガイダンス ⬜EC2 Auto Scaling で使用できるテンプレートをセットアップする際に役立つガイダンスを提供
テンプレートタグ 省略
ソーステンプレート 起動テンプレート名 省略

画面名:起動テンプレートのコンテンツ

大項目 中項目 選択肢 備考
アプリケーションおよび OS イメージ (Amazon マシンイメージ) Amazon Linux 2023 kernel-6.1 AMI Amazonと検索窓に入力して選んだ
インスタンスタイプ 🔴インスタンスタイプ ✅t3.micro
...
キーペア (ログイン) キーペア ✅起動テンプレートの設定に含めない
...
ネットワーク設定 サブネット ✅起動テンプレートの設定に含めない
...
アベイラビリティーゾーン ✅起動テンプレートの設定に含めない
...
ファイアウォール (セキュリティグループ) 既存のセキュリティグループを選択する
🔴共通のセキュリティグループ h4b-ec2-sg 環境構築で作成済み
高度なネットワーク設定 項目多数により省略
ストレージ (ボリューム) デフォルトは「8 GiB, EBS, 汎用 SSD (gp3), 3000 IOPS」
リソースタグ 🔴 キー:Name
値:h4b-instance
オートスケーリング起動するインスタンスの名前となる。複数台起動する場合は全部これになる
高度な詳細 ドメイン結合ディレクトリ 値は省略
IAM インスタンスプロフィール
ホスト名のタイプ 値は省略
DNS ホスト名 値は省略
インスタンスの自動復旧 値は省略
シャットダウン動作 値は省略
停止 - 休止動作 値は省略
終了保護 値は省略
停止保護 値は省略
🔴CloudWatch モニタリングの詳細 ⬜起動テンプレートの設定に含めない
✅有効化
⬜無効化
メトリクスの間隔が5分から1分に変わる
クレジット仕様 値は省略
プレイスメントグループ 値は省略
EBS 最適化インスタンス 値は省略
インスタンス帯域幅設定 値は省略
購入オプション 値は省略
キャパシティーの予約 値は省略
テナンシー 値は省略
RAM ディスク ID 値は省略
カーネル ID 値は省略
Nitro Enclave 値は省略
ライセンス設定 値は省略
CPU オプション 値は省略
アクセス可能なメタデータ 値は省略
メタデータ IPv6 エンドポイント 値は省略
メタデータのバージョン 値は省略
メタデータレスポンスのホップ制限 値は省略
メタデータのタグを許可 値は省略
🔴ユーザーデータ - オプション 下記参照
⬜ ユーザーデータは既に base64 エンコードされています
ユーザデータ,このまま貼り付ける
#!/bin/bash
set -euxo pipefail

# パッケージ更新
dnf -y update

# Apache と stress-ng をインストール(stress の代替)
dnf -y install httpd stress-ng

# httpd 起動&自動起動
systemctl enable --now httpd

# インデックス作成(リダイレクトは tee を使用)
hostname -f | tee /var/www/html/index.html >/dev/null

# SSH keepalive を追記(tee -a で追記)
{
  echo "ClientAliveInterval 60"
  echo "ClientAliveCountMax 120"
} | tee -a /etc/ssh/sshd_config >/dev/null

3.2 (Step2)Auto Scalingグループの作成

image.png

※画像はハンズオンより引用

  • EC2 > Auto Scaling グループ > Auto Scaling グループを作成する

画面名:起動テンプレートまたは起動設定を選択する

大項目 中項目 選択肢 備考
名前 🔴Auto Scaling グループ名 h4b-autoscaling-group
起動テンプレート 🔴起動テンプレート ✅h4b-template
...
🔴バージョン ✅Latest(1)
⬜Default(1)
⬜1?
「default (1)」= デフォルトとして Version 1 が指定されている
新バージョンのテンプレートを作っても、default を切り替えない限りは自動で使われない
ハンズオンでは自動でLatest使ってくれる方が都合いいので変更してます
インスタンスタイプの要件
ネットワーク 🔴VPC h4b-vpc
🔴アベイラビリティーゾーンとサブネット ✅apne1-az4 (ap-northeast-1a)
✅apne1-az1 (ap-northeast-1c)
アベイラビリティーゾーンのディストリビューション - 新規 ✅バランシング (ベストエフォート)
⬜バランシング (限定)

画面名:他のサービスと統合する - 省略可能

大項目 中項目 選択肢 備考
ロードバランシング 🔴以下のオプションを使用して、Auto Scaling グループを既存のロードバランサー、または定義した新しいロードバランサーにアタッチします。 ⬜ロードバランサーがありません
✅既存のロードバランサーにアタッチする
⬜新しいロードバランサーにアタッチする
既存のロードバランサーにアタッチする ✅ロードバランサーのターゲットグループから選択する
⬜Classic Load Balancer から選択する
既存のロードバランサーターゲットグループ h4b-tg
VPC Lattice 統合オプション アタッチする VPC Lattice サービスを選択 ✅VPC Lattice サービスがありません
⬜VPC Lattice サービスへアタッチ
Application Recovery Controller (ARC) のゾーンシフト - 新規 ⬜ゾーンシフトを有効にする
ヘルスチェック 追加のヘルスチェックタイプ - 省略可能 ⬜Elastic Load Balancing のヘルスチェックをオンにする
⬜VPC Lattice ヘルスチェックを有効にする
⬜Amazon EBS ヘルスチェックをオンにする
よくわからん
ヘルスチェックの猶予期間 300

画面名:グループサイズとスケーリングを設定する - 省略可能

大項目 中項目 選択肢 備考
グループサイズ 希望する容量タイプ
希望するキャパシティ 1 起動台数のこと
スケーリング 最小の希望する容量 1 下限台数
🔴最大の希望する容量 4 上限台数
自動スケーリング - 省略可能 ✅スケーリングポリシーなし
⬜ターゲット追跡スケーリングポリシー
インスタンスメンテナンスポリシー ✅ポリシーなし
⬜終了する前に起動
⬜終了してから起動
⬜カスタム動作
正常率を設定 最小 90
最大 110
その他のキャパシティ設定 キャパシティ予約の詳細設定 ✅デフォルト
⬜なし
⬜キャパシティ予約のみ
⬜最初にキャパシティ予約
ハンズオンにない項目
その他の設定 インスタンスのスケールイン保護 ⬜インスタンスのスケールイン保護を有効にする
モニタリング ⬜CloudWatch 内でグループメトリクスの収集を有効にする ハンズオンにない項目
デフォルトのインスタンスのウォームアップ ⬜デフォルトのインスタンスのウォームアップを有効にする ハンズオンにない項目

画面名:通知を追加する - 省略可能

何もしません

画面名:タグを追加する - 省略可能

何もしません

動作確認

  • EC2 > Auto Scaling グループ > h4b-autoscaling-group > アクティビティ

以下のような感じでfrom 0 to 1.0から1になりましたと表示されていればOK
At 2025-09-08T12:04:13Z a user request created an AutoScalingGroup changing the desired capacity from 0 to 1. At 2025-09-08T12:04:16Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.

この時点でEC2が自動で1台増えることを認識すること。課金に注意

3.3 (Step2)スケジュールの設定

image.png

※画像はハンズオンより引用

  • EC2 > Auto Scaling グループ > h4b-autoscaling-group > 予定されたアクションを作成する

画面名:予定されたアクションを作成する

大項目 中項目 選択肢 備考
予定されたアクションを作成する 🔴名前 h4b-schedule
🔴希望するキャパシティ 2 起動台数のこと
🔴最小 2 下限台数
🔴最大 4 上限台数
反復 ⬜ Cron
⬜ 5分ごと
⬜ 30分ごと
⬜ 1時間ごと
⬜ 毎日
⬜ 毎週
✅ 一度
🔴タイムゾーン ✅Asia/Tokyo
...
🔴特定の開始時刻 JSTでいいので普通に5分後を設定する

動作確認

  • EC2 > Auto Scaling グループ > h4b-autoscaling-group > アクティビティ

以下のような感じでfrom 1 to 2.1から2になりましたと表示されていればOK
At 2025-09-08T12:30:04Z a scheduled action update of AutoScalingGroup constraints to min: 2, max: 4, desired: 2 changing the desired capacity from 1 to 2. At 2025-09-08T12:30:04Z the scheduled action h4b-schedule executed. Setting min size from 1 to 2. Setting desired capacity from 1 to 2. At 2025-09-08T12:30:14Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 1 to 2.

この時点でEC2が自動で2台増なることを認識すること。課金に注意

4. (Step3)ターゲット追跡スケーリング

image.png
ターゲット追跡スケーリングは、設定したターゲット値を維持するようにスケールアウト・スケールインを行います
ex. 平均CPU使用率を70%〜80%で維持する場合(使用率が上回ると増台、下回ると減台を自動で行ってくれる機能)
※画像はハンズオンより引用

4.1. (Step3)ターゲット追跡スケーリング設定

image.png
※画像はハンズオンより引用

ハンズオン動画とコンソールの画面が少し違うので注意しましょう

  • EC2 > Auto Scaling グループ > h4b-autoscaling-group > 動的スケーリングポリシーを作成する

動的スケーリングポリシーを作成する

大項目 中項目 選択肢 備考
ポリシータイプ ✅ターゲット追跡スケーリング
⬜ステップスケーリング
⬜シンプルなスケーリング
スケーリングポリシー
Target Tracking Policy
メトリクスタイプ ✅平均CPU使用率
⬜平均ネットワーク入力(バイト)
⬜平均ネットワーク出力(バイト)
⬜ターゲットごとの Application Load Balancer リクエスト数
⬜カスタム CloudWatch メトリクス
🔴ターゲット値 80 CPU80%超えると台数が増えるということ
インスタンスのウォームアップ 300
⬜スケールインを無効にしてスケールアウトポリシーのみを作成する

このあとCloudWatchでCPUUtilizationのアラームが2つ自動作成されます。(メトリクスタイプに平均CPU使用率を選択したから)

  • CloudWatch > アラーム > すべてのアラーム
    • CPU80%以上でEC2を増台するアラーム
    • CPU60%以下でEC2を減台するアラーム

4.2. (Step3)負荷をかけてスケーリング確認

image.png
※画像はハンズオンより引用

2台にインスタンスコネクトし、負荷をかける

# デフォルトで24時間負荷がかかる
# ハンズオンでは以下のコマンドだが、t3.microはvCPU2になので負荷が足りない
# stress-ng -c 1

# こっちをしよう
stress-ng -c 2

動作確認

  • アラーム画面でCPU使用率が80%を超えること
  • インスタンス1台追加されること(2台→3台)4台になるかも
  • CPU使用率が下がること 

※15分とか結構時間がかかります

3 分内の3データポイントのCPUUtilization > 80は3分連続で80%超えるという意味になるらしい

自動作成されたアラームは特定のインスタンスIDには紐づかず、グループ内インスタンスの CPUUtilization の“平均(Average)”を監視しているので、インスタンス全台で負荷をかける必要がある

4.3. (Step3)負荷を止めてスケーリング確認

image.png
※画像はハンズオンより引用

ハンズオン動画ではstressコマンドを停止して、スケールインの模様を確認しているが、3台(4台)になって放置したところCPU60%以下になって自動的に2台にはなる。そして負荷が高まり3台に戻ってしまう。これはループする

なので動画の通りstressコマンドは停止して、2台に戻ることを確認しよう。
注意点としては60%以下になると一気に2台(min設定)に戻ります。1台ずつ減台して負荷を様子見するわけではなかった。

「15 分内の 15 データポイントの CPUUtilization < 60」の意味は15分連続で60%以下という意味になるらしい。

5. (Step4)異常なインスタンス置き換え

image.png
image.png
※画像はハンズオンより引用

マネジメントコンソールから2台稼働中のインスタンスのどちらを停止して、1台起動してくることを確認できればOKです

削除

  1. Auto Scalingグループの削除
     ・EC2インスタンスも削除されていること
     ・CloudWatch Alarmも削除されていること 
  2. 起動テンプレートの削除
  3. Cloud Formationスタックh4b-ec2autoscaling-templateの削除

さいごに

感想です

  • 設定項目が多いね
  • オートスケーリンググループを削除するとインスタンスも削除される
  • 中々増台、減台しないと思っても、そういう設定になっていると思われる。
  • オートスケーリンググループがあるとEC2を止めても復活してしまう。そういう時は以下の設定でしのごう
    • 希望するキャパシティ 0
    • 最小の希望する容量 0
    • 最大の希望する容量 0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?