AWSで簡単にWebサーバを作る方法まとめ

AWSで簡単にWebサーバを作る方法まとめ

今回はAWSの超基本機能である、EC2を使って、簡単にWebサーバを立ち上げるところまでを紹介したいと思います。

アカウントを作成するところから、無料枠でできる範囲で作ってみますので、試しにAWSを使ってみたいという方は是非参考にしてみてください。

ただし、作った後にそのまま放置していると課金されてしまいますので、記事の最後でも紹介しますが、課金がいやであれば、作り終わったら速やかに削除しましょう。(サーバ一台くらい放置したところで大した金額にはなりませんが…)

1.アカウントの作成

1.1.マネジメントコンソールにアクセス

AWSのマネジメントコンソールにアクセスします。

AWSマネジメントコンソール
AWSマネジメントコンソール
新しいAWSアカウントの作成
新しいAWSアカウントの作成

下の新しいAWSアカウントの作成から必要事項を記入して、アカウントを作成してください。アカウントタイプは、学校や会社用のアカウントである、プロフェッショナルとパーソナルの2種類あります。

ログインした後に、左上の「サービス」を押下すると下記のようにすべてのサービスの一覧がでてきます。

すべてのサービスメニュー
すべてのサービスメニュー

いっぱいありますが、かなりAWSに精通している人でも全部使いこなせていませんので安心してください。星がついているものは僕自身がお気に入り登録しているだけですので、気にしないでください。

この中で、下記の2つは基本中の基本でよく使うサービスですので、是非お気に入り登録してしまいましょう。一覧から探し憎くても検索ですぐにでてきます。

  • ネットワーキングとコンテンツ配信 > VPC
  • コンピューティング > EC2

VPC = ネットワークサービス、EC2 = サーバと思っていただければ大丈夫です。AWSの基本的な機能は下記の記事でまとめていますので参考にしてみてください。

1.2.今回作成するもの

今回作成する、ネットワークやサーバの構成を下記に作成してみました。

  • ネットワークの作成
    • VPC、インターネットゲートウェイ、サブネット、ルートテーブル
  • サーバの作成
    • EC2インスタンス、セキュリティグループ、Elastic IP
今回作成するAWSの構成図
今回作成するAWSの構成図

2.ネットワークの作成

まずは、VPCからネットワークを作成します。

2.1.VPCの作成

VPCサービスを選択すると、VPCダッシュボードという画面がでてくると思いますので、左側のメニューからVIRTUAL PRIVATE CLOUD>VPCを選択します。すると、下記の画面がでてくると思いますので、右上のVPCの作成を押下します。

VPCのダッシュボード
VPCのダッシュボード

補足ですが、右上にある「New VPC Experience」というのは単に操作コンソールの見た目の違いですので、新しいものを使いたければスイッチを右側に、古いものを使いたければスイッチを左に寄せてください。

個人的には古いほうは使い慣れていて良かったのですが、どうせ今後新しい方に変わっていくと思うので、今回は新しいUIを統一して使っていきます。

VPCの作成画面では、大きく、VPCの設定とタグの作成を行います。

2.1.1.VPCの設定

名前タグ:自由につけられるので、好きな名前で問題ありません。今回は「demo-web-server-vpc」としてみます。

IPv4 CIDR ブロック:さらっと入力を求められますが、実はいきなり奥が深いです。ここでは、このVPCで利用するプライベートIPアドレスを指定します。プライベートIPアドレスとは、このVPCの中だけで、自由につかえるIPアドレスになります。IPアドレスの話は単純に見えて結構奥が深いものですので、ここでは詳しい話は割愛します。

プライベートIPアドレスも自由に設定できますが、よくわからない人はとりあえず、「172.11.0.0/16」としておきます。(※プライベートIPアドレスのルールに違反しない範囲で完全に適当な数字です)

VPCの作成画面
VPCの作成画面

IPv6 CIDR ブロック:特に指定の必要はありません。

2.1.2.タグの追加

