AWS 入門 ~EC2 を使ってみよう~
今回はAWSの入門として、AWSのリソースを触って動かしながら、AWSコンソールの使い方を学んでいきます。
このチュートリアルでは以下のようなことが学べます。
- AWSコンソールの使い方
- EC2インスタンスの作成とSSHでの接続、作業
- ALBを使った負荷分散やルーティング
今回最初に扱うサービスは、Amazon Elastic Compute Cloud (Amazon EC2) です。
EC2はAWSが提供する最も基本的な仮想サーバーで、ユーザーは好きなときに好きなだけ仮想サーバーを起動・停止できます。この仮想サーバーのことを「インスタンス」と呼びます。
インスタンスの起動時には、様々な設定を行うことができ、例えばOSの種類やインスタンスタイプ(CPUやメモリの性能)などを選択できます。
ここでは基本的なLinuxサーバーを起動し、Webサーバーを立てる手順を学んでいきます。
AWSコンソールからEC2インスタンスを作成する
まずはAWSのコンソールにログインします。ログイン後、以下の手順でEC2インスタンスを作成します。
AWSコンソールのトップページから「EC2」を検索・選択します。 
画面遷移後、「インスタンス」セクションに移動し、「インスタンスを起動」ボタンをクリックします。 
「インスタンスを起動」の画面では以下の設定を行います。
- 名前: ec2-tutorial
- AMI: Amazon Linux 2023 (デフォルトのもの) を選択
- インスタンスタイプ: t3.microを選択 (無料利用枠の対象)
- キーペア
- キーペア名: ec2-tutorial
- キーペアのタイプ: RSA
- プライベートキーファイル形式: .pem
- 「キーペアを作成」をクリックし、自動でダウンロードされることを確認
- ネットワーク設定
- 自分のIPからのSSHトラフィックを許可
- インターネットからのHTTPトラフィックを許可
- ※デフォルトVPCが存在することを前提としています。

その他の設定はデフォルトのまま、「インスタンスの起動」ボタンをクリックし、インスタンスができるか確認しましょう!
「インスタンス」セクションのec2-tutorialインスタンスにて、「実行中」が表示されていれば成功です。 
EC2インスタンスにSSH接続する
次に、作成したEC2インスタンスにSSHで接続します。
まずはダウンロードしたキーペアファイル(ec2-tutorial.pem)のパーミッションを変更します。
以下のコマンドをターミナルで実行してください(WSLの場合は、ファイルをWSL上にコピーしてから実行します)。
# パスはダウンロードした場所に応じて変更してください
chmod 400 ~/Downloads/ec2-tutorial.pem
次にSSH接続を行います。IPv4アドレスは、EC2インスタンスの詳細画面から探してみましょう。
なお、以下のコマンドは、ec2-tutorial.pemキーペアを使用して、ec2-userユーザーで指定したIPv4アドレスのEC2インスタンスにSSH接続するという意味になります。
# パスはダウンロードした場所に応じて変更してください
ssh -i ~/Downloads/ec2-tutorial.pem ec2-user@<パブリックIPv4アドレス>
初回接続時には「Are you sure you want to continue connecting (yes/no)?」と聞かれるので、yesと入力して接続を確立します。
以下のように表示されれば、接続成功です。

EC2インスタンスにnginxをインストールする
EC2インスタンスにSSH接続できたので、次はインスタンスにnginxをインストールしていきます。
nginxはWebサーバーの一種で、HTTPリクエストを処理してWebページを配信するソフトウェアです。
実際の環境ではnginxの後ろにアプリケーションサーバー(PHPなど)を配置して動かすことが多いですが、今回はnginxのデフォルト設定を使って、簡単なWebサーバーを立ててみます。
以下のコマンドを実行して、nginxをインストールします。
sudo dnf install nginx -y
インストールが完了したら、nginxを起動します。
sudo systemctl enable nginx --now
この状態で、ブラウザからEC2インスタンスのIPv4アドレスに http://<IPv4アドレス> としてアクセスしてみてください。
以下のような画面が表示されれば成功です。

