FOR LEARNERS学習中向け

Hコンピュート段2構成層設計

EC2 を壊れても止まらない構成にする設計|1台のサーバーに持たせないものを決め、複数 AZ に並べる

EC2 を壊れても止まらない構成にする設計|1台のサーバーに持たせないものを決め、複数 AZ に並べる

EC2 を1台立てて動かせた。次に「これが壊れたらどうなるか」と考えると、ELB や Auto Scaling の名前は浮かぶのに、何から組めばいいのかが見えない。台数を増やせば冗長になる、と考えたくなりますが、データやログイン状態が1台の中にあると、増やしても止まるときは止まります。この記事は、構成を「何が1つしかないか」から見直し、5段の順番で描く方法を説明します。

この記事の結論

  • 設計は「何が1つしかないか」を探すことから始めます。1台、1つの AZ、サーバーの中だけにあるデータが典型です。
  • 1台の故障の影響を小さくするには、大きい1台に替える(スケールアップ)より、小さい複数台に分ける(スケールアウト)が基本です。
  • 台数を増やす前に、データ・セッション・ファイルを EBS 以外(S3・データベース・外部ストア)へ出し、各台を使い捨てにできる形にします。
  • そのうえで複数 AZ に置き、ELB が正常な台だけに振り、Auto Scaling グループが異常な台を入れ替えます。
  • 購入オプションは「常時いる分」と「増減する分」で分けて考えます。

EC2 1台の構成は、どこが単一障害点なのか

単一障害点とは、そこが止まるとシステム全体が止まる「1つしかない部品」のことです。EC2 を1台だけ立てた構成には、少なくとも3つあります。

  • 1台しかない: そのインスタンスが故障すれば、受け付ける台が無くなります。
  • 1つの AZ にしかない: AZ(アベイラビリティーゾーン)は障害の範囲を分けるための単位です。その AZ が使えなくなると、中の台はまとめて影響を受けます。
  • データがサーバーの中にしかない: インスタンスの中にだけあるデータやセッションは、その台を失うと一緒に失われます。台を作り直しても戻りません。

3つは別の問題です。台数を増やしても解けるのは1つ目だけで、2つ目は置き場所、3つ目はデータの持ち方の問題です。

SINGLE POINT OF FAILURE1つしかないものを探す

止まる原因は1台・1つの AZ・台の中のデータ

1台構成

どれか1つ止まれば全部止まる

  • 台が1台だけ
  • AZ が1つだけ
  • データが台の中だけ

分散構成

1つ止まっても続けられる

  • 同じ AMI の複数台
  • 複数の AZ に配置
  • データは台の外(S3・DB など)
出典: AWS Well-Architected 信頼性の柱「設計原則」

CHECK 1ここまでの確認

ログイン状態を1台のメモリだけに持つ構成で、台数を2台に増やすと何が起きうる?

答えと解説

答え: 2. リクエストが別の台に届くと、その台には状態が無く、ログインが切れたように見える

台数を増やしても、状態が各台の中にあれば台ごとに持っている中身が違います。「単一障害点」の章の「状態を外へ出す」を読み直してください。

スケールアップとスケールアウトはどう選ぶのか

処理能力を上げる方向は2つあります。1台を強くするのがスケールアップ(垂直)、台数を増やすのがスケールアウト(水平)です。

観点 スケールアップ スケールアウト
1台が壊れたときの影響 全部を1台に載せているので、全部止まる 残りの台で続けられる
上限 1台の最大サイズで頭打ち 台を足せる限り伸ばせる
止めずに変えられるか サイズ変更には停止が要る 台を足し引きするだけで済む
アプリへの要求 ほぼ無い 台が入れ替わってもよい作りが要る

スケールアウトの代償は、最後の行です。アプリが「この台が私の状態を全部知っている」前提だと、台を増やしても動きません。分散できない処理や、アプリをすぐに直せない場面では、スケールアップが現実的な選択になります。ただし上限と停止が必要な点は覚えておきます。

AWS の Well-Architected フレームワークの信頼性の柱も、設計原則に「水平にスケールして、システム全体の可用性を高める」を挙げています。1つの大きな資源を小さい複数の資源に置き換えると、1つの故障の影響が小さくなる、という考え方です。

UP OR OUT強くするか、分けるか

故障の影響を小さくするなら、小さい複数台に分ける

スケールアップ

  • 故障すると全部止まる
  • 1台の最大サイズで頭打ち
  • サイズ変更に停止が要る

