AWSでウェブアプリケーション環境構築：①EC2インスタンスにwebサーバを構築

# はじめに
これはシリーズ記事の中の1つです。

[AWSでウェブアプリケーション環境構築：⓪概要](https://qiita.com/minato-naka/items/ddb5f5301f9f590cdcbf)
[AWSでウェブアプリケーション環境構築：①EC2インスタンスにwebサーバを構築](https://qiita.com/minato-naka/items/c21e4d53db7a720f8fdd)
**↑↑↑現在の記事↑↑↑**
[AWSでウェブアプリケーション環境構築：②RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成を構築](https://qiita.com/minato-naka/items/03f9dbd09eb3919a501f)
[AWSでウェブアプリケーション環境構築：③ロードバランサーを作成し、webサーバを冗長化する](https://qiita.com/minato-naka/items/396e2a25ec9a94840a67)
[AWSでウェブアプリケーション環境構築：④ElastiCacheのRedisを作成し、セッション共有可能にする](https://qiita.com/minato-naka/items/76cd5f660d987d34f7be)
[AWSでウェブアプリケーション環境構築：⑤webサーバをプライベートサブネットに配置し、メンテナンス用踏み台サーバを構築](https://qiita.com/minato-naka/items/406c2f247c0d29a93665)
[AWSでウェブアプリケーション環境構築：⑥Route53を利用して独自ドメインでアクセス可能にする](https://qiita.com/minato-naka/items/6f29694c1540f04dedb2)
[AWSでウェブアプリケーション環境構築：⑦ACMを利用してHTTPS通信可能にする](https://qiita.com/minato-naka/items/1a4f03e85857b8f61c4f)
[AWSでウェブアプリケーション環境構築：⑧サーバ負荷に応じてwebサーバがオートスケーリングする仕組みを構築](https://qiita.com/minato-naka/items/c0fab5d9fbb1cce68ac9)

# 前回まで
前回は、全体の概要を説明しました。

# 今回構築する環境
![1.png](https://qiita-image-store.s3.amazonaws.com/0/297693/e54c8833-155d-dccc-5d5b-0f389122f4de.png)
EC2インスタンスにApacheをインストールし、
ブラウザからアクセスして動作確認するところまで行います。

# ネットワーク構築
## VPC作成
まずは、VPCを作成します。
サーバ構成図にあるこれです。
![aws laravelサンプル-ページ6 (2).png](https://qiita-image-store.s3.amazonaws.com/0/297693/5f53fb46-8843-5924-846d-82baf56ac77b.png)


今回は、オハイオリージョンを利用します。
マネジメントコンソールの[VPC]のページの
サイドメニューの[VPC]をクリックし、
上部にある[Create VPC]ボタンをクリック。

下記のように設定します。
![screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-09_52_09.png](https://qiita-image-store.s3.amazonaws.com/0/297693/7fc9e38b-58ee-719f-fa44-081d4a500a1c.png)

|項目|設定値|説明|
|:------------------------|:-------------------------|:-------------------------|
|Name tag|laravel-sample-vpc |このVPCの名前。<br>自分が管理するための任意の名前を付ける。|
|IPv4 CIDR block|10.0.0.0/16|IPv4 CIDRブロック。<br>実際は、必要なネットワークの大きさを考慮して決定する。|
|IPv6 CIDR block|No IPv6 CIDR Block|IPv6のCIDRブロックを使用するかどうか。|
|Tenancy|Default|このVPCが作られるサーバ（ハードウェア）をこのVPCだけで専有するかどうか。<br>Dedicatedにすれば専有する。|

## インターネットゲートウェイ作成・アタッチ
インターネットゲートウェイを作成します。
サーバ構成図にあるこれです。
![aws laravelサンプル-ページ6.png](https://qiita-image-store.s3.amazonaws.com/0/297693/bc653107-cf26-ea81-4133-df7784e6dc58.png)

このインターネットゲートウェイを作成し
VPCにアタッチしなければ、
このVPC内のサーバはインターネットにアクセスすることができません。

### インターネットゲートウェイを作成
[VPC]のページの
サイドメニューの[インターネットゲートウェイ]をクリックし、
上部にある[インターネットゲートウェイの作成]ボタンをクリック。

下記のように設定します。
![screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-10_27_55.png](https://qiita-image-store.s3.amazonaws.com/0/297693/cef0644f-d383-386c-745e-a0a01b98ec55.png)

|項目|設定値|説明|
|:------------------------|:-------------------------|:-------------------------|
|Name タグ|laravel-sample-igw|このインターネットゲートウェイの名前。<br>自分が管理するための任意の名前を付ける。|

### インターネットゲートウェイをVPCにアタッチ
インターネットゲートウェイの一覧で、
先ほど作成したインターネットゲートウェイをチェックし、
ページ上部の[アクション]→[VPCにアタッチ]をクリック。

下記のように、先ほど作成した[laravel-sample-vpc]のVPCを選択してアタッチする。
![screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-10_34_37.png](https://qiita-image-store.s3.amazonaws.com/0/297693/0c137ec3-13e1-84e9-2428-e15406276610.png)

## サブネット作成
publicサブネットを作成します。
サーバ構成図にあるこれです。
![aws laravelサンプル-ページ6 (1).png](https://qiita-image-store.s3.amazonaws.com/0/297693/f2157f41-0b0f-0194-d010-bfed4b1dcde5.png)

[VPC]のページの
サイドメニューの[サブネット]をクリックし、
上部にある[サブネットの作成]ボタンをクリック。

下記のように設定します。
![screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-16_09_08.png](https://qiita-image-store.s3.amazonaws.com/0/297693/e354a907-b3c5-7dcb-a870-98f5574c78b5.png)


|項目|設定値|説明|
|:------------------------|:-------------------------|:-------------------------|
|名前タグ|laravel-sample-subnet-public-a|このサブネットの名前。<br>自分が管理するための任意の名前を付ける。|
|VPC|{先ほど作成した[laravel-sample-vpc]のVPC}|このサブネットが作られるVPC。|
|アベイラビリティーゾーン|us-east-2a|このサブネットが作られるアベイラビリティーゾーン。|
|IPv4 CIDR ブロック|10.0.0.0/24|IPv4 CIDRブロック。<br>実際は、必要なネットワークの大きさを考慮して決定する。|

## ルートテーブル作成・サブネットに適用
ルートテーブルを作成します。
サーバ構成図にあるこれです。
![aws laravelサンプル-ページ6 (3).png](https://qiita-image-store.s3.amazonaws.com/0/297693/dadef70b-039d-a2db-4b91-b6a64d0102f5.png)

インターネットゲートウェイにルーティングする設定のルートテーブルを作成し、
それをサブネットに関連付けることで
サブネット内のサーバはインターネットに接続できるようになります。

### ルートテーブルの作成
[VPC]のページの
サイドメニューの[ルートテーブル]をクリックし、
上部にある[Create route table]ボタンをクリック。

下記のように設定します。
![screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-10_51_20.png](https://qiita-image-store.s3.amazonaws.com/0/297693/e3d9c350-4bc2-6a2c-2077-70e1e97a5546.png)

|項目|設定値|説明|
|:------------------------|:-------------------------|:-------------------------|
|Name tag|laravel-sample-route-table-public|このルートテーブルの名前。<br>自分が管理するための任意の名前を付ける。|
|VPC|{先ほど作成した[laravel-sample-vpc]のVPC}|このルートテーブルが作られるVPC。|

### ルーティングの変更
先ほど作成したルートテーブルはデフォルトのルーティング設定になっているため、
ルーティングを追加します。

ルートテーブルの一覧で先ほど作成したルートテーブルをチェックし、
ページ上部の[アクション]→[Edit routes]をクリック。

下記のように、
[Destination] = [0.0.0.0/0]
[Target] = {先ほど作成した[laravel-sample-igw]のインターネットゲートウェイ}
のルーティングを追加する。
![screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-10_56_41.png](https://qiita-image-store.s3.amazonaws.com/0/297693/c05b6382-a124-7184-15ea-2bd864acb476.png)

### ルートテーブルをサブネットに関連付け
サブネットの一覧で先ほど作成した[laravel-sample-subnet-public-a]をチェックし、
ページ上部の[アクション]→[ルートテーブルの変更]をクリック。

[ルートテーブルID]に先ほど作成した[laravel-sample-route-table-public]のルートテーブルを設定する。
![screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-24-11_02_37.png](https://qiita-image-store.s3.amazonaws.com/0/297693/310e7723-c7e0-ab36-c485-8aef541c09f8.png)

これで、このサブネット内のサーバはインターネットに接続できる状態になりました。


# webサーバ構築
EC2インスタンスの作成、
EC2インスタンスにApacheをインストール、
webサーバにブラウザからアクセスし動作確認
まで行います。

## EC2インスタンス作成
まずは、EC2インスタンスを作成します。
サーバ構成図にあるこれです。
![aws laravelサンプル-ページ6 (4).png](https://qiita-image-store.s3.amazonaws.com/0/297693/c66ed003-5c9a-801d-8836-7ee828d052d7.png)

マネジメントコンソールの[EC2]のページの
サイドメニューの[インスタンス]をクリックし、
上部にある[インスタンスの作成]ボタンをクリック。

### AMI の選択
サーバのOSを選択します。
今回は、Amazon Linux 2 AMIを選択します。
<img width="960" alt="screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_12_40.png" src="https://qiita-image-store.s3.amazonaws.com/0/297693/5ca97eb9-c073-2599-b125-c8de8f4467f3.png">

### インスタンスタイプの選択
インスタンスのスペックを選択します。
今回はt2.microを選択します。
<img width="960" alt="screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_16_11.png" src="https://qiita-image-store.s3.amazonaws.com/0/297693/2d7ad58a-cfd2-10c0-e9e4-148762e581a8.png">

### インスタンスの設定
インスタンスの詳細設定です。
下記のように設定します。
![screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_19_27.png](https://qiita-image-store.s3.amazonaws.com/0/297693/75fa99aa-0bba-59d0-3114-579d790ae784.png)

下記の3項目だけ間違えないように設定し、
それ以外はデフォルト設定で問題ないです。

|項目|設定値|説明|
|:------------------------|:-------------------------|:-------------------------|
|ネットワーク|{先ほど作成した[laravel-sample-vpc]のVPC}|このインスタンスが作られるVPC。|
|サブネット|{先ほど作成した[laravel-sample-subnet-public-a]のサブネット}|このインスタンスが作られるサブネット。|
|自動割り当てパブリック IP|有効|パブリックIPを利用するかどうか。|

### ストレージの追加
インスタンスのストレージを設定します。
実際は、サーバの用途に合わせてサイズやボリュームタイプを検討しますが、
今回はデフォルト設定のままで問題ないです。
![screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_24_53.png](https://qiita-image-store.s3.amazonaws.com/0/297693/e2024df0-ab14-b06f-78c6-d179bce34789.png)

### タグの追加
インスタンスを管理するために、
任意のタグ、値を設定します。
今回は下記のようにNameタグ[laravel-sample-ec2-web-a]だけ追加します。
![screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_27_41.png](https://qiita-image-store.s3.amazonaws.com/0/297693/b9c678ab-9a3f-3184-814a-97c1503282c8.png)

### セキュリティグループの設定
セキュリティグループとは、ファイアウォールのことで、
このサーバに対して
「どこからアクセス可能か」
「どのポートがアクセス可能か」
を設定します。
※詳しくは、もっといろいろ設定できます。

サーバ構成図にあるこれです。
![aws laravelサンプル-ページ6 (5).png](https://qiita-image-store.s3.amazonaws.com/0/297693/68594eaf-c89f-5627-7744-436db11f1bb5.png)

[セキュリティグループの割り当て]で[新しいセキュリティグループを作成する]を選択し、
下記のように設定します。
<img width="960" alt="screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_36_08.png" src="https://qiita-image-store.s3.amazonaws.com/0/297693/1d8845c5-f76b-4807-0eed-47e7e925cb1b.png">

自分の場所のIPからSSHとHTTPでの通信を許可します。

### 確認
これまでの設定内容を確認し、[起動]ボタンをクリックします。
インスタンスにSSH接続するために必要なキーペアの設定画面が表示されるので、
下記のように設定します。
![screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_42_39.png](https://qiita-image-store.s3.amazonaws.com/0/297693/ff206f86-014c-9b4c-69bf-bff0d0a4ee3a.png)

[キーペアのダウンロード]をクリックします。
ダウンロードしたキーファイルは大切に保管してください。

最後に[インスタンスの作成]ボタンをクリックしたら、
EC2インスタンスが作成されます。

インスタンスの一覧で、
作成したインスタンスの[インスタンスの状態]が[running]になっていれば
EC2インスタンスが正常に起動しています。
<img width="960" alt="screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-01-24-11_48_31.png" src="https://qiita-image-store.s3.amazonaws.com/0/297693/27093278-68f7-d1df-a6f1-410dc291065e.png">

## EC2インスタンスにApacheをインストール
先ほど作成したEC2インスタンスにApacheをインストールします。
まずはインスタンスにSSH接続します。

RLoginやPuTTYなどのターミナルソフトを利用し、
下記の3つを設定してSSH接続します。

|項目|設定値|説明|
|:------------------------|:-------------------------|:-------------------------|
|接続先ホスト|{先ほど作成した[laravel-sample-ec2-web-a]のEC2インスタンスのパブリックIP}|EC2のページでさっき作ったインスタンスのパブリックIPを確認する。|
|ログインユーザ名|ec2-user|Amazon Linux 2 AMIで作成したインスタンスはデフォルトで[ec2-user]というユーザが作成される。|
|SSH認証鍵|{先ほど作成した[laravel-sample-key-pair.pem]の鍵ファイル}|EC2作成最後のステップでダウンロードした鍵ファイル。|

SSH接続できたら、
下記のコマンドを実行します。

```shell
#yumアップデート
sudo yum update -y
#Apacheインストール
sudo yum install -y httpd
#Apache起動
sudo systemctl start httpd
#Apacheを自動起動する設定
sudo chkconfig httpd on
```

ブラウザのアドレスバーにEC2インスタンスのパブリックIPを入力し、
下記のページが表示されれば
webサーバの構築完了です。
![screencapture-18-191-154-46-2019-01-24-12_12_42.png](https://qiita-image-store.s3.amazonaws.com/0/297693/12874ee0-7e7c-2902-eea9-e5b5a9e0c7e8.png)

# 次回
[AWSでウェブアプリケーション環境構築：②RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成を構築](https://qiita.com/minato-naka/items/03f9dbd09eb3919a501f)