タグ:ユーザが管理しやすいよう指定ができますが、今回は割愛します。

VPCのタグの追加
VPCのタグの追加

2.1.3.VPCの作成

右下のオレンジのボタンVPCの作成を押下します。問題がなければ下記のような画面に遷移します。

VPCが正常に作成できたところ
VPCが正常に作成できたところ

2.1.4.作成したVPCの確認

再びVPCタブを確認すると、VPCの状態がAvailableになっていることが確認できます。

作成したVPCの状態がAvailableとなっている
作成したVPCの状態がAvailableとなっている

2.1.5.VPCの「DNSホスト名を編集」を有効化

作成したVPCの中におくコンテンツが、外部に公開された時に自動的にホスト名を割り当てられるよう設定します。必須の作業ではありませんが、設定しないとサーバ公開時にいちいちIPアドレスでアクセスすることになってしまいます。

右上にある「アクション」タブから、「DNSホスト名を編集」を選択します。

「アクション」タブから、「DNSホスト名を編集」
「アクション」タブから、「DNSホスト名を編集」

編集画面で「有効化」にチェックを入れて、変更の保存を押下

「有効化」にチェックを入れて、変更の保存を押下
「有効化」にチェックを入れて、変更の保存を押下

ここまでで、VPCの作成は完了です。

2.2.インターネットゲートウェイの作成と割り当て

次は、作成したVPCからインターネットにアクセスできるように「インターネットゲートウェイ」を作成し、VPCに割り当てます。

ダッシュボードメニューから、インターネットゲートウェイを選択します。最初は何もないはずなので、右上の「インターネットゲートウェイの作成」を押下します。

インターネットゲートウェイのダッシュボード
インターネットゲートウェイのダッシュボード

2.2.1.インターネットゲートウェイの作成

どちらも好きな値を入れられますが、今回は下記のようにしてみます。

名前タグ:「demo-web-server-gw」

タグキー:「Name」、タグオプション:「demo-web-server-gw」

インターネットゲートウェイの作成画面
インターネットゲートウェイの作成画面

2.2.2.インターネットゲートウェイをVPCにアタッチ

右下の「インターネットゲートウェイの作成」を押下すると、下記のような作成完了画面に遷移します。作成したインターネットゲートウェイを、右上の「アクション>VPCにアタッチ」を選択して、VPCにアタッチします。アタッチしないとインターネットゲートウェイはなんの役にも立ちません。

インターネットゲートウェイの作成完了画面
インターネットゲートウェイの作成完了画面

VPCにアタッチする画面では、プルダウンに2.1.で作成したVPCが表示されると思いますので、選択して、インターネットゲートウェイのアタッチを押下します。

インターネットゲートウェイをVPCにアタッチ
インターネットゲートウェイをVPCにアタッチ

無事、アタッチされる思います。

アタッチ完了画面
アタッチ完了画面

2.2.3.インターネットゲートウェイのアタッチ状態を確認

先ほどのインターネットゲートウェイのダッシュボードで、作成したインターネットゲートウェイの状態が「Attached」になっていれば完了です。

インターネットゲートウェイの状態を確認
インターネットゲートウェイの状態を確認

2.3.サブネットの作成

次は、先ほど作成したVPCの中にサブネットを作成します。サブネットとは先ほどVPCの作成時に利用した「172.11.0.0/16」をさらに細かく分割したもので、それぞれのサブネットはリージョンのアベイラビリティゾーンに割り当てられます。

左側のメニューからVIRTUAL PRIVATE CLOUD>サブネットを選択します。今は何もないはずなので、画像の通り何もないはずです。「サブネットの作成」を押下します。(サブネット画面はまだ古いUIですね・・・)

サブネットのダッシュボード
サブネットのダッシュボード

2.3.1.サブネットの作成画面

必要事項を記入します。

名前タグ:VPCの時と同様に、好きな名前をつけられますが、今回は「demo-subnet-web-server-vpc」とします。

