AWSを使ってサービスを構築しよう Webサーバー構築まで

## 初めに
​
この記事はアドベントカレンダー10日目の記事です。
ネットワークの基礎知識をつけたくて書きました。
​
## 対象者
​
AWSのアカウント登録が終わってる人
AWSでサーバー立てたいけどよくわからない人
​
## 構築するもの
​
ブラウザ上でIPアドレスを入力してApacheのページの表示が表示されるまで
​
## 環境
​
macOS Big Sur バージョン11.0.1
​
## 主な用語一覧
​
* vpc（Virtul Private Cloud) aws上に仮想ネットワークを作成できるサービス
* サブネット vpcの中で区切られたネットワーク(publicとprivateに別れる)
* EC2 Aws上の仮想サーバー
* AMI OSのイメージ。サーバーのテンプレ
* インスタンス EC2サーバーのスペックを定義したもの
* ストレージ サーバーのデータの保存場所
* SSH 離れた場所にあるサーバーに安全にログインする仕組み
* IPアドレス インターネット上の住所を表す。IPアドレスはネットワーク部とホスト部に分かれている。
* ルーティング 宛先IPアドレスのコンピュータまでパケットを届けるためのルール
​
## サーバー構築大まかな手順
​
1. VPCの作成
2. サブネットの作成(今回はpublicのみ)
3. ルーティングの設定
4. 作成したVPC(仮想ネットワーク)の中にEC2(仮想サーバーの作成)の作成
5. SSHでサーバにアクセス
6. サーバーにApacheをインストール
7. httpアクセスできるようにポート番号80番を開放 以下で詳しく説明
​
### VPCの作成
​
![](https://i.imgur.com/NS38Dch.png)
アカウント名の右にあるリージョンを東京または大阪にします。この記事は大阪でやってます。
ページ上部にある検索欄にVPCと入力し検索すると以下の画面になるのでVPCをクリック
​
![](https://i.imgur.com/qe7kvM3.png)
​
次のページに飛んだら右上にあるVPCの作成をクリックします
​
![](https://i.imgur.com/XWPgg9a.png)
​
ここではVPCの設定を行います。名前タグの所は自由に入れて大丈夫です。入力したらVPCを作成をクリックします。
* IPv4 CIDRブロック　VPC全体のIPアドレスの範囲を指定する場所。/16これは先頭から16ビットまでがネットワーク部なのを表しています。10.0.0.0なのでネットワーク部が10.0ホスト部が0.0となっています。
* IPv6 CIDEブロック　amazonが用意しているIPv6用を紐づけるためのもの(今回は使用しない)
​
![](https://i.imgur.com/SGP8dec.png)
​
下記のようになってれば大丈夫です。
![](https://i.imgur.com/9vsY5x4.png)
​
### サブネットの作成
​
検索欄でサブネットと入力するとこのようなページに飛ぶので右上のサブネットを作成をクリックします。
![](https://i.imgur.com/m1nvYpu.png)
下記のように入力してサブネットを作成します。
![](https://i.imgur.com/SacpqKq.png)
​
### ルーティングの設定
​
* ルーティングとは IPアドレスがどこにあるのか教える作業。具体的に言えば目的のIPアドレスがVPCの中にあるのかVPCの外にあるのかを識別させる。
​
* インターネットゲートウェイとは プライベートIPアドレスとグローバルIPアドレスを1対１変換する機能(NAT)を持つもの
​
* ルートテーブルとは ルーティングするための情報が記載されたテーブル
​
* * *
​
![](https://i.imgur.com/qBOuJFC.png)
​
1. インターネットゲートウェイの作成 インターネットゲートウェイの作成をクリックします。 ![](https://i.imgur.com/INLZRId.png) 下記のように設定しインターネットゲートウェイを作成します。 ![](https://i.imgur.com/CQNjBXD.png) 現在状態がDetachedなので作成したインターネットゲートウェイにチェックマークを入れ選択した後アクションからVPCにアタッチを選択します。 ![](https://i.imgur.com/739nsJs.png) 先ほど作ったHello-aws-vpcにアタッチします。 ![](https://i.imgur.com/voFsu5M.png) 上手くいけばこんな感じになります。 ![](https://i.imgur.com/Uuv0wjW.png)
​
2. ルートテーブルの作成 左上のルートテーブルの作成をクリックします ![](https://i.imgur.com/c7r3gst.png) Hello-aws-vpcを選択し作成します ![](https://i.imgur.com/DPMdc7i.png) 画像左下にあるサブネットに関連付けの編集をクリック ![](https://i.imgur.com/Knj4HiM.png) publicサブネットを選び保存します ![](https://i.imgur.com/Y8iDFR2.png) ルートの編集をクリックします ![](https://i.imgur.com/iWMceY6.png) 目的のIPアドレスが0.0.0.0/0(10.0.0.0/16の範囲に含まれない場合)インターネットゲートウェイに向かうようにしてルートの保存を選 ![](https://i.imgur.com/pwQ2Jtu.png)
​
### 仮想サーバーの設置
​
publicサブネットの中に仮想サーバーを設置します。 インスタンスの起動をクリック ![](https://i.imgur.com/VrPuMKb.png) Amazon Linux 2 AMIを選択 ![](https://i.imgur.com/1KPcJkX.png) インスタンスタイプの選択はそのままで次のステップへ行くとインスタンスの設定になるので以下の項目だけ入力して後はデフォルトで次に行く、ストレージの追加もデフォルト設定のままでタグの追加へ ![](https://i.imgur.com/YiI4rre.png) ![](https://i.imgur.com/Jo1W3yv.png) 以下のように入力して画像右下の確認と作成をクリック、入力内容に間違いがなければ起動ボタンをクリックします。 ![](https://i.imgur.com/d2njzge.png) すると以下のような画面になるので画像のように入力しキーペアのダウンロードをクリック。このキーペアはサーバーにSSHでログインする際に使用します。ダウンロードできたらインスタンスの作成をクリック ![](https://i.imgur.com/xw0qQDH.png) ↓数分するとインスタンスが実行される ![](https://i.imgur.com/zd8qB2f.png)
​
### SSHで仮想サーバーにログイン
​
作成したインスタンスの画面に行きパブリックIPv4アドレスの部分をコピー。画像の場合だと13.208.181.98
![](https://i.imgur.com/0KRo6dw.png)
​
* * *
​
インスタンス作成時にダウンロードした秘密鍵の読み書き権限を厳しくするためにターミナルを開いて以下のコマンドで打ちます
`chmod 600 Downloads/Hello-aws-sshkey.pem`
​
SSHでログインします。@から後ろには各自のパブリックIPv4アドレスを入力
 `ssh -i Downloads/Hello-aws-sshkey.pem ec2-user@13.208.181.98`
以下のようになれば成功
​
```
ssh -i Downloads/Hello-aws-sshkey.pem ec2-user@13.208.181.98 The authenticity of host '13.208.181.98 (13.208.181.98)' can't be established. ECDSA key fingerprint is SHA256:zcVM2KoNVAjGjQ4LfWB+gaCnp6SCmUb8ptcVeZpRn3E. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '13.208.181.98' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ No packages needed for security; 2 packages available Run "sudo yum update" to apply all updates. [ec2-user@ip-10-0-10-10 ~]$
```
​
## Apacheのインストール
​
仮想サーバーにログインできたら以下のことを行います
yumのアップデート
`sudo yum update -y`
Apacheのインストール
`sudo yum -y install httpd`
Apache起動
`sudo systemctl start httpd.service`
サーバー再起動時に自動的にApacheを起動させる
`sudo systemctl enable httpd.service`
​
## ファイアウォールの設定
​
* ファイアウォールとは？ 許可された通信だけ通しそれ以外を通さないようにする機能 サーバーに対してSSHでログインできたのはデフォルトでポート番号22が解放されていたため。現状ブラウザにパブリックIPv4アドレスを入力しても下の画像のようにページは表示されない。これはhttp通信に必要なポート番号80番が解放されていないためである。ポート番号80の開放を行います。 ![](https://i.imgur.com/5CRz6cn.png)
​
* * *
​
インスタンスを選択しセキュリティからセキュリティグループをクリック
![](https://i.imgur.com/7U1vzss.png)
インバウンドルールの編集をします
![](https://i.imgur.com/jfy1fIa.png)
下のように設定しルールを保存します。これでポート番号80が解放されました。
![](https://i.imgur.com/EB4s3Gm.png)
​
* * *
​
![](https://i.imgur.com/65CQweX.png)
​
ブラウザ上に先程のIPv4アドレスを入力してApacheのページがでれば成功です。目標達成できました。AWSの無料枠を使い切っている場合EC2インスタンスは微量のお金(0.03$くらい）がかかるので必要なければ停止しておきましょう。
​
## 感想
​
座学で勉強した際に眠くて頭に入ってこなかったネットワーク用語がすんなりと理解できたので満足です。DNSの登録とPrivateサブネットのDBサーバーの構築まではやっているので時間があったら続きを書きたいです。