スケールアウト

  • 故障しても残りが続ける
  • 台を足せる限り伸ばせる
  • 台を足し引きするだけ

支点は「台が入れ替わってもアプリが動くか」

CHECK 2ここまでの確認

1台が壊れたときの影響をなるべく小さくしたい。基本の方向はどちら?

答えと解説

答え: 2. 小さい台を複数に分ける(スケールアウト)

台数が多いほど、1台が止まったときに失う割合が小さくなります。「スケールアップとスケールアウト」の章の表を読み直してください。

台数を増やす前に何を1台の外へ出すのか

スケールアウトの前提は、各台が使い捨てにできることです。どの台がいつ消えても、同じ構成の新しい台に替えて続けられる状態を、ステートレス(状態を持たない)な設計と呼びます。そのために、台の中にあるものを次のように外へ出します。

今は台の中にあるもの 出す先の考え方
アップロードされたファイル S3 のようなオブジェクトストレージ
業務データ データベース(台とは別に動かすもの)
ログイン状態(セッション) 台の外のストア、またはクライアント側に持たせる
ログ 台の外へ転送して集める
設定・OS・アプリの中身 AMI や起動の仕組みに入れておく

最後の行が、「同じ台を何度でも作れる」ことを支えます。AMI は、OS・設定・ソフトウェアをまとめた起動用のテンプレートで、これで起動すれば同じ構成の台が何台でも作れます。台の外へ出せないものが残っていると、その台は使い捨てにできません。

なお、EBS ボリュームは台と別に存在しますが、基本は特定の AZ の中にあり、台に付けて使うものです。ここでいう「外へ出す」は、台や AZ が替わっても読めるところへ置くという意味です。

CHECK 3ここまでの確認

Auto Scaling グループに複数の AZ を指定していて、そのうち1つの AZ が使えなくなった。グループは何をする?

答えと解説

答え: 2. 使える他の AZ でインスタンスを起動して補う

複数 AZ を指定していれば、使える AZ 側で起動して台数を保ちます。1つの AZ しか指定していないとこの動きにならない点も、「複数 AZ に並べる」の章で確認してください。

複数 AZ に並べて、ELB と Auto Scaling グループで守るとは

状態を外へ出せたら、同じ AMI から作った台を複数の AZ に並べます。そのうえで2つの仕組みを前に置きます。

  • ELB(Elastic Load Balancing): 受信したリクエストを複数の台に分散します。ヘルスチェックで応答しない台を見つけると、その台には振りません。
  • Auto Scaling グループ: 台数を決めた範囲に保ちます。AWS のドキュメントでは、異常なインスタンスを検知して入れ替えること、複数の AZ にまたがって台を分散し、1つの AZ が使えなくなったら他の AZ で起動して補うことが利点として説明されています。ELB を前に置く構成もそこに書かれています。

役割分担は、ELB が「いま届け先として適切な台を選ぶ」、Auto Scaling グループが「台そのものを入れ替えて数を保つ」です。ELB だけでは壊れた台が戻らず、Auto Scaling グループだけでは入れ替わるまでの間、壊れた台にリクエストが届き続けます。両方を置くと、異常な台は振り分けから外され、数が足りなければ補われます。

BUILD IT UP壊れにくさを積む順番

下の段が済んでから、上の段を積む

台が1台壊れる

  • ⑤ Auto Scaling グループ — 異常な台を入れ替える
  • ④ ELB — 正常な台だけに振る
  • ③ 複数 AZ — 場所を分ける
  • ② 同じ AMI で複数台 — 台を増やす
  • ① 状態を外へ — 台を使い捨てにする

AZ が1つ使えない

  • ⑤ Auto Scaling グループ — 異常な台を入れ替える
  • ④ ELB — 正常な台だけに振る
  • ③ 複数 AZ — 場所を分ける
  • ② 同じ AMI で複数台 — 台を増やす
  • ① 状態を外へ — 台を使い捨てにする

効いている段土台の段

出典: Amazon EC2 Auto Scaling ユーザーガイド、Well-Architected 信頼性の柱

台数の下限はどう決めるのか

「2台あれば足りる」とは限りません。1台が落ちたとき、残りの台が全体の負荷を受けきれるかで決めます。たとえば2つの AZ に1台ずつ置くと、1つの AZ を失った時点で残りは1台です。その1台でふだんの負荷を受けられないなら、AZ の数だけでなく1つ失ったあとの台数で見積もります。