VPC:先ほど作成したばかりのVPC「demo-web-server-vpc」を選択します。アベイラビリティゾーンは東京リージョンの場合は「ap-northeast-1a」、「ap-northeast-1c」、「ap-northeast-1d」を選択できます。これも今はどれでも良いので、「ap-northeast-1a」を選択します。

IPv4 CIDR ブロック:好きな範囲を指定できますが、よくわからない人は適当に「172.11.1.0/24」とかにしておきます。これは先ほどVPCに指定した、「172.11.0.0/16」の中に含まれるネットワークを示しています。

サブネットの作成画面
サブネットの作成画面で必要事項を記入

2.3.2.サブネットの作完了画面

「作成」を押下すると下記の通り、サブネットが作成できます。

サブネットの作完了画面
サブネットの作完了画面

一覧にもきちんとAvailable状態ででてきます。

サブネットがAvailableになっている状態
サブネットがAvailableになっている状態

2.3.3.自動割り当てIPの設定

サブネットに自動割り当てIPの設定を行います、これを実施することで、EC2インスタンスを作成した後に自動でインターネットからアクセスできるパブリックIPアドレスを付与してくれます。(ただしこれでは不十分なのでこの記事ではEIPの割り当てを後で解説しています。)

アクション>自動割り当てIP設定の変更を選択します。

自動割り当てIP設定の変更
自動割り当てIP設定の変更

自動割り当てIP設定の変更画面では、IPv4の自動割り当てにチェックをつけて、「保存」を押下します。

IPv4の自動割り当てにチェック
IPv4の自動割り当てにチェック

これで、サブネットの作成は完了です。

2.4.ルートテーブルの作成

ネットワーク作成の最後にルートテーブルを編集します。ルートテーブルはVPCを作った段階で自動的に作成されているはずなので、まずはVIRTUAL PRIVATE CLOUD>ルートテーブルで作成されていることを確認しましょう。

ルートテーブルのダッシュボード

作成はされているのですが、このままでは記載が不十分です。VPC→インターネット方向の戻り通信を追加で指定する必要があります。下記を指定しましょう。

送信先:0.0.0.0/0

ターゲット:Internet Gateway

ルートの編集
ルートの編集

これで、VPCから出ていく全ての通信は先ほど割り当てたInternet Gatewayに向かうようにという指定になります。

ここまでで、今回準備するWebサーバの公開に必要なAWS上のネットワークは一通り作成完了です。次はいよいよサーバを作成しましょう。

3.Webサーバの作成

3.1.EC2インスタンスの起動

EC2メニューから、EC2ダッシュボードを開き、左側のメニューから「インスタンス」を選択し、下記の通りインスタンス画面に移動します。

インスタンスダッシュボード
インスタンスダッシュボード

インスタンス=サーバ(仮想)と考えていただければ大丈夫です。今はまだ何もない状態です。右上の「インスタンスを起動」ボタンを押下して新しいインスタンスを作成します。

余談ですが、古いUIでは「インスタンスを作成」ボタンだったのですが、新しいUIだと「インスタンスを起動」ボタンになっています。こんな感じでAWSは(AWSに限らずクラウドサービス全般ですが)短期間で仕様を好き放題変えてくるので、何事にも動じない暖かい視点でみる必要があります。。。

EC2インスタンスは、なるべくデフォルトのリソースを利用して今回は作ってしまいます。

3.1.ステップ1 AMIの選択

AMIとは「Amazon Machine Image」の略で、簡単に表現すると、色々なOSがテンプレ化されているので好きなものを選んでくださいというストアです。今回は、クイックスタートの一番上に出てくる「Amazon Linux 2 AMI (HVM), SSD Volume Type」を利用します。

AMIの選択
AMIの選択

Amazon LinuxはCentOSベースのAWS専用のLinuxです。yumなどのコマンドはデフォルトで使えるようになっています。AMIではOSであればAmazon Linuxの他にも、CentOS、UbuntuやFedoraなど色々選べます。中には課金が必要な物もあります。

