EC2でEBSボリュームの追加・LAMP環境を作成する

# 概要
本書ではEC2,EBS,RDSを組み合わせてEBSボリュームの追加、LAMP環境(Amazon Linux,Apache,MySQL,PHP)を構築します。

## 0.前提条件
### a. 用意するもの
+ Teratermなどのターミナルエミュレーターをインストールしていること
+ AWSのアカウントを作成していること
* <推奨>セキュリティの観点からIAMや多要素認証を設定していること
+ <注>本書ではWindows10,Teratermを使用します

### b. 本書で構成する環境
|使用サービス|使用環境|OSなど|ソフトウェア|
|:--|:--|:--|:--|
|EC2|t2.micro|Amazon Linux 2|Apache,PHP,phpMyAdmin|
|EBS|10GB|(EC2にマウント)|-|
|RDS|db.t2.micro|MySQL 5.7.22|-|

## 1. セキュリティグループの編集

1. 「サービス」→「VPC」をクリックする。
![001..JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/16437d32-8634-4a00-5ee9-a476ff1cbecc.jpeg)

2. 左側のメニューから「セキュリティグループ」をクリックする。
![002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/a96f9de6-68d4-31b5-0093-e39dfe5442ec.jpeg)

3. 下側のメニューから「インバウンドのルール」→「ルールの編集」をクリックする。
![003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/744a2cfe-ed55-9691-74b9-2e4fb93c5602.jpeg)

4. 下図のようにセキュリティルールを編集する。
![004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/67f4c779-ef67-94d7-5852-8d9b3e5c116f.jpeg)

## 2. EC2のインスタンスを立ち上げる

1. 「サービス」→「EC2」をクリックする。
![005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/e215e0eb-c250-c0fb-3004-09cdc6576c74.jpeg)

2. 左側のメニューから「インスタンス」をクリックする。
![006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/cfc07263-6e72-7a38-5f0a-02cfdb08a19d.jpeg)

3. 上側のメニューから「インスタンスの作成」をクリックする。
![007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/fdbbea2a-c295-2fe5-331a-e2a6cdcb5e59.jpeg)

4. 「Amazon マシンイメージ(AMI)」画面から「Amazon Linux 2 AMI」を選択する。
![008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/00e7617d-fa3d-bacf-3d38-8c846e380771.jpeg)

5. 「インスタンスタイプの選択」画面から「t2.micro」を選択し「次の手順：インスタンスの詳細の設定」をクリックする。
![009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/8a37d483-4689-ccc8-40a3-3f72cc6a7342.jpeg)

6. 「インスタンスの詳細の設定」画面にて「インスタンス数」が「1」であることを確認し「次の手順：ストレージの追加」をクリックする。
![010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/0c790947-1ff0-1e8e-5a78-3b752d829a58.jpeg)

7. 「ストレージの追加」画面では何も設定せずに「次の手順：タグの追加」をクリックする。
![014.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/e3bacfbd-f96e-3080-8827-25080b5b8b6a.jpeg)

8. 「タグの追加」画面では何も設定せずに「次の手順：セキュリティグループの追加」をクリックする。
![015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/2ec6913d-b907-25c6-f2ee-140229949cf7.jpeg)

9. 「セキュリティグループの設定」画面にて「既存のセキュリティグループを選択する」を選択し「確認と作成」をクリックする。
![016.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/334a0212-8391-05f5-9ccc-fcd935bc05a1.jpeg)

10. 「インスタンス作成の確認」画面にて正しく設定されていることを確認し「起動」をクリックする。
![017.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/83e43264-5672-6c0c-1f51-b28a11cfa132.jpeg)

11. EC2のインスタンスに接続するために必要なキーペアの設定を行う。既存のキーペアを使用するか、新しいキーペアを作成するか選択し「インスタンスの作成」をクリックする。
<br>※プライベートキーファイル(.pem)は再発行することができません。プライベートキーファイルを紛失すると作成したインスタンスに接続することができないので、紛失しないように管理してください。
![018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/7c834cf5-9c46-1d80-384e-20aa2b78d8f4.jpeg)

12. 「作成ステータス」画面にて「インスタンスは現在作成中です」と表示されていることを確認する。
![019.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/bd8486db-f2d2-d5ad-00d8-1824b01883a7.jpeg)

13. 「インスタンスの表示」をクリックする。
![020.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/70d662f7-224b-0b2b-2bd1-be0a2b386506.jpeg)

