1. ハンズオン内容
- ハンズオンでは各リソースを段階的に作成していきます
※Cloud9はVSCodeとPowerShellで代用
※画像はAWS公式ページより引用
1.1. 前提条件&注意事項
- 一部課金が発生します(数十円程度)。終了後は必ず削除しましょう。このハンズオンはec2が多いので注意です
- 親ページ見てない人は見てね
- UIの操作はルートアカウントを使っています。
2. (Step1)環境構築
※画像はハンズオンより引用
2.1 (Step1)環境構築
ハンズオンでテンプレートが用意されているのですが、json形式なので、ymlに変換して使います
- CloudFormation > スタック > スタックの作成
スタックの作成
| 大項目 | 中項目 | 選択肢 | 備考 |
|---|---|---|---|
| 前提条件 - テンプレートの準備 | テンプレートの準備 | 既存のテンプレートを選択 | |
| テンプレートの指定 | テンプレートソース | テンプレートファイルのアップロード | |
| テンプレートファイルのアップロード | h4b-ec2autoscaling-template.yml | ||
| スタック名を提供 | スタック名 | h4b-ec2autoscaling-template | |
| アクセス許可 - オプション | IAM ロール | (なし) | ユーザ権限で作成 |
| 上記以外 | 全てデフォルト |
このハンズオンでELBとターゲットグループがある理由はわかりません。ブラウザから挙動を確認する場合は必要だが、実施はしていない。
3. (Step2)スケジュールスケーリング
※画像はハンズオンより引用
スケジュールスケーリングとは指定した時刻に〇台起動といったことをするスケーリングです。実施するには図に示す3つの工程があります。
3.1 (Step2)起動テンプレート作成
- 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グループの作成
※画像はハンズオンより引用
- 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)スケジュールの設定
※画像はハンズオンより引用
- 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)ターゲット追跡スケーリング

ターゲット追跡スケーリングは、設定したターゲット値を維持するようにスケールアウト・スケールインを行います
ex. 平均CPU使用率を70%〜80%で維持する場合(使用率が上回ると増台、下回ると減台を自動で行ってくれる機能)
※画像はハンズオンより引用
4.1. (Step3)ターゲット追跡スケーリング設定
ハンズオン動画とコンソールの画面が少し違うので注意しましょう
- 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)負荷をかけてスケーリング確認
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)負荷を止めてスケーリング確認
ハンズオン動画ではstressコマンドを停止して、スケールインの模様を確認しているが、3台(4台)になって放置したところCPU60%以下になって自動的に2台にはなる。そして負荷が高まり3台に戻ってしまう。これはループする
なので動画の通りstressコマンドは停止して、2台に戻ることを確認しよう。
注意点としては60%以下になると一気に2台(min設定)に戻ります。1台ずつ減台して負荷を様子見するわけではなかった。
「15 分内の 15 データポイントの CPUUtilization < 60」の意味は15分連続で60%以下という意味になるらしい。
5. (Step4)異常なインスタンス置き換え
マネジメントコンソールから2台稼働中のインスタンスのどちらを停止して、1台起動してくることを確認できればOKです
削除
- Auto Scalingグループの削除
・EC2インスタンスも削除されていること
・CloudWatch Alarmも削除されていること - 起動テンプレートの削除
- Cloud Formationスタックh4b-ec2autoscaling-templateの削除
さいごに
感想です
- 設定項目が多いね
- オートスケーリンググループを削除するとインスタンスも削除される
- 中々増台、減台しないと思っても、そういう設定になっていると思われる。
- オートスケーリンググループがあるとEC2を止めても復活してしまう。そういう時は以下の設定でしのごう
- 希望するキャパシティ 0
- 最小の希望する容量 0
- 最大の希望する容量 0










