クラウドの勉強を始めると、最初に登場するサービスの一つが「Amazon EC2」です。AWSの中核をなすサービスですが、「仮想サーバーって結局何が動いているの?」「企業はどんな構成で使っているの?」という疑問を持つ方も多いと思います。今回は、EC2の基本的な仕組みから、実際に仮想サーバーの中に何を入れるのか、そして企業がどのような構成で活用しているのかまで、できるだけ分かりやすく解説します。
Amazon EC2とは何か
EC2は「Elastic Compute Cloud」の略で、AWSが提供する仮想サーバーのサービスです。物理的なサーバーを自分で購入・設置する代わりに、AWSのデータセンター上に仮想的なサーバーをクラウド上で起動して使うことができます。
「仮想サーバー」という言葉が難しく聞こえるかもしれませんが、イメージとしては「レンタルのパソコン」に近いです。AWSが持っている巨大なコンピュータの中に、自分専用の領域を作り出して、そこにOSをインストールして使う、というイメージです。必要なときに起動して、不要になったら停止・削除できるため、従来の物理サーバーに比べてコストと手間を大幅に削減できます。
EC2の大きな特徴として「Elastic(弾力的)」という言葉が入っている通り、サーバーのスペック(CPU・メモリ・ストレージ)を柔軟に変更できる点があります。アクセスが少ない時期は小さいサイズで運用し、需要が増えたときに大きいサイズに変更する、という運用が可能です。
EC2インスタンスの中に何を入れるのか
EC2を起動すると、まず「インスタンス」と呼ばれる仮想サーバーが立ち上がります。この中に何を入れるかは、用途によって大きく異なります。代表的なものを整理してみます。
OSのインストール
EC2を起動する際、まず選択するのがOS(オペレーティングシステム)です。選択肢として代表的なのは以下の2つです。
Amazon Linux(Linuxベースの軽量OS)は、AWS専用に最適化されており、AWSサービスとの相性が良く、コストも抑えられることから、多くのシステムで採用されています。Windows Serverは、Windowsベースのアプリケーションを動かす場合や、.NETなどのMicrosoft技術を使ったシステムに使われます。LinuxよりもライセンスコストがかかりますがWindows環境が必要な場合には欠かせません。
Webサーバー・アプリケーションサーバー
OSをインストールした後、最もよく入れるのがWebサーバーです。代表的なものとして、Apache・Nginxがあります。これらはWebブラウザからのリクエストを受け取り、HTMLやJavaScriptなどのコンテンツを返す役割を担います。
さらに、Webサーバーの背後にアプリケーションサーバーを置くことも一般的です。Python(Django・Flask)、Node.js、Java(Spring)、PHP(Laravel)など、様々な言語・フレームワークで書かれたアプリケーションを動かす層です。ユーザーのリクエストに対して動的にデータを処理し、レスポンスを返す役割を持ちます。
ミドルウェア・ランタイム
アプリケーションを動かすには、言語ごとの実行環境(ランタイム)も必要です。PythonであればPythonインタープリター、JavaであればJVM(Java仮想マシン)、Node.jsであればNode.jsランタイムをインストールします。また、キャッシュサーバー(Redisなど)やメッセージキュー(RabbitMQなど)もEC2上に構築されることがあります。
各種エージェント・モニタリングツール
EC2上ではアプリケーション以外にも、監視や管理のためのソフトウェアを動かすことが一般的です。CloudWatchエージェントを入れることで、メモリ使用率やディスク使用率などOS内部のメトリクスをCloudWatchに送信できます。また、Systems Managerエージェント(SSMエージェント)を入れることで、SSH接続なしにブラウザ経由でインスタンスを操作できるようになります。
EC2を起動するまでの流れ
EC2の起動は、大きく分けて以下のステップで行います。
まず、AMI(Amazon Machine Image)を選択します。AMIはOSやミドルウェアなどが事前に設定されたテンプレートのようなものです。AWSが提供する公式のAMI(Amazon Linux・Windows Serverなど)のほか、自分でカスタマイズしたAMIを作成して使い回すこともできます。
次に、インスタンスタイプを選択します。インスタンスタイプとはサーバーのスペックのことです。t3.micro(開発・テスト用の小さいサイズ)からc5.18xlarge(大量の計算処理が必要な用途)まで、用途に合わせた様々なサイズが用意されています。
そして、ネットワーク設定を行います。どのVPC(仮想ネットワーク)のどのサブネットに配置するか、セキュリティグループ(ファイアウォール設定)をどうするかを決めます。インターネットからアクセスさせる場合はパブリックサブネットに配置し、データベースなど直接アクセスさせたくないものはプライベートサブネットに置くのが基本的な設計です。
企業がEC2を使う代表的な構成
3層アーキテクチャ構成
企業のWebアプリケーションで最も一般的な構成が「3層アーキテクチャ」です。
インターネット
↓
ALB(Application Load Balancer)
↓
Webサーバー層(EC2) ← 複数台で冗長化
↓
アプリケーション層(EC2)
↓
データベース層(RDS)
ALBが外部からのアクセスを受け取り、複数台のEC2に分散させます。Webサーバー層はHTMLや静的コンテンツを返し、アプリケーション層はビジネスロジックを処理し、データベース層はデータの読み書きを担当します。各層を分離することで、スケーリングや障害対応が柔軟にできるのが特徴です。
マルチAZ構成で可用性を確保する
企業システムでは、特定のAZ(アベイラビリティゾーン)に障害が発生しても、サービスを継続できる構成が求められます。そのためEC2を複数のAZに分散して配置し、ALBが正常なインスタンスにのみトラフィックを振り分けるマルチAZ構成が標準的です。
AZ-1(東京a) AZ-2(東京c)
EC2インスタンス × N EC2インスタンス × N
↓ ↓
ALBが振り分け
片方のAZで障害が発生しても、もう片方のAZのEC2が処理を引き継ぐため、サービスのダウンタイムを最小限に抑えられます。
Auto Scalingグループとの組み合わせ
アクセス数の変動が大きいサービスでは、EC2をAuto Scalingグループと組み合わせて使います。これにより、アクセスが増えたときは自動的にEC2を増やし、アクセスが減ったときは減らす、という仕組みを実現できます。
たとえばECサイトのセール期間中に急激にアクセスが増えた場合でも、Auto Scalingが自動的にEC2を追加することで、サービスダウンを防ぎながら余分なコストもかけずに運用できます。
EC2 + コンテナ(ECS)という方向性
近年では、EC2の上でコンテナ(Docker)を動かし、Amazon ECS(Elastic Container Service)で管理するという構成も増えています。アプリケーションをコンテナ化することで、デプロイのスピードが上がり、環境の差異によるトラブルを減らすことができます。またFargateというサーバーレスオプションを使うと、EC2自体の管理をAWSに任せて、コンテナの管理だけに集中することも可能です。
EC2 vs サーバーレス:使い分けの考え方
近年は「Lambda(サーバーレス)でいいのでは?」という議論もよくあります。LambdaはEC2の管理が不要で、実行した分だけ課金されるため、小規模・イベント駆動の処理には向いています。一方、EC2が適しているのは、常時起動が必要なシステム、細かいOS設定が必要なシステム、特定のソフトウェアをインストールしなければならないシステムなどです。
単純に「どちらが優れているか」ではなく、システムの要件に合わせて使い分けること、あるいはEC2とLambdaを組み合わせて使うことが、実際の企業のシステム設計では一般的なアプローチになっています。
まとめ
Amazon EC2は、クラウドエンジニアとして働く上で避けて通れない中核サービスです。仮想サーバーの中にはOS・Webサーバー・アプリケーション・モニタリングエージェントなど様々なものが入り、企業では3層アーキテクチャ・マルチAZ・Auto Scalingといった構成と組み合わせて活用されています。EC2の基本的な概念を押さえた上で、ALBやRDS・Auto Scalingといった周辺サービスとの連携イメージを持っておくことが、クラウドエンジニアとしての設計力を高める第一歩になります。

コメント