☆チャレンジ: 2つ目のEC2インスタンスを起動する
ここまでの手順を参考に、2つ目のEC2インスタンスを起動し、nginxをインストールしてみましょう。
名前を ec2-tutorial-2とし、その他は同様の設定で作成します。
☆チャレンジ: インスタンスのレスポンスをカスタマイズする
現在はnginxのデフォルトページが表示されていますが、これではどちらのインスタンスにアクセスしているのか分かりません。
各インスタンスのレスポンスをカスタマイズし、インスタンスの名前を表示するようにしてみましょう。
- ヒント: まずはnginxのデフォルトページのHTMLファイルを探しましょう
nginxのデフォルトページは /usr/share/nginx/html/index.html にあります。
vimで sudo vim /usr/share/nginx/html/index.html として開くと、以下の記述が見つかるはずです。(タイトルではなく、h1タグの部分です!)
<h1>Welcome to nginx!</h1>
これを以下のように変更して、インスタンス名を表示するようにします。
<h1>Welcome to ec2-tutorial!</h1>
2つ目のインスタンスの場合は以下のように変更します。
<h1>Welcome to ec2-tutorial-2!</h1>
保存すると自動でページが更新されるので、ブラウザで再度アクセスして確認してみてください。

ALBを作成する
次に扱うサービスは、ロードバランサー、特にApplication Load Balancer (ALB) と呼ばれるものです。
ロードバランサーは名前の通り、リクエストを複数のサーバーに処理を分散する(負荷分散する)ためのサービスです。
ALBを使うと、先程作成した2つのEC2インスタンスに対して、リクエストを自動で振り分けることができます。実際にやってみましょう。
まずはEC2の画面から「ロードバランサー」を選択し、「ロードバランサーの作成」ボタンをクリックします。

ロードバランサーには実はいくつかの種類がありますが、ここでは「Application Load Balancer」を選択します。

次に、ロードバランサーの設定を行います。言及されていない設定はデフォルトのままにします。
- ロードバランサー名: ec2-tutorial-alb
- アベイラビリティーゾーンとサブネット: すべてチェックを入れます
- セキュリティグループ: defaultを外し、「launch-wizard-1」(先ほどのEC2作成時に自動で作成されたセキュリティグループ)を選択します。

リスナーとルーティングの設定で「ターゲットグループの作成」というリンクがあるので、これを押して別タブで作成を行っていきます。

- ターゲットグループ名: ec2-tutorial-targets
として次のステップに進みます。
「使用可能なインスタンス」に2つのEC2インスタンスが表示されていることを確認し、両方にチェックを入れ、「保留中として以下を含める」ボタンを押します。

すると「ターゲットを確認」欄に2つのインスタンスが表示されるので、これでターゲットグループの作成を行います。

では元のタブに戻り、ロードバランサーの設定を続けます。
先程の「リスナーとルーティング」欄のデフォルトアクションで作成したターゲットグループを選択します。横のリロードボタンを押すと、先程作成したターゲットグループが表示されるはずです。

この状態で「ロードバランサーの作成」ボタンを押すと、ALBが作成されます。
※ALBの作成には時間がかかるため、ここで5分ほど休憩しましょう。
ALBにアクセスする
ALBの作成が完了したら、ALBのDNS名をコピーし、 http://<DNS名> としてブラウザでアクセスしてみましょう。
どちらのEC2インスタンスのレスポンスが返ってきたでしょうか?
リロードを繰り返して、自動でリクエストが振り分けられていることを確認してみてください!
メンテナンス画面を表示する
ALBではルーティングの設定を様々に変更することができます。
まずは、固定のレスポンスとしてメンテナンスページを表示する設定を行ってみましょう。
先ほど作成したALBの設定画面の下部「リスナーとルール」に移動し、「HTTP:80」のリンクをクリックします。

デフォルトのルールにチェックを入れ、ルールの編集を行います。

「デフォルトアクション」の項目を見ると「ターゲットグループへ転送」に設定されているはずです。
ここで 「固定レスポンスを返す」 に変更し、レスポンス本文を「現在メンテナンス中です」とし、保存します。