3.1.ステップ2 インスタンスタイプの選択

次はインスタンスタイプの選択ですが、t2.microタイプのメモリ1Gが無料枠の対象ですので、こちらを選択します。デフォルトで選択されていると思います。

選択したら右下にある次のステップを押下します。

インスタンスタイプの選択
インスタンスタイプの選択

3.1.ステップ3 インスタンスの詳細の設定

ここでやっと先ほど作成したVPCとサブネットが活躍します。

インスタンスの数:1

ネットワーク:先ほど作成した「demo-web-server-vpc」VPCを選択します。

サブネット:先ほど作成した「demo-subnet-web-server-vpc」サブネットを選択します。

自動割り当てパブリックIP:「サブネットの設定を使用(有効)」担っているか確認します。この選択肢がない場合は、本記事の「2.4.3.自動割り当てIPの設定」を飛ばしている可能性がありますので、先に実施しましょう。

その他の設定はいじらずデフォルトにしておきます。

インスタンスの詳細の設定
インスタンスの詳細の設定

3.1.ステップ4 ストレージの追加

ストレージはデフォルトのままにします。サイズなどを変えたければ変更してください。

ストレージの追加
ストレージの追加

3.1.ステップ5 タグの追加

タグの追加は何もしなくてもいいですが、わかりやすいようにNameタグだけ「demo-web-server」とつけます。

タグの追加
タグの追加

3.1.ステップ6 セキュリティグループの設定

セキュリティグループの設定では新しいセキュリティグループを作成します。セキュリティグループとは、このサーバにどのような通信ができるかを許可するルールのグループです。

セキュリティグループの設定
セキュリティグループの設定

画像のように、下記の3つの通信を許可しましょう。

  • 作業用のPCからサーバにログインするためのSSHの通信
  • ブラウザから、インターネットアクセスをするためのHTTP通信
  • 事前の通信状態を確認するためのICMP通信

ソースに0.0.0.0/0を指定すると、文字通り全世界から通信ができてしまうので、セキュリティ警告が出ますが、今回は作ってすぐ取り壊すのでこちらを指定します。

本来はテスト用であってもテスト端末用のIPアドレスを指定した方が遥かに安全なのですが、通常個人の端末のIPはコロコロ変わってしまいますので(固定IPにする方法もありますが、)0.0.0.0/0にします。

説明には日本語を入力してしまうと最後にインスタンスの作成に失敗してしまうのでアルファベットで入力しましょう。

3.1.ステップ7 インスタンス作成の確認

セキュリティグループの警告を確認しつつ、右下の「起動」を押下します。

インスタンス作成の確認
インスタンス作成の確認

3.2.キーペアの作成と保存

起動後にさりげなく出てくるのですが、SSH用のキーペアを作成します。今回は新しいキーペアを選択して、「demo-web-server-key」と入力し、作成します。

忘れずにキーペアのダウンロードしてローカルに保存しておきましょう。これを忘れるとせっかくEC2を作っても一切SSHでアクセスできなくなってしまいます。

キーペアの作成と保存
キーペアの作成と保存

内容に問題がないと下記の通り作成中画面に移行します。

インスタンス作成中画面
インスタンス作成中画面

右下の「インスタンスを表示」を押下し、実際に実行されていれば作成は成功です

インスタンス作成完了画面
インスタンス作成完了画面

作成した「demo-web-server」の列を横にスクロールすると下記の形式で、ステータスの記述があると思います。この2つのパラメータはブラウザやSSHでサーバにアクセスするときに利用します。メモしておきましょう。(xには数字が入ります)

パブリック IPv4 DNS
ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com

パブリック IPv4 アドレス:xxx.xxx.xxx.xxx

実はこのままでもこのDNSとパブリックIPアドレスは一応機能するのですが、このままではEC2インスタンスを起動・停止するたびにDNSやIPアドレスが変わる仕様になってしまいます。

