【AWS】基本的なブログサービス(シングル構成)を構築してみた。

# はじめに
この記事はインフラ初心者の私がAWS Cloudtechを通して学んだことを
記録＆アウトプットするための備忘録です。

# ゴール
自宅PCからインターネット経由でWord PressがインストールされたEC2にアクセスしてブログ閲覧ができるようにする。

# 目的
・RDSの作成方法の理解
・WordPressの構築方法の理解
・基本的なシングル構築方法の理解

# 環境
・Windows10
・TeraTerm Version 4.105
・Word Press Version 5.7

# 環境構築
今回作成する構成は以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/64a66c8c-f552-1e72-a660-519a0dafb324.png)

# 手順

## VPC作成からEC2ログインまで
ざっくりとした手順(詳細手順を確認したい方は以前書いた[こちら](https://qiita.com/hargen888/items/f5011ee8955215351ae4)の記事を参照してください)

①VPCの作成
②AZ1-aにてPublicSubnet、PrivateSubnetを作成
③PublicSubnet内にEC2作成、セキュリティグループの設定(Web-SG-1)
④WebServer-1にログインするためにインターネットゲートウェイを作成
⑤VPCにアタッチ
⑥ルートテーブル編集(宛先がローカル以外の通信は全てIGWに向けるように設定する)
⑦セキュリティグループの確認(ssh接続をするため22番ポートが空いているかを確認)
⑧ssh接続

補足
※対象のインスタンスを選択し、[接続]→EC2 InstanceConnectを選択し、[接続]クリックすると
ブラウザ上でssh接続ができる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/e9eca060-7d6f-4b03-43e8-d412fbb2b3f7.png)

■現在の構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/2e77b079-8404-c935-1194-39b6af29eb8d.png)

## RDSの作成

### Subnet Groupの作成
RDSを作成するためにはSubnet Groupを作成する必要がある。
※シングル構成であろうとsubnetグループが存在していないとRDSは構築できない。
※subnetグループを作成するためには2つ以上のsubnetをグルーピングかつsubnetは複数のAZにまたがっている必要がある。

①AZ1cにPublic SubnetとPrivate Subnetを作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/bd2d39af-82de-abbb-7a6f-1c38e5196a45.png)

②サービスからRDSを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/79b960ee-dd98-114b-dc00-2748b246f327.png)

③左ペインから「サブネットグループ」を選択し、[DBサブネットグループを作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/198d37b3-7e2c-dee4-4eea-51baf1700145.png)

④設定を入力して[作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/f5f3d115-3ca2-cb9d-df3b-9e543b136dcf.png)

| 項目 | 概要 |
|:-:|:-:|
| VPC | Subnet Groupを作成するVPCを選択 |
| アベイラビリティーゾーン | Subnet Groupを作成するAZを選択 |
| サブネット | Subnet Groupに含めるSubnetを選択 |

### データベースの作成
①左ペインをからデータベースを選択して[データベースの作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/854477d7-9387-d1a9-7d0a-a4109a9a773a.png)

②各種設定を入力し、[データベースの作成]をクリック

■データベースの作成
今回は標準作成を選択。

■エンジンのオプション
今回はMySQLを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/15d90a18-bc94-c7dc-3e9c-bc8066d5ab28.png)

■テンプレート
今回は無料利用枠を選択

■設定
各種入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/77619bca-3584-1768-02b0-f0a0f8c9141c.png)

■DB設定
今回はバースト可能クラス：db.t2.microを選択

■ストレージ
今回はデフォルト設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/2e89fa1c-80e3-7dd2-15b0-3c24a11fff13.png)

■可用性と耐久性
今回は「スタンバイインスタンスを作成しないでください」を選択

■接続
今回は以下の設定を入力。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/4a745413-37b8-080d-188b-07146bc50cf3.png)

■追加設定-1
データベース名を入力し、その他はデフォルト設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/d8a6b741-5f37-3763-335f-88768d66bfd4.png)

■追加設定-2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/80aa0f86-8365-f767-ae48-bc5263de0b16.png)

③作成したDBのステータスが利用可能になっていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/f9e85955-f431-b6ff-3b12-14f2bd5fe5b7.png)

④作成したSG(RDS-SG-1)のインバウンドルールを編集する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/dbef17d6-56a0-f6f3-11e9-1eae55b76b7c.png)

インバウンドルールのソースに「Web-SG-1」を指定して、[ルールを保存]をクリック。
こうすることでWeb-SG-1に所属しているもの(今回ではWebServer1)からしかアクセスできなくなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/8ff82279-f61b-a01d-d2db-a65ac0971eb9.png)

■現在の構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/05f82860-409b-e193-c0c8-a7f6ef4cfb7f.png)

## WordPressのインストール
①ec2-userからrootに権限切り替え
②yum -y updateでパッケージを最新の状態にアップデートする