14. 作成したインスタンスの状態が「running」と表示されていることを確認する。
![021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/d2e66b6c-f5ed-118c-9467-67089a122957.jpeg)

## 3. EBSを作成する

1. 「サービス」→「EC2」をクリックする。
![022.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/1cc3849a-f257-2d91-4f67-97560fee0044.jpeg)

2. 左側メニューから「ボリューム」をクリックする。
![023.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/db4d7954-e636-8c2c-6b05-f8109dae8b81.jpeg)

3. 「ボリュームの作成」をクリックする。
![024.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/ca95520f-6a0d-01e9-5f84-6fae7b87ffea.jpeg)

4. 「ボリュームの作成」画面にて下記の内容を設定し「ボリュームの作成」をクリックする。
 * ボリュームタイプ：汎用SSD(gp2)
 * サイズ(GiB)：10
 * アベイラビイリティーゾーン：(前章で作成したインスタンスと同じアベイラビリティーゾーンを選択)
![025.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/51042860-5cd8-7442-d487-96bf36e9bd4e.jpeg)

5. 「ボリュームは正常に作成されました」と表示されたことを確認する。その後、「閉じる」をクリックする。
![026.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/45589469-b2ee-e124-081e-a2ea55cdaaee.jpeg)

6. 作成したボリュームが表示されていることを確認する。
![027.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/3418f9eb-8d89-8797-1637-2d2bbdd7de9f.jpeg)

7. 本章で作成したボリュームを選択し「アクション」→「ボリュームのアタッチ」をクリックする。
![028.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/ff6410cf-5dc7-ac7f-14df-fdd6eef9a538.jpeg)

8. 「ボリュームのアタッチ」画面にて下記の内容を設定し「アタッチ」をクリックする。
 * インスタンス：(前章で作成したインスタンスを選択)
 * デバイス：/dev/sdf
![029.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/8de697a0-ddc1-1dd6-c36c-7f1decff1716.jpeg)

9. アタッチしたボリュームの状態が「in-use」と表示されていることを確認する。
![030.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/f2933b22-bd41-c4a5-ffd2-2530ce77fb93.jpeg)

## 4. データベースを作成する

1. 「サービス」→「RDS」をクリックする。
![031.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/8525c754-7cee-ac7e-4add-434f387d42d7.jpeg)

2. 左側メニューから「データベース」をクリックする。
![032.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/b983f6d3-ae96-2aa0-555f-f14929ce9d6a.jpeg)

3. 「データベースの作成」をクリックする。
![033.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/e778b223-2d01-5381-503b-f977545c716f.jpeg)

4. 「データベース作成方法を選択」から「標準作成」をクリックする。
![034.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/4b887d31-f6aa-6a9f-2613-10915a4690e0.jpeg)

5. 「エンジンのオプション」から下記の内容を選択する。
 * エンジンのタイプ： MySQL
 * バージョン：MySQL 5.7.22
![035.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/0ea4ac1b-2263-808e-952a-74a445b67b7b.jpeg)

6. 「テンプレート」から「無料利用枠」を選択する。
![036.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/e628d667-734c-d312-b955-1e5079e38ebf.jpeg)

7. 「設定」から下記の内容を入力する。
 * DBインスタンス識別子：(任意のDBインスタンス識別子を入力)
 * マスターユーザー名：(任意のユーザー名を入力)
 * マスターパスワード：(任意のパスワードを入力)
![037.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/c782fa4e-9213-1f51-6168-ee111ba46659.jpeg)

8. 「DBインスタンスサイズ」から「db.t2.micro」を選択する。
![038.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/eb3f9555-6304-9247-c26a-9eb4311efbed.jpeg)

9. 「ストレージ」から下記の内容を選択する。
 * ストレージタイプ：汎用SSD
 * ストレージ割り当て：20GiB
 * ストレージの自動スケーリング：チェックを外す
![039.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/a79a882d-faec-6044-af5a-f7ecb35015b3.jpeg)

10. 「接続」から使用するVPCを選択する。
![040.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/378f8a74-ac8d-3818-f2db-1a1ca207f1d7.jpeg)

11. 「データベース認証」から「パスワード認証」をクリックする。
![041.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/d2a7edfb-336e-2f93-17e7-b2e0757baaaa.jpeg)

12. 最下部の「データベースの作成」をクリックする。
![042.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/828fcb83-02f8-b203-6229-ff6bea710888.jpeg)