起動のたびにIPアドレスが変わるWebサイトなんてだいぶあり得ないので、固定のパブリックIPアドレスを割り当ててサーバの起動・停止をしてもIPアドレスが変わらないようにしたいと思います。

4.パブリックIPアドレスの固定

AWSで固定にできる、パブリックIPアドレスをElastic IPアドレスといいます。これは、簡単に作成できるのですが、作成しただけだと少しだけ課金されるので注意しましょう。Elastic IPアドレスを実際に利用していれば課金はされません。

普通使ってたら課金なのではと思いますが、パブリックIPアドレスは数に限りがあるので、AWSとしても使っていないなら開放して欲しいということですね。

4.1.Elastic IPアドレスの作成と割り当て

4.1.1.Elastic IPアドレスの作成

再びVPCのダッシュボードに戻りVIRTUAL PRIVATE CLOUD>Elastic IPを選択します。右上のElastic IP アドレスの割り当てを押下します。

Elastic IPダッシュボード
Elastic IPダッシュボード

デフォルトのまま特に何かを指定する必要はありません。割り当て画面から、「割り当て」を押下します。先ほどのVPCの作成時のIPアドレスは自分でIPアドレスの範囲を自由に設定できましたが、今回は全世界で唯一のものを取得する必要があるので、AWSが勝手に割り当てます。

Elastic IPの割り当て
Elastic IPの割り当て

さくっと割り振ってくれます。一応、後から忘れないように名前だけつけてしまいます。今回は「demo-web-server-e-ip」としてみました。

Elastic IPアドレスの作成の確認
Elastic IPアドレスの作成の確認

4.1.2.Elastic IPアドレスの割り当て

取得したElastic IPアドレスを先ほど作成したEC2インスタンス「demo-web-server」に割り当てます。アクション>Elastic IPアドレスの関連付けを選択します。

アクション>Elastic IPアドレスの関連付けを選択
アクション>Elastic IPアドレスの関連付けを選択

下記を指定します。

リソースタイプ:インスタンスを選択します。

インスタンス:プルダウンで「demo-web-server」を選択します。

プライベートIPアドレス:プライベートIPアドレスはEC2インスタンスを割り当てたサブネット「172.11.1.0/24」の中から自動で割り当てされていると思いますので、プルダウンから選択します。今回は「172.11.1.57」でした。

Elastic IPアドレスの割り当て
Elastic IPアドレスの割り当

指定できたら、右下の「関連付ける」を押下します。ダッシュボードで、関連づけれらたインスタンスに値が入っていれば成功です。ここまでで、AWS側の設定はすべて完了です。

5.サーバ構築

5.1.通信確認(コマンド)

それでは早速作成した、サーバにログインします。先ほどのElastic IPアドレスを指定して手元の端末から通信できるか確認しましょう。(※IPアドレスは本記事作成時に取得したもので例です、ご自身が取得したElastic IPアドレスを指定してください。)

ping 18.176.129.8 #IPアドレス指定
ping ec2-18-176-129-8.ap-northeast-1.compute.amazonaws.com #DNS指定

---成功の場合の例---
64 bytes from 18.176.129.8: icmp_seq=0 ttl=233 time=89.187 ms
64 bytes from 18.176.129.8: icmp_seq=1 ttl=233 time=209.692 ms
64 bytes from 18.176.129.8: icmp_seq=2 ttl=233 time=88.532 ms
64 bytes from 18.176.129.8: icmp_seq=3 ttl=233 time=108.809 ms

---失敗の場合の例---
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4

5.2.通信確認(SSH)

接続できたら、sshでログインしてみます。本記事の「3.2.キーペアの作成と保存」で保存したキーペアを利用して、ログインコマンドは下記になります。

「ec2-user@」というのはAmazon Linuxを利用した場合のデフォルトのユーザです、他のOSの場合はユーザが異なる場合があります。

パーミッションの警告が出た場合はsudoで実行しましょう。

sudo ssh -i "/キーペアの保存先ディレクトリ/demo-web-server-key.pem" ec2-user@ec2-18-176-129-8.ap-northeast-1.compute.amazonaws.com