```
yum -y update 
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/1ef4ca33-1e00-ac25-2996-f62f5a4dce68.png)


③Apache,MySQL,PHP等必要なものをインストールする。

```
amazon-linux-extras install php7.2 -y
```

```
yum -y install mysql httpd php-mbstring php-xml gd php-gd
```
④Apacheのサービスを再起動後も自動的に起動する用に設定する。

```
systemctl enable httpd.service
```
⑤Apacheのサービスを起動する。

```
systemctl start httpd.service
```
⑥(念の為、)Apacheサービスの起動状態を確認する。

```
systemctl status httpd.service
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/7a8384f5-2ef4-ad33-ffa3-b3333e015987.png)

⑦WordPressをダウンロードする
以下のコマンドでWordPressをダウンロードする

```
wget http://ja.wordpress.org/latest-ja.tar.gz ~/
```

WordPressのサイト上で以下の操作を行うのと同じみたいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/3d2ce505-7edd-60b0-74ed-3780bb185ed1.png)

llでWordPressの最新ファイルが存在することを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/0d49b494-f090-aa89-b6ce-257c833c5681.png)

※wgetコマンドは指定したURLに存在するファイルをダウンロードするコマンド

■参考URL
[wgetコマンド](http://www.itsenka.com/contents/development/unix-linux/wget.html)

⑧圧縮ファイルを展開する
以下のコマンドで圧縮ファイルを展開する。

```
tar zxvf ~/latest-ja.tar.gz
```
※-zオプションは無くても展開できました。

■tarコマンドのオプション

| オプション | 説明 |
|:-:|:-:|
| -v（--verbose） | アーカイブ結果を表示する。 |
| -x（--extract） | アーカイブされたファイルを解凍し展開・復元を行う |
| -f（--file=ARCHIVE） | アーカイブファイル名を指定する |
| -z | gzip方式の圧縮または展開を同時に行う(省略可能っぽい) |

※tarコマンドはアーカイブを作成/展開するコマンド

■参考URL
[tarコマンド](https://eng-entrance.com/linux-command-tar)

⑨展開したwordpressディレクトリをドキュメントルートにコピーする
llで確認するとwordpressディレクトリができている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/8b358f1a-8c25-affd-df22-64669885456d.png)

これを以下のコマンドでドキュメントルートにコピーする。

```
cp -r ~/wordpress/* /var/www/html/
```
⑩所有者とグループを変更する
以下のコマンドで/var/www/htmlの所有者とグループをapacheに変更する

```
chown apache:apache -R /var/www/html
```
※chownはファイルやディレクトリの所有者を変更するためのコマンド
■参考URL
[chownコマンド](https://eng-entrance.com/linux-command-chown)

## ブラウザでWordpressの確認
①インスタンスのパブリックIPアドレスをアドレスバーに貼り付けてEnterを押す

WordPressの初期設定ページが表示されることを確認し、[さあ、始めましょう]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/3ef438ad-5368-b9d9-f3d2-37eb8c6c3fec.png)

②赤枠箇所を入力し、[送信]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/64d776eb-3a37-7301-09c0-cd868afb2222.png)

※データベースのホスト名はRDSのエンドポイントの箇所からコピー&ペースト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/efcc7c02-01e8-a72a-eefd-71b897bd132e.png)

③[インストール実行]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/951f25a9-9ef3-42aa-ef63-3102c4b4295d.png)

④各種項目を設定し、[WordPressをインストール]を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/a5abc82a-534f-e088-6fad-de22693ef6fc.png)

⑤インストール後、WordPressにログインできることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/bad1f0c9-ece5-182c-3b6c-cae3dc1fe2b6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/df1a9cdb-5244-ee8d-fe93-3c0ecd8fbdf0.png)

■現在の構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086543/64a66c8c-f552-1e72-a660-519a0dafb324.png)

# 終わりに
今回は基本的なシングル構成の構築方法について学びました。
今回のハンズオンを通してRDSの作成やWordPressの構築といったことができるようになりました。
以前学んだVPCやEC2の知識が身についているように実感できたのが嬉しかったです。

講座の内容以外にも何でこうするのか？や各コマンドの詳細を調べることで理解が深まりました。
疑問に思っていたことが解決することで「勉強楽しい！」と思えるようになりました。

次は冗長構成での環境構築にも挑戦します。

この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com

# おまけ：ドキュメントルートとは？
今回、なぜ/var/www/htmlに/wordpress配下のファイルをすべてコピーする必要があるのかがわからなかったため調べてみました。

調べた結果、以下のように理解しました。

| 単語 | 説明 | 設定ファイルの格納場所 |
|:-:|:-:|:-:|
| ドキュメントルート | Webサーバで公開するコンテンツを配置するディレクトリ。 | /etc/httpd/conf/httpd.conf |

・ドキュメントルートでApacheがどこのディレクトリに置かれたファイルを Webサーバとして公開するかを決めており、対象のディレクトリが"/var/www/html"だったと理解。
・CentOSのhttpdではデフォルトのドキュメントルートとして"/var/www/html"が設定されている。

■参考URL
・[今さら聞けない！Webサーバーの仕組みと構築方法](https://eng-entrance.com/web-server-mechanism)
・[DocumentRootディレクティブ](https://www.javadrive.jp/apache/ini/index9.html)