需要の変動には、Auto Scaling グループが台数を増減して合わせます。毎日ほぼ同じ時間に来る山のように予測できるものには、スケジュールで先に容量を上げる備え方もあります。細かい設定は auto-scaling-toha で扱います。

CHECK 4ここまでの確認

応答しなくなった台にリクエストを送らないようにするのは、主にどの仕組み?

答えと解説

答え: 1. ELB のヘルスチェックによる振り分けの除外

ELB は正常な台だけに振り、Auto Scaling グループは異常な台を入れ替えます。役割が別である点は「複数 AZ に並べて、守る」の章を読み直してください。

常時の台数と増減する台数は、購入オプションをどう分けるのか

構成が決まると、常時いてほしい台と、需要に応じて増減する台が分かれます。購入オプションは、この区別で考えます。

  • 常時いる台: 使い続ける量が読めるので、約束をして安くする方法が選べます。
  • 増減する台: 約束しない払い方のほうが無駄が出にくくなります。

どの払い方がどんな約束と引き換えかは、 READ ALSO — 未経験向け・段1 入口 EC2 のインスタンスタイプと購入オプションの仕組み|名前の読み方と払い方 にまとめてあります。ここでは「構成の形が決まってから、払い方を分ける」という順番だけ押さえてください。

設計を決めるときのチェックの順番は

最後に、設計を見直すときの順番です。

  1. 単一障害点を洗い出す: 1台・1つの AZ・台の中のデータの3つを探します。
  2. 外へ出す: ファイル・データ・セッション・ログ・設定を台の外へ。
  3. 並べる: 同じ AMI から複数台、複数 AZ に。
  4. 守る: ELB で分散し、Auto Scaling グループで入れ替える。
  5. 台数を見積もる: 1つ失ったあとの台数で足りるかを見る。

順番を守る理由は、前の段が済んでいないと後の段が効かないからです。状態が台の中にあれば、ELB で振っても台ごとに中身が違い、Auto Scaling グループが入れ替えれば中身が消えます。

Cloudory 執筆者(AWS 認定 全冠)

構成図を描くときは、箱を増やす前に「この箱が消えたら何が失われるか」を1つずつ書き出すと、足りない段が見つかります。ここで挙げた順番は、公式ドキュメントと Well-Architected の考え方を整理したものです。

まとめ

参照ソース

SCOREこの記事の確認テスト

0/4問 正解

各章の「ここまでの確認」に答えると、ここに集まります。結果はこの端末のブラウザにだけ残り、サーバには送りません。

PRACTICEこの記事の論点を練習問題で確かめる

この記事が扱うサービスの問題だけを続けて解けます。練習問題は Google でログインした人が使えます(練習問題の一覧)。

HAND IT OVER人に渡すなら

一言で説明するなら

1台の店員に帳簿も鍵も持たせると、その人が休んだ日に店が止まります。帳簿は金庫に、店員は同じ制服の交代要員を別の店舗にも置く、という考え方です。

前提を持たない人にそのまま渡せる記事です。「後輩に説明する」「顧客に理由を伝える」の材料として。

FAQよくある質問

2台あれば十分ですか?

1台が落ちても動く最小の形です。ただし残った1台が全体の負荷を受けきれるかで台数を決めます。受けきれないなら、落ちた瞬間に残りも遅くなります。

スケールアップはいつ選びますか?

処理を分散できないときや、アプリをすぐには直せないときの現実的な選択です。ただしサイズ変更には停止が必要で、上限もある点を見ます。

ELB と Auto Scaling はどちらが先ですか?

先に状態を1台の外へ出し、次に複数台と ELB、そのあとで Auto Scaling グループです。状態が中にあるまま台数だけ増やしても効果がありません。

次に何を読めばいいですか?

Auto Scaling グループの容量やスケーリングポリシーを扱う auto-scaling-toha です。

SAME TRACK同じ領域の記事

EC2 のインスタンスタイプと購入オプションの仕組み|名前の読み方と払い方
EC2 のインスタンスタイプと購入オプションの仕組み|名前の読み方と払い方 段1 入口仕組み
EC2 とは何か|インスタンス・AMI・EBS・セキュリティグループを「借りた1台」で理解する
EC2 とは何か|インスタンス・AMI・EBS・セキュリティグループを「借りた1台」で理解する 段1 入口とは
Auto Scaling の Launch Before Terminate がアカウント既定に|置き換え中の容量を保つ
Auto Scaling の Launch Before Terminate がアカウント既定に|置き換え中の容量を保つ NEWS段2 構成運用