はじめに
Amazon VPC(Virtual Private Cloud)はAWSで仮想ネットワークを構築するためのサービスで、セキュアで柔軟なネットワーク環境を提供します。このVPC内にサブネットを作成し、EC2インスタンスを起動してApacheサーバーを構築することで、簡単にWebサーバー環境をセットアップできます。
この記事では、VPCとサブネット、EC2を利用してWebサーバーをApacheで構築する具体的な手順を解説します。また、VPCを利用するメリットやコスト、ユースケースについても触れていきます。
AWSでサーバーを構築する時に必ず必要になってくる知識なので、抑えておきましょう。
サブネットやVPC、CIDR等わからない用語がある場合は概要から読んでいただいた方が理解ができると思います。
設定手順
VPC、サブネット、EC2を構築し、Web(Apache)サーバーを起動するまでの具体的な手順を解説します。
VPCの設定
「VPCを作成」をクリックし、以下の設定を行います
IPv4 CIDRは「172.17.0.0/20」を設定していますが、初めて作る場合「172.16.0.0/20」でも問題ありません。
ただし、VPCを過去に作っている場合、このIPアドレスを使用したことがある場合は使用できないのでご注意ください。
サブネットの設定
サブネットを作成していきます。
サブネットを作成するVPCを選択してください。
作成するサブネットをどのアベイラビリティーゾーンに設定するか割り当てます。
また、VPCを作成した際のCIDR形式のIPアドレス内のIPアドレスをサブネットCIDRブロックに指定します。
設定したらサブネットを作成します。
インターネットゲートウェイの割り当て
この時点ではサブネットを作成しただけでインターネットへの接続ができません。
なので、インターネットゲートウェイを作成して、ルートテーブルに明示的に作成したサブネットに割り当てます。
まずはインターネットゲートウェイを作成します。
インターネットゲートウェイを作成した後、先ほど作成したVPCのアタッチを忘れないようにしましょう。2024年12月時点では作成時にはデフォルトの設定項目にVPC設定等が存在しません。
ルートテーブルを作成していきます。
VPCには対象のサブネットがあるVPCを設定します。
作成したルートテーブルを編集していきます。
インターネットゲートウェイをルートテーブルに割り当てます。送信先を「0.0.0.0/0」に設定することでインターネット上のどの場所にもアクセスできるようにします。
インターネットゲートウェイを作成したのに設定できない場合は、VPCのアタッチを忘れていないかチェックしましょう。
ルートテーブルの設定で明示的にサブネットを関連付けます。
これでインターネット接続が可能なサブネットの作成を行うことができました。
EC2インスタンスの設定
EC2インスタンスの作成を行う前にセキュリティグループを作成します。
今回はインバウンドもアウトバウンドも許可していますが、本来は443, 80, 22番ポート等、開けるポートを制限しなくてはいけません。
本番環境を構築する際は注意しましょう。
EC2インスタンスの作成を行います。
EC2インスタンスの名前は任意で設定していきます。
今回はインスタンスタイプは無料利用枠である「t2.micro」を設定します。実務ではm系のインスタンスを使用されますが、理由は別の記事でご紹介します。
キーペアを作成します。EC2インスタンスにApacheをインストールする際に使用するssh接続する際に使用します。
ネットワークの設定ではEC2インスタンスを作成するVPC・サブネットを選択します。
パブリックIPの自動割り当ては有効化にしましょう。
EC2をWebサーバーとして外部に出す場合はパブリックIPを有効化にしますが、基本的にALB等を設定することになると思うので、パブリックIPを無効化にしておくことが多いです。
セキュリティグループでは先ほど作成したセキュリティグループを設定しましょう。
高度な設定では以下のように設定しておきましょう。
インスタンスを削除する際に明示的に終了するように設定しています。また、CloudWatchのモニタリングに関しては有効化にするとコストが発生するので注意しましょう。
インスタンスの作成を行い、完了したら次へ進みます。
Webサーバーの設定
ApacheをEC2インスタンスにインストールしてWebサーバーとしてサーバーを構築していきます。
EC2インスタンスへSSH接続
まずはApacheをインストールするためにssh接続をします。
# SSH接続する
ssh -i "kamecloud-key.pem" ec2-user@[パブリックIP]
# キーが使用できない場合は以下を実行する
chmod 400 "kamecloud-key.pem"
以下のように表示されたらEC2インスタンスへのSSH接続が完了できます。
Apacheのインストール
Apacheのインストールを行います。
以下のコマンドを順番に実行してください。
# システムのパッケージを最新のセキュリティパッチや機能が反映された状態に更新
sudo yum update -y
# Apache HTTP Serverをインストール
sudo yum install httpd -y
# サーバーの起動
sudo systemctl start httpd
# 再起動されたときにApacheが自動的に起動するように設定
sudo systemctl enable httpd
動作確認を行うので、パスを移動してhtmlファイルを作成します。
# パスを移動
cd ~/../../var/www/html
# index.htmlの作成
sudo touch index.html
# ファイルに書き込み
sudo vim index.html
index.htmlに任意で書き込みを行なっていきます。
入力したら以下のコマンドで保存しましょう。
# escを入力してvimエディタで保存
:wq
# escを入力して間違った場合はvimエディタを保存しないで終了
:q!
ブラウザでパブリックIPを入力して、表示されれば完了です。
※httpsではなくhttpになっていることを確認してください。
概要
メリットとデメリット
主に以下のメリットがあります。見ての通り見てのとおりほとんどの内容に対応ができます。
- セキュリティ: VPCやセキュリティグループ等で外部からの不審なアクセスを制限できる
- 柔軟性: 機能が異なるサーバーの用意、サーバーの初期設定等を柔軟に変更が可能
- スケーラビリティ: 必要に応じて、拡張したりロードバランサーで処理を分散することが可能
デメリットとして以下が挙げられます。
- 学習コストが高い: 設定するだけならすぐできますが、それぞれ何をやっているのか理解するのは初心者にはハードルが高い。
- 管理負担: VPC・サブネット・EC2、場合によってはロードバランサーやNATゲートウェイ等メンテナンスするものが多い。
コスト
設定次第でコストは変わってくるので、設計時によく確認しておきましょう。
特に使用した後の消し忘れには注意しましょう。
VPC・サブネット
VPCやサブネットの作成や追加自体にはコストがかかりません。
ただし、以下の機能を使用することで追加コストがかかるので注意してください。
- NATゲートウェイ
- VPC接続
EC2インスタンス
EC2インスタンスのコストはインスタンスタイプによって変わってきます。
リージョンや使用時間でも変わるので、それぞれの環境によって異なりますが、以下を参考程度にしてください。
インスタンスタイプ | 1時間あたりの費用 | 1ヶ月あたりの費用 |
---|---|---|
t2.micro | 1年間毎月750時間無料 | |
t3.micro | 0.0416USD | 約30USD |
m5.large | 0.096USD | 約69USD |
これらの料金はオンデマンドインスタンスの場合であり、リザーブドインスタンスやSavings Plansを利用することで、長期的にはコストを削減できる可能性があります。
EC2インスタンスのコストは他にEIPやEBSボリュームの使用量に応じてコストが発生するので、前もって調べておきましょう。
基本的にかからないと思いますが、NATゲートウェイを一度作って削除した場合EIPが残っているのでコストが発生します。消し忘れに注意してください。
データ転送コスト
インターネットからダウンロードする場合のデータ転送のコストについてですが、月間1GBまで無料です。
動画や大量の画像を扱わない場合以外はコストはかからないです。
アベイラビリティゾーン間のデータ転送は同一リージョンであってもデータ転送料金が発生します。
ユースケース
VPCやサブネット、EC2インスタンスを使用したネットワーク構成がどういう場合に使い道があるかご紹介していきます。
- 小規模なアプリケーションの作成
- 開発・テスト環境
- 社内専用アプリケーション
- 高可用性システムの構築
大体のアプリケーションでこのサーバー構成を少し応用したサーバー構成で運用することが一般的です。
この構成はセキュリティ的にも柔軟性的にも信頼性が高いので実務的に使用されます。
まとめ
VPC、サブネット、EC2を活用したApacheサーバー構築は、セキュリティ、柔軟性、スケーラビリティを重視した設計ができます違。特に、開発環境から本番運用まで幅広いユースケースに対応できる点が大きなメリットです。
一方で、設定や運用に関する学習コストや管理負担、データ転送コストなどのデメリットもあります。これらのデメリットを考慮しながら、小規模な開発から本番運用に移行する際には、コスト効率を考え設計・開発していきましょう。
この仕組みを理解することで、より効率的な運用が可能になります。