---成功の場合---

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-11-1-57 ~]$ 

ログイン後のデフォルトのディレクトリ は下記です。

[ec2-user@ip-172-11-1-57 ~]$ pwd
/home/ec2-user

5.3.通信確認(ブラウザ)

さて、この状態でブラウザから、IPアドレス、もしくはDNS指定でアクセスしようとしても当然サーバを何もいじっていないので、アクセスできません。

ブラウザからはまだアクセスできない
ブラウザからはまだアクセスできない

5.4.Apacheのインストール

それぞれにログインして、webサーバを立ち上げます。yumでApacheをインストールします。

sudo yum -y install httpd

....
中略
....

インストール:
  httpd.x86_64 0:2.4.46-1.amzn2                                                                                                                   

依存性関連をインストールしました:
  apr.x86_64 0:1.6.3-5.amzn2.0.2                    apr-util.x86_64 0:1.6.1-5.amzn2.0.2            apr-util-bdb.x86_64 0:1.6.1-5.amzn2.0.2      
  generic-logos-httpd.noarch 0:18.0.0-4.amzn2       httpd-filesystem.noarch 0:2.4.46-1.amzn2       httpd-tools.x86_64 0:2.4.46-1.amzn2          
  mailcap.noarch 0:2.1.41-2.amzn2                   mod_http2.x86_64 0:1.15.14-2.amzn2            

完了しました!

Apacheを起動して、ステータスを確認します。

[ec2-user@ip-172-11-1-57 ~]$ sudo systemctl start httpd
[ec2-user@ip-172-11-1-57 ~]$ sudo systemctl status httpd

ステータスがActiveになっていればOK

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 月 2020-10-12 23:43:52 UTC; 10s ago
     Docs: man:httpd.service(8)
 Main PID: 3728 (httpd)
   Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─3728 /usr/sbin/httpd -DFOREGROUND
           ├─3729 /usr/sbin/httpd -DFOREGROUND
           ├─3730 /usr/sbin/httpd -DFOREGROUND
           ├─3731 /usr/sbin/httpd -DFOREGROUND
           ├─3732 /usr/sbin/httpd -DFOREGROUND
           └─3733 /usr/sbin/httpd -DFOREGROUND

10月 12 23:43:52 ip-172-11-1-57.ap-northeast-1.compute.internal systemd[1]: Starting The Apache HTTP Server...
10月 12 23:43:52 ip-172-11-1-57.ap-northeast-1.compute.internal systemd[1]: Started The Apache HTTP Server.
[ec2-user@ip-172-11-1-57 ~]$ 

5.5.通信確認(ブラウザ、リトライ)

アパッチのデフォルト画面が表示されれば成功です。これで無事Webサーバとして立ち上げることができました。

アパッチのデフォルト画面
アパッチのデフォルト画面

6.作成したものの削除

作成して満足したら、後で無駄な課金につながったり、悪用されないように作ったものを削除しましょう。そのまま使い続けるなら削除は不要です。

それぞれのダッシュボードから作成した順番とは逆順で下記を削除していきます。結構たくさんあります。

  • Elastic IPアドレス:関連付けを解除してから開放します。
    • 関連付けの解除:アクション>Elastic IPアドレスの関連付けの解除
    • 開放     :アクション>Elastic IPアドレスの開放
  • EC2インスタンス
    • アクション>インスタンスの設定>インスタンスの終了
  • キーペア
    • アクション>削除
  • VPC
    • アクション>VPCの削除 ※インターネットゲートウェイ、サブネットセキュリティグループ、ルートテーブルが同時に削除されます

7.まとめ

AWSで簡単にWebサーバが作成でき、また削除もできたことが体感できたかと思います。本格的に使う場合はセキュリティを考慮したり、耐障害性を考慮したり色々と工夫がですが、基本はVPCとインスタンスになります。

是非他の機能も色々と試してみてはいかがでしょうか。

サーバ・クラウドカテゴリの最新記事