blog top

AWS 入門 ~EC2 を使ってみよう~

今回はAWSの入門として、AWSのリソースを触って動かしながら、AWSコンソールの使い方を学んでいきます。

このチュートリアルでは以下のようなことが学べます。

今回最初に扱うサービスは、Amazon Elastic Compute Cloud (Amazon EC2) です。

EC2はAWSが提供する最も基本的な仮想サーバーで、ユーザーは好きなときに好きなだけ仮想サーバーを起動・停止できます。この仮想サーバーのことを「インスタンス」と呼びます。

インスタンスの起動時には、様々な設定を行うことができ、例えばOSの種類やインスタンスタイプ(CPUやメモリの性能)などを選択できます。

ここでは基本的なLinuxサーバーを起動し、Webサーバーを立てる手順を学んでいきます。

AWSコンソールからEC2インスタンスを作成する

まずはAWSのコンソールにログインします。ログイン後、以下の手順でEC2インスタンスを作成します。

AWSコンソールのトップページから「EC2」を検索・選択します。 AWSコンソールでEC2サービスを検索する画面

画面遷移後、「インスタンス」セクションに移動し、「インスタンスを起動」ボタンをクリックします。 EC2インスタンス一覧とインスタンスを起動ボタン

「インスタンスを起動」の画面では以下の設定を行います。

EC2インスタンス起動ウィザードのネットワーク設定画面

その他の設定はデフォルトのまま、「インスタンスの起動」ボタンをクリックし、インスタンスができるか確認しましょう!

「インスタンス」セクションのec2-tutorialインスタンスにて、「実行中」が表示されていれば成功です。 EC2インスタンス一覧で実行中ステータスが表示されている画面

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と入力して接続を確立します。

以下のように表示されれば、接続成功です。

SSH接続成功後のターミナル画面

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アドレス> としてアクセスしてみてください。

以下のような画面が表示されれば成功です。

nginxデフォルトウェルカムページ画面

☆チャレンジ: 2つ目のEC2インスタンスを起動する

ここまでの手順を参考に、2つ目のEC2インスタンスを起動し、nginxをインストールしてみましょう。

名前を ec2-tutorial-2とし、その他は同様の設定で作成します。

☆チャレンジ: インスタンスのレスポンスをカスタマイズする

現在はnginxのデフォルトページが表示されていますが、これではどちらのインスタンスにアクセスしているのか分かりません。

各インスタンスのレスポンスをカスタマイズし、インスタンスの名前を表示するようにしてみましょう。

答え

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>

保存すると自動でページが更新されるので、ブラウザで再度アクセスして確認してみてください。

インスタンス名を表示するように変更したnginxページ

ALBを作成する

次に扱うサービスは、ロードバランサー、特にApplication Load Balancer (ALB) と呼ばれるものです。

ロードバランサーは名前の通り、リクエストを複数のサーバーに処理を分散する(負荷分散する)ためのサービスです。

ALBを使うと、先程作成した2つのEC2インスタンスに対して、リクエストを自動で振り分けることができます。実際にやってみましょう。

まずはEC2の画面から「ロードバランサー」を選択し、「ロードバランサーの作成」ボタンをクリックします。

ロードバランサー一覧と作成ボタン

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

ロードバランサー種類選択でALBを選ぶ画面

次に、ロードバランサーの設定を行います。言及されていない設定はデフォルトのままにします。

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

ALB作成画面のリスナーとルーティング設定

として次のステップに進みます。

「使用可能なインスタンス」に2つのEC2インスタンスが表示されていることを確認し、両方にチェックを入れ、「保留中として以下を含める」ボタンを押します。

ターゲットグループ作成時にインスタンスを選択する画面

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

選択されたインスタンスを確認するターゲットグループ作成確認画面

では元のタブに戻り、ロードバランサーの設定を続けます。

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

ALB作成画面でターゲットグループを選択する画面

この状態で「ロードバランサーの作成」ボタンを押すと、ALBが作成されます。

※ALBの作成には時間がかかるため、ここで5分ほど休憩しましょう。

ALBにアクセスする

ALBの作成が完了したら、ALBのDNS名をコピーし、 http://<DNS名> としてブラウザでアクセスしてみましょう。

どちらのEC2インスタンスのレスポンスが返ってきたでしょうか?

リロードを繰り返して、自動でリクエストが振り分けられていることを確認してみてください!

メンテナンス画面を表示する

ALBではルーティングの設定を様々に変更することができます。

まずは、固定のレスポンスとしてメンテナンスページを表示する設定を行ってみましょう。

先ほど作成したALBの設定画面の下部「リスナーとルール」に移動し、「HTTP:80」のリンクをクリックします。

ALBリスナー一覧でHTTP:80リンクをクリックする画面

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

ALBリスナールール編集開始画面

「デフォルトアクション」の項目を見ると「ターゲットグループへ転送」に設定されているはずです。

ここで 「固定レスポンスを返す」 に変更し、レスポンス本文を「現在メンテナンス中です」とし、保存します。

ALB固定レスポンス設定画面

再度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」のリンクをクリックします。遷移先の画面で「ルールを追加する」をクリックします。

ALBルール一覧画面でルール追加ボタン

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

ALBルールでパス条件を設定する画面

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

ALBルールでターゲットグループ転送アクション設定

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

ALBルール優先度設定画面

これで / にアクセスした場合のみ、nginxが動作するようにルーティングが設定されました。

の2種類にアクセスしてみてください。どのようにレスポンスが変わるでしょうか?

☆チャレンジ: Apacheにルーティングする

ここまでの知識を応用して、ALBに新しいルールを追加し、Apacheへのルーティングを行ってみましょう。

手順は以下のとおりです。

少し難易度が上がりますが、頑張って挑戦してみてください!

答え

まずはnginxの際と同様にEC2を起動します。名前はapacheとします。

Apacheのインストールは以下のコマンドで行います。

sudo dnf install httpd -y
sudo systemctl enable httpd --now

起動が完了したらブラウザから確認してみましょう。

It works!

と表示されれば起動できています。

次にALBのルール追加画面に移動します。

「条件」セクションでは「クエリ文字列」を選択し、値に apache と入力します。

ALBルールでクエリ文字列条件apache設定画面

「アクション」のセクションに「ターゲットグループを作成」リンクがあるので、これをクリックして新しいターゲットグループを作成します。

ターゲットグループ名は ec2-tutorial-apache-targets とします。Apacheのインスタンスを選択し「保留中として以下を含める」ボタンを押し、ターゲットグループを作成します。

Apacheインスタンスをターゲットグループに追加する画面

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

ALBルールでApacheターゲットグループ選択画面

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

ALBルール作成の優先度設定完了画面

作成したら、

  • http://<ALBのDNS名>?apache
  • http://<ALBのDNS名>
  • http://<ALBのDNS名>/hoge

の3つにアクセスしてみてください。それぞれ

  • apacheのレスポンス
  • nginxのレスポンス
  • メンテナンスページ

が表示されたら成功です。

環境の削除

最後に、作成したリソースを削除して環境をクリーンアップします。

まとめ

本日は以下のことを学びました。

これでAWSの入門が完了です、おめでとうございます!