Amazon EC2 高可用性とスケーラビリティ
Amazon EC2における高可用性とスケーラビリティは、現代のクラウドアプリケーションにおいて不可欠な要素です。適切な設計により、アプリケーションの継続的な稼働と需要変動への柔軟な対応を実現できます。
Amazon EC2 Auto Scaling
Amazon EC2 Auto Scalingは、アプリケーションの負荷を処理するために適切な数のAmazon EC2インスタンスを利用できるようにするサービスです。Auto Scalingグループと呼ばれるEC2インスタンスの集合を作成し、需要に応じて自動的にインスタンス数を調整します。
Auto Scalingグループの基本構成
キャパシティ設定 各Auto Scalingグループでは、以下の3つのキャパシティ値を設定できます:
- 最小サイズ: グループが維持する最小インスタンス数
- 希望するキャパシティ: 通常時に維持したいインスタンス数
- 最大サイズ: グループが拡張できる最大インスタンス数
例えば、最小サイズが4、希望するキャパシティが6、最大サイズが12のAuto Scalingグループでは、定義したスケーリングポリシーによって、指定した条件に基づいて4から12の間でインスタンス数が自動調整されます。
異常インスタンスの自動検出と交換 Auto Scalingグループは、インスタンスに異常が発生した場合でも一定数のインスタンスを維持し続けます。インスタンスに異常が生じた場合、グループは異常のあるインスタンスを終了し、新しいインスタンスを起動して置き換えることで、耐障害性を向上させます。
スケーリングポリシーの種類
動的スケーリング リアルタイムの需要パターンに対応して、EC2インスタンスの容量を自動的に追加または削除します。CloudWatchメトリクスに基づいてスケーリングを実行し、CPU使用率、ネットワークトラフィック、カスタムメトリクスなどを監視できます。
予測スケーリング 確立された需要パターンを学習し、将来の需要を予測してスケーリングを実行します。定期的なトラフィックパターンがあるアプリケーションに特に効果的です。
スケジュールベーススケーリング 特定の時間やスケジュールに従ってスケーリングを実行します。営業時間や特定のイベント時間に合わせてキャパシティを調整できます。
複数のインスタンスタイプと購入オプション
単一のAuto Scalingグループで、複数のインスタンスタイプと購入オプション(スポットインスタンスとオンデマンドインスタンス)を起動できるため、スポットインスタンスの使用によってコストを最適化できます。また、リザーブドインスタンスとSavings Plansの割引は、グループ内のオンデマンドインスタンスと併用することで活用できます。
スポットインスタンスの活用 スポットインスタンスでは、オンデマンド料金と比べて大幅な割引料金で、未使用のEC2キャパシティを購入できます。Auto Scalingグループでスポットインスタンスを使用することで、ワークロードのパフォーマンスとコストを最適化できます。
Elastic Load Balancing(ELB)
Elastic Load Balancingは、受信トラフィックを複数のターゲット(EC2インスタンス、コンテナ、IPアドレスなど)に自動的に分散し、1つ以上のアベイラビリティーゾーンで動作します。
ロードバランサーの主要メリット
可用性と耐障害性の向上 ロードバランサーは、複数のコンピューティングリソース(仮想サーバーなど)にワークロードを分散することで、アプリケーションの可用性と耐障害性を向上させます。
動的なリソース管理 必要に応じてロードバランサーからコンピューティングリソースを追加・削除でき、アプリケーションへのリクエストの全体的な流れを中断することなく対応できます。
ヘルスチェック機能 コンピューティングリソースの健全性を監視するヘルスチェックを設定でき、ロードバランサーは健全なターゲットにのみリクエストを送信します。
ELBの動作メカニズム
リクエストルーティング ロードバランサーは、クライアントからの受信トラフィックを受け入れ、1つ以上のアベイラビリティーゾーン内の登録されたターゲット(EC2インスタンスなど)にリクエストをルーティングします。
ヘルスモニタリング ロードバランサーは登録されたターゲットの健全性を監視し、健全なターゲットにのみトラフィックをルーティングすることを保証します。異常なターゲットを検出すると、そのターゲットへのトラフィックルーティングを停止し、ターゲットが再び健全になったことを検出すると、トラフィックルーティングを再開します。
複数AZでの冗長化設計
アベイラビリティーゾーンの重要性
各AWSリージョンは3つ以上のアベイラビリティーゾーン(AZ)で構成されており、各AZは冗長な電源、ネットワーキング、接続性を備えた1つ以上の独立したデータセンターです。複数のAZにアプリケーションをデプロイすることで、冗長性を提供し、障害の影響を制限することで復旧性を向上させることができます。
Auto ScalingとAZの連携
アベイラビリティーゾーン間でのキャパシティバランス調整 Auto Scalingグループに複数のアベイラビリティーゾーンを指定でき、Amazon EC2 Auto Scalingは、グループがスケールするにつれて、アベイラビリティーゾーン間でインスタンスを均等に分散させることができます。これにより、1か所の障害があってもアプリケーションが保護されることで、高可用性と耐障害性が得られます。
ELBとAZの連携
ロードバランサーノードの配置 ロードバランサーのアベイラビリティーゾーンを有効にすると、Elastic Load Balancingはそのアベイラビリティーゾーンにロードバランサーノードを作成します。アベイラビリティーゾーンにターゲットを登録してもアベイラビリティーゾーンを有効にしない場合、これらの登録されたターゲットはトラフィックを受信しません。
複数AZ使用の推奨事項 すべてのロードバランサーで複数のアベイラビリティーゾーンを有効にすることを推奨します。Application Load Balancerでは、2つ以上のアベイラビリティーゾーンを有効にすることが要件となっています。この構成により、1つのアベイラビリティーゾーンが利用できなくなったり、健全なターゲットがなくなったりした場合でも、ロードバランサーは別のアベイラビリティーゾーンの健全なターゲットにトラフィックをルーティングし続けることができます。
実践的な高可用性アーキテクチャ例
Webアプリケーションの3層アーキテクチャ
複数のAZにWebサーバー、アプリケーションサーバー、データベースサーバーを配置し、各層でAuto ScalingとELBを活用することで、高可用性を実現できます。
具体的な構成例 1つのAZ内の単一のEC2インスタンスでWebアプリケーションを実行している場合、自然災害、ハードウェア障害、その他の中断によってそのAZでアプリケーションが損傷すると、問題が解決されるまでアプリケーション全体が影響を受けます。しかし、同じリージョン内の複数のAZにアプリケーションをデプロイすれば、1つのAZで障害が発生してもアプリケーションは正常に動作し続けることができます。
トラフィック分散の自動化
複数のAZのEC2インスタンスにアプリケーションをデプロイし、Elastic Load Balancing(ELB)を使用して各AZのインスタンス間でトラフィックを分散できます。1つのAZで障害が発生している場合、トラフィックは自動的に他のAZのインスタンスにリダイレクトされ、アプリケーションの可用性が確保されます。
ベストプラクティス
設計原則
- 最低2つ以上のAZを使用した冗長化設計
- Auto Scalingによる自動復旧機能の活用
- ELBによる負荷分散とヘルスチェックの実装
- 適切なキャパシティ計画とスケーリングポリシーの設定
監視と運用
- CloudWatchによるメトリクス監視
- 定期的な障害テストの実施
- スケーリングイベントのログ分析
- コスト最適化のための継続的な見直し
引用元:
- https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html
- https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html
- https://community.aws/content/2dj5ViJTpDlQZYmsplIwGarLcyj/improving-availability-and-performance-with-multi-az-architecture
- https://aws.amazon.com/jp/ec2/autoscaling/
- https://docs.aws.amazon.com/pdfs/elasticloadbalancing/latest/userguide/elb-ug.pdf
- https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/auto-scaling-groups.html