13. データベースが作成されるので待機する。
![043.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/c9dcd9f1-1119-bf5a-e602-61aa4be5e415.jpeg)

14. データベースが作成されたことを確認する。
![044.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/2b1ecf54-210b-35a5-b2c2-dd094660de71.jpeg)

## 5. 環境設定

### (a) EC2のインスタンスにログインする

1. 作成したEC2のインスタンスを選択し、「接続」をクリックする。
![045.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/1b570d8d-3976-67bb-2a00-5ae1eca311cd.jpeg)

2. 画面に表示されている「パブリックDNS」をコピーする。
![046.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/e0f2ea27-4c15-d4a0-1909-1ec729776a8a.jpeg)

3. TeraTermを起動する。

4. 「ホスト」にコピーした「パブリックDNS」を入力し、「OK」をクリックする。
![048.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/926f2884-f677-8f22-6844-e22f1d59873b.jpeg)

5. 「セキュリティ警告」画面にて「続行」をクリックする。
![049.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/f1e4cac0-f382-188c-a87a-b0fd60d1ed30.jpeg)

6. 下記の内容を入力し「OK」をクリックする。
 * ユーザー名：ec2-user
 * 秘密鍵：ダウンロードしたプライベートキーを選択
![050.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/ea229657-2912-f2dd-162d-91920a625738.jpeg)

7. インスタンスにログインできたことを確認する。
![051.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/691704c1-fe5c-6fcc-d979-2ef6a08c775b.jpeg)

### (b) インスタンスの初期設定

1. アップデート可能な全パッケージをアップデートする。

    ```
    $ sudo yum -y update
    ```

2. 永続的にSELinuxを無効化する。

    ```
    $ sudo vi /etc/selinux/config
    SELINUX=disabled
    $ sudo reboot
    ```

## 6. EBSをマウントする

1. 作成したEBSがアタッチされていることを確認する。

    ```
    $ lsblk
    NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0   8G  0 disk
    mqxvda1 202:1    0   8G  0 part /
    xvdf    202:80   0  10G  0 disk
    ```

2. 現在のマウント状態を表示し、作成したEBSがまだマウントされていないことを確認する。

    ``` 
    $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        475M     0  475M   0% /dev
    tmpfs           492M     0  492M   0% /dev/shm
    tmpfs           492M  404K  492M   1% /run
    tmpfs           492M     0  492M   0% /sys/fs/cgroup
    /dev/xvda1      8.0G  1.4G  6.6G  18% /
    tmpfs            99M     0   99M   0% /run/user/1000
    ```

3. EBSのファイルシステムを作成する。

    ```
    $ sudo mkfs -t ext4 /dev/xvdf
    ```

4. 「/mnt/data」にマウントする。

    ```
    $ sudo mkdir /mnt/data
    $ sudo mount /dev/xvdf /mnt/data
    ```

5. EBSがマウントされたことを確認する

    ```
    $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        475M     0  475M   0% /dev
    tmpfs           492M     0  492M   0% /dev/shm
    tmpfs           492M  404K  492M   1% /run
    tmpfs           492M     0  492M   0% /sys/fs/cgroup
    /dev/xvda1      8.0G  1.4G  6.6G  18% /
    tmpfs            99M     0   99M   0% /run/user/1000
    /dev/xvdf       9.8G   37M  9.2G   1% /mnt/data
    ```

6. 再起動後もEBSがマウントされるように「/etc/fstab」を編集する。

    ```
    $ sudo vi /etc/fstab
    /dev/xvdf       /mnt/data       ext4    defaults,nofail 0       0
    ```

7. 再起動後、EBSが自動的にマウントされることを確認する。

    ```
    $ sudo reboot
    (再起動後)
    $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        475M     0  475M   0% /dev
    tmpfs           492M     0  492M   0% /dev/shm
    tmpfs           492M  404K  492M   1% /run
    tmpfs           492M     0  492M   0% /sys/fs/cgroup
    /dev/xvda1      8.0G  1.4G  6.7G  18% /
    /dev/xvdf       9.8G   37M  9.2G   1% /mnt/data
    tmpfs            99M     0   99M   0% /run/user/1000
    ```

8. 追加したEBSボリュームにファイルを作成する。
 
    ```
    $ cd /mnt/data
    $ sudo vi testfile
    testtest
    $ cat testfile
    ```

## 7. Apacheのインストール

1. Apacheをインストールする

    ```
    $ sudo yum -y install httpd
    ```

