オートスケーリングを使うと、EC2のインスタンス数を自動的に調整し、システムのパフォーマンスとコストを最適化できます。以下に、オートスケーリングで実現できる具体的な機能を解説します。

EC2の主な特徴

  1. スケーラビリティ
    • 必要に応じてインスタンス(仮想サーバー)を追加・削除できる。
    • オートスケーリングを利用すると、負荷に応じて自動的にインスタンス数を調整可能。
  2. 多様なインスタンスタイプ
    • 汎用(General Purpose): t3m5 など、バランスの取れた性能。
    • コンピューティング最適化(Compute Optimized): c5 など、CPUパワーが必要なアプリ向け。
    • メモリ最適化(Memory Optimized): r5x1 など、大量のメモリを扱うアプリ向け。
    • ストレージ最適化(Storage Optimized): i3d2 など、大量のデータ処理向け。
  3. さまざまな課金オプション
    • オンデマンドインスタンス: 使った分だけ課金(短期間の使用向け)。
    • リザーブドインスタンス: 1年 or 3年契約で割引(長期間の利用向け)。
    • スポットインスタンス: AWSの空きリソースを格安で利用(コスト重視向け)。
  4. 柔軟なOS選択
    • Amazon Linux、Ubuntu、Windows Server など、さまざまなOSを選択可能。
  5. セキュリティ機能
    • **セキュリティグループ(Firewall)**を設定し、通信の制御が可能。
    • **IAM(Identity and Access Management)**でアクセス管理。

EC2でできること(用途別)

① サーバーとしての基本機能

  • 仮想サーバーの作成・運用
  • OS(Linux/Windows)の選択とカスタマイズ
  • SSH や RDP でのリモートアクセス
  • Webサーバー(Apache/Nginx)やアプリケーションサーバーの構築

② Webサービス・アプリケーションの運用

  • WordPressなどのCMSをホスト
  • REST APIのホスティング(Node.js, Django, Spring Bootなど)
  • ECサイトやブログの運用
  • ゲームサーバーのホスティング

③ 高性能コンピューティング(HPC)・AI/機械学習

  • GPU搭載インスタンス(P3/G4など)で機械学習のトレーニング
  • シミュレーションや科学計算(例: CFD, バイオインフォマティクス)
  • データ分析・ETL処理(Apache Spark, Hadoopなど)

④ データベース・ストレージの運用

  • MySQL, PostgreSQL, MongoDB などのデータベースサーバーの構築
  • ファイルサーバー(NFS, Samba)として利用
  • AWS EBS(Elastic Block Store)を活用したデータ保存

⑤ ネットワーク・セキュリティ関連

  • VPNサーバーの構築(OpenVPN, SoftEther)
  • プロキシサーバーの運用(Squid, HAProxy)
  • ファイアウォール(セキュリティグループ)の設定
  • WAF(Web Application Firewall)の設定

⑥ スケーラブルなシステム構築

  • ELB(Elastic Load Balancer)を使ったトラフィック分散
  • マイクロサービスアーキテクチャの基盤(Docker, Kubernetes, ECS)

⑦ DevOps・CI/CD

  • JenkinsやGitHub Actionsを使ったCI/CD環境の構築
  • Ansible, Terraform, AWS CDKでのインフラ自動化
  • ログ監視・分析(CloudWatch, ELK Stack)

⑧ その他のユースケース

  • Windows Serverを利用したリモートデスクトップ環境
  • 仮想デスクトップ環境(VDI)の構築
  • メールサーバーの運用(Postfix, Exim)
  • IoTデバイスのデータ処理・管理

EC2のオートスケーリングとは?

オートスケーリング(Auto Scaling)は、EC2のインスタンス数を自動的に増減させる機能です。
Webサービスの負荷が高まるとインスタンスを追加し、負荷が低いときはインスタンスを削減することで、パフォーマンスを維持しつつコストを最適化できます。

オートスケーリングの仕組み

  1. Auto Scaling Group(ASG)を作成
    • オートスケーリングを適用するEC2インスタンスのグループを作成。
    • 最小・最大・希望インスタンス数を設定。
  2. スケーリングポリシーの設定
    • 負荷の状況に応じてインスタンス数を増減するルールを設定。
    • 例: CPU使用率が 70%を超えたらインスタンスを追加30%以下なら削減 など。
  3. 監視とスケーリングの実行
    • CloudWatch(AWSの監視サービス)を利用して、負荷状況を監視。
    • 設定したルールに基づき、オートスケーリングが実行。