再度ALBのDNS名にアクセスしてみてください。メンテナンスページが表示されたでしょうか?
curl -i http://<ALBのDNS名> としてコマンドラインからも確認できます。
HTTP/1.1 503 Service Temporarily Unavailable
Server: awselb/2.0
Date: Tue, 15 Jul 2025 01:05:35 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 33
Connection: keep-alive
現在メンテナンス中です
nginxにアクセス可能にする
現在はALBのルーティングがすべてメンテナンスページに設定されているため、どのEC2インスタンスにもアクセスできません。
そこで、特定のパス(ここでは /)にアクセスした場合のみ、nginxが動作するようにルーティングを設定してみましょう。
「リスナーとルール」の画面にもどり、「HTTP:80」のリンクをクリックします。遷移先の画面で「ルールを追加する」をクリックします。

「条件」のセクションで「パス」を選択し、/ と入力します。

アクションでは「ターゲットグループへ転送」を選択し、先ほど作成した ec2-tutorial-targets を選択します。

次の画面で優先度を設定します。ここでは「1」を入力し、作成します。

これで / にアクセスした場合のみ、nginxが動作するようにルーティングが設定されました。
http://<ALBのDNS名>http://<ALBのDNS名>/hoge
の2種類にアクセスしてみてください。どのようにレスポンスが変わるでしょうか?
☆チャレンジ: Apacheにルーティングする
ここまでの知識を応用して、ALBに新しいルールを追加し、Apacheへのルーティングを行ってみましょう。
手順は以下のとおりです。
- EC2インスタンスにApache (
httpd) をインストールし、起動する - ALBにルールを追加し、特定のクエリ (例
?apache) に対してApacheのレスポンスを返すように設定する- このとき新しくターゲットグループを作成し、Apacheのインスタンスを登録する
少し難易度が上がりますが、頑張って挑戦してみてください!
まずはnginxの際と同様にEC2を起動します。名前はapacheとします。
Apacheのインストールは以下のコマンドで行います。
sudo dnf install httpd -y
sudo systemctl enable httpd --now
起動が完了したらブラウザから確認してみましょう。
It works!
と表示されれば起動できています。
次にALBのルール追加画面に移動します。
「条件」セクションでは「クエリ文字列」を選択し、値に apache と入力します。

「アクション」のセクションに「ターゲットグループを作成」リンクがあるので、これをクリックして新しいターゲットグループを作成します。
ターゲットグループ名は ec2-tutorial-apache-targets とします。Apacheのインスタンスを選択し「保留中として以下を含める」ボタンを押し、ターゲットグループを作成します。

元の画面に戻り、先ほど作成したターゲットグループを選択します。(リロードボタンを押すと表示されます)

優先度はApacheが「1」となるように設定し、ルールを保存します。

作成したら、
http://<ALBのDNS名>?apachehttp://<ALBのDNS名>http://<ALBのDNS名>/hoge
の3つにアクセスしてみてください。それぞれ
- apacheのレスポンス
- nginxのレスポンス
- メンテナンスページ
が表示されたら成功です。
環境の削除
最後に、作成したリソースを削除して環境をクリーンアップします。
- 料金がかかるため削除してほしいもの
- nginxのEC2インスタンス
ec2-tutorial - nginxのEC2インスタンス
ec2-tutorial-2 - ApacheのEC2インスタンス
apache - ALB
ec2-tutorial-alb
- nginxのEC2インスタンス
- 料金がかからないが削除してほしいもの
- セキュリティグループ
launch-wizard-1 - セキュリティグループ
launch-wizard-2 - セキュリティグループ
launch-wizard-3 - キーペア
ec2-tutorial - ターゲットグループ
ec2-tutorial-targets - ターゲットグループ
ec2-tutorial-apache-targets
- セキュリティグループ
まとめ
本日は以下のことを学びました。
- AWSのコンソールでリソースを作成
- EC2インスタンスを作成しWebサーバーを起動
- ALBによる負荷分散とルーティング
これでAWSの入門が完了です、おめでとうございます!