2. Apacheを起動する。

    ```
    $ sudo systemctl start httpd
    ```

3. Apacheの自動起動を設定する。

    ```
    $ sudo systemctl enable httpd
    ```

4. Apacheのサービス状態を確認し、「Active: active (running)」と表示されていることを確認する。

    ```
    $ sudo systemctl status httpd
    ```

5. ブラウザを立ち上げ、インスタンスの「IPv4 パブリック IP」に移動する。Apacheのテストページが表示されていることを確認する。
![052.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/0f52ba95-9eb2-ea46-1098-a900c8a46fde.jpeg)

## 8.  PHPのインストール

1. PHP7のリポジトリを追加する。

    ```
    $ sudo wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    $ sudo rpm -ivh epel-release-latest-7.noarch.rpm
    $ sudo yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    $ sudo yum-config-manager --enable remi-php73
    ```

2. PHP7をインストールする。

    ```
    $ sudo yum install -y php73 php73-php php73-php-mysql gcc
    ```

3. PHPのシンボリックリンクを設定する。

    ```
    $ sudo ln -s /usr/bin/php73 /usr/bin/php
    ```
 
4. PHPがインストールされたことを確認する。

    ```
    $ php -v
    PHP 7.3.10 (cli) (built: Sep 25 2019 07:56:34) ( NTS )
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    ```

5. Apacheを再起動する。

    ```
    $ sudo systemctl restart httpd
    ```

6. 「/var/www/html/」にテストページを配置する。

    ```
    $ sudo vi /var/www/html/index.php
    <?php phpinfo(); ?>
    ```

7. ブラウザを立ち上げ、「index.php」が表示できることを確認する。
![055.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/a23b6a1c-24b9-65e9-c5a6-57b6d57e4601.jpeg)

## 9. RDSの設定

1. MySQLクライアントをインストールする。

    ```
    $ sudo yum -y install mysql mysql-devel
    ```

2. RDSに接続する。

    ```
    $ sudo mysql -h RDSのエンドポイント -P 3306 -u ユーザ名 -p
    ```

3. データベースやテーブルが作成できることを確認する。

    ```
    > create database testdb;
    > use testdb;
    > create table testtable ( id int, name varchar(30), score int);
    > insert into testtable values (1,'Takashi Aoyama',100), (2,'Kouhei Kimura',75);
    > select * from testtable;
    ```

4. RDSからログアウトする。

    ```
    > quit;
    ```

## 10. phpMyAdminのインストール

1. phpMyAdminの最新版をダウンロードする。

    ```
    $ sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip
    ```

2. phpMyadminを解凍する。

    ```
    $ sudo unzip phpMyAdmin-4.9.1-all-languages.zip
    ```

3. 「/var/www/html」に配置する。

    ```
    $ sudo mv phpMyAdmin-4.9.1-all-languages /var/www/html
    ```

4. フォルダ名の名称を短くする。

    ```
    $ sudo mv phpMyAdmin-4.9.1-all-languages phpmyadmin
    ```

5. ブラウザを立ち上げ、「IPv4パブリックIP/phpmyadmin/index.php」に移動する。phpMyAdminが表示されることを確認する。
![056.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/13a5d56b-9e6f-353d-0243-fae6656ba415.jpeg)

6. ターミナル画面に戻り、phpMyAdminの設定ファイルを編集する。

    ```
    $ sudo mv config.sample.inc.php config.inc.php
    $ sudo vi config.inc.php
    $cfg['Servers'][$i]['host'] = 'RDSのエンドポイント';
    ```

7. Apacheを再起動する。

    ```
    $ sudo systemctl restart httpd
    ```

8. ブラウザを再度立ち上げ、phpMyAdminに下記の内容を入力し「実行」をクリックする。
 * ユーザー名 : MYSQLのユーザー名
 * パスワード : MySQLのパスワード
 
![057.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/f6b4545d-9de0-49cd-9959-db9c8eb64c90.jpeg)
9. phpMyAdminにログインできることを確認する。
![058.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/bcdb3fd6-829d-b958-085a-47afbd57355f.jpeg)
10. 作成したデータベース・テーブルが表示できることを確認する。
![059.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/843b881a-8cbe-d154-d6f1-6c38d17a9023.jpeg)


## 最後に
EBSを使用して追加ボリュームの作成、RDSを組み合わせてクラウド上でLAMP環境を作成することができます。これによりクラウド上でLAMP環境を利用したOSSの検証やPHPプログラミングなどができます。