オートスケーリングの種類

  1. 動的スケーリング(Dynamic Scaling)
    • 負荷状況に応じて、リアルタイムでインスタンスを増減。
    • 例: CPU使用率、ネットワークトラフィック、リクエスト数などを指標にスケール。
  2. 予測スケーリング(Predictive Scaling)
    • 過去のトラフィックデータを基に、今後の負荷を予測してスケール。
    • 例: EC2の利用パターンを学習し、事前にインスタンスを増やす。
  3. スケジュールスケーリング(Scheduled Scaling)
    • 事前に決めたスケジュールでスケール。
    • 例: 平日9時~18時はインスタンスを増やし、夜間は削減。

オートスケーリング(Auto Scaling)でできること

① 負荷に応じた自動スケーリング

CPU・メモリ使用率に基づくスケーリング

  • 例: CPU使用率が 70% を超えたらEC2インスタンスを追加、30% を下回ったら削減。
  • 監視ツール: Amazon CloudWatch メトリクスを活用。

リクエスト数に基づくスケーリング

  • 例: 1台のEC2が1秒間に処理できるリクエスト数(TPS)が1000件を超えたらインスタンス追加。
  • 活用ケース: WebサービスやAPIサーバーのトラフィック管理。

ネットワークトラフィックに基づくスケーリング

  • 例: 1インスタンスあたりの受信データが1GB/分を超えたらスケールアウト(増加)。
  • 活用ケース: 動画配信や大規模ファイル転送サービス。

② 障害発生時の自動復旧

ヘルスチェック機能

  • インスタンスがクラッシュ・フリーズした場合、自動的に新しいインスタンスを作成。
  • 例: Webサーバーが応答しない(HTTP 500エラー頻発)場合、自動で置き換え。

AZ(アベイラビリティゾーン)間での冗長化

  • AWSの複数のデータセンター(AZ)にインスタンスを分散配置。
  • 1つのAZが落ちても、別のAZでインスタンスが自動的に起動。

③ 予測・スケジュールに基づくスケーリング

予測スケーリング(Predictive Scaling)

  • AWSの機械学習アルゴリズムが、過去のトラフィックパターンを分析し、事前にスケール。
  • 例: 夕方18時にアクセスが急増するなら、16時にあらかじめインスタンスを増やす。

スケジュールスケーリング

  • 特定の時間帯・曜日に合わせてスケールアップ/ダウン。
  • 例: 毎朝9時にインスタンスを増やし、夜23時に削減(業務システム向け)。

④ コスト最適化

最適なインスタンスタイプの組み合わせ

  • オンデマンドインスタンスとスポットインスタンスを組み合わせてコスト削減。
  • 例: 基本は安定したオンデマンド、ピーク時は安価なスポットインスタンスを自動追加。

インスタンス数の最適化

  • 最小/最大インスタンス数を設定し、無駄なスケールを防ぐ。
  • 例: 1台は常に稼働、最大5台までスケールアウト。

⑤ ロードバランサーとの連携

Elastic Load Balancer(ELB)と連携

  • ALB(Application Load Balancer)NLB(Network Load Balancer) を利用し、スケールアウト時にトラフィックを自動分散。
  • 例: スケールアウト時に新規インスタンスが追加されたら、自動的にロードバランサーに登録。

オートスケーリングの活用例

Webサービスの負荷分散

  • Webアプリのリクエスト数が増えたら、EC2を自動追加。
  • ELBと連携し、ユーザーを均等に分散。

ECサイトのトラフィック対応

  • セール期間にアクセスが急増 → スケールアウトで負荷分散。
  • セール終了後に自動スケールイン(縮小)してコスト削減。

バッチ処理の自動最適化

  • データ処理ジョブの負荷に応じてインスタンス数を増減。
  • 夜間に大量データを処理し、日中は最小リソースに。

まとめ

負荷に応じたリアルタイムスケーリング(CPU、リクエスト数、ネットワークなど)
障害時の自動復旧(ヘルスチェック+AZ冗長化)
予測・スケジュールベースのスケーリング(事前に増減)
ロードバランサーとの連携で高可用性を確保
コスト最適化(スポットインスタンス活用、最適なインスタンス数管理)

【その他社内ブログ】
[AWS EC2]Amazon Linux2023にcomposerをインストールする
AWS GlueのクローラーがCSVヘッダーを抽出できない問題を解決する方法

【リソース】
Amazon EC2 Auto Scaling とは