【AWS】EC2とRDSを組み合わせてWordPressを構築する。
はじめに
久々にAWSの記事となりますが、EC2とRDSを組み合わせてWordPressを構築する手順をアウトプットしていきたいと思います。
今回の構成
前提条件
- AWSに登録済み
- IAMにて作業用ユーザー作成済み
- 東京リージョン内にて作業を実施
- OS/データベースは以下を使用
※今回の記事は本構成を構築することだけにフォーカスしております。
運用面やセキュリティ面は考慮しておりませんので、ご注意下さい。
作業の流れ
構築手順
①仮想ネットワーク作成
②EC2インスタンス作成
③RDSインスタンス作成
④ELB作成
⑤WordPress初期設定
⑥AMI作成
⑦2つ目のEC2インスタンスの作成
⑧RDSインスタンスのマルチAZ配置化
試験・確認手順
①ELBアクセス確認
②EC2インスタンス停止確認
③RDSインスタンスフェールオーバー確認
構築手順
①仮想ネットワーク作成
以下の仮想ネットワークを構築する。
- ネットワーク情報
入力項目 | 内容 | 備考 |
---|---|---|
VPC | 10.0.0.0/16 | |
PublicSubnet#1 | 10.0.31.0/24 | EC2インスタンス用 |
PublicSubnet#2 | 10.0.32.0/24 | EC2インスタンス用 |
PrivateSubnet#1 | 10.0.33.0/24 | DB用 |
PrivateSubnet#2 | 10.0.34.0/24 | DB用 |
VPC作成
1.AWSマネジメントコンソールよりVPCを開く。
2.VPCダッシュボードより「VPCウィザードを起動」を開く。
3.VPC設定ウィザードが表示されるので、そのまま「選択」をクリック。
4.VPC、パブリックサブネットの必要情報を入力する。
入力項目 | 内容 |
---|---|
IPv4 CIDR ブロック | 10.0.0.0/16 |
VPC | Web-VPC |
パブリックサブネットのIPv4 CIDR | 10.0.30.0/24 |
アベイラビリティーゾーン | ap-northeast-1a |
サブネット名 | PublicSubnet#1 |
※上記以外は変更する必要なし
5.必要情報記載後、「VPCの作成」をクリック。
クリックすると、VPCが作成される。
サブネット作成
1.左から「サブネット」をクリック。
2.サブネットの画面より「サブネットを作成」をクリック。
3.サブネット作成画面にて、先ほど作成したVPCを選択する。
4.サブネットをそれぞれ作成する。
入力項目 | 内容 | 備考 |
---|---|---|
PublicSubnet#1 | 10.0.31.0/24 | VPC作成の際に作成済み |
PublicSubnet#2 | 10.0.32.0/24 | 今回作成 |
PrivateSubnet#1 | 10.0.33.0/24 | 今回作成 |
PrivateSubnet#2 | 10.0.34.0/24 | 今回作成 |
- PublicSubnet#2
- PrivateSubnet#1
- PrivateSubnet#2
5.サブネット追加設定完了後、「サブネットを作成」をクリック。
6.サブネットが作成されたことを確認。
以下の4つが存在することを確認。
ルートテーブルにサブネット追加
1.サブネット一覧より「PublicSubnet#2」のサブネットIDをクリック。
2.画面下のタブより「ルートテーブル」を選択し、「ルートテーブルの関連付けを編集」をクリック。
3.ルートテーブルの関連付けの編集画面より、対象のルートテーブルIDを選択する。
選択後、そのまま「保存」をクリック。
4.左よりルートテーブルを開き、対象のルートテーブルのサブネットの関連付けが「2サブネット」であることを確認。
5.対象サブネットの詳細画面を開き、下の画面より「サブネットの関連付け」を選択。サブネットの関連付けが問題ないことを確認。
②EC2インスタンス作成
1.AWSマネジメントコンソールより、「EC2」を開く。
2.EC2ダッシュボードより「インスタンスを起動」をクリック。
「インスタンスを起動」をクリックし、「インスタンスを起動」をクリック。
3.「1.AMIの選択」にて「AmazonLinux2」を選択。
4.「2.インスタンスタイプの選択」にて「t2.micro」を選択。
選択後、「次のステップ:インスタンスの詳細の設定」をクリック。
5.「ステップ3:インスタンスの詳細の設定」の画面にて以下を選択。
入力項目 | 内容 | 備考 |
---|---|---|
ネットワーク | Web-VPC | 最初に作成したVPC |
サブネット | Web-VPC | |
パブリックサブネットのIPv4 CIDR | 10.0.30.0/24 |
6.下にスクロールし、高度な詳細を設定する。
ユーザーデータの「テキストで」にチェックを入れ、以下のテキストをコピー&ペーストする。
※スクリプト内の構文が間違っていないことを確認して下さい。(間違えた場合、EC2インスタンスの設定が正常に完了しない)
#!/bin/bash
yum -y update
amazon-linux-extras install php7.4 -y
yum -y install mysql httpd php-mbstring php-xml
wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
cp -r /tmp/wordpress/* /var/www/html/
chown apache:apache -R /var/www/html
systemctl enable httpd.service
systemctl start httpd.service
※WordPress等、必要なパッケージをインストールするスクリプトになります。
7.「ステップ3:インスタンスの詳細の設定」の設定完了後、「次のステップ:ストレージの追加」をクリックする。
8.「ステップ4:ストレージの追加」の画面に遷移後、「次のステップ:タグの追加」をクリックする。
9.「ステップ5:タグの追加」にて「別のタグを追加」をクリックし、以下のように入力する。
入力項目 | 内容 | 備考 |
---|---|---|
キー | Name | |
値 | Web01 | EC2の名前 |
入力完了後、「次のステップ:セキュリティグループの設定」をクリックする。
10.「ステップ6:セキュリティグループの設定」にて以下のように設定する。
- セキュリティグループの割り当て/セキュリティグループ名
項目 | 設定 | 備考 |
---|---|---|
セキュリティグループの割り当て | 新しいセキュリティグループを作成する | 該当のラジオボタンにチェック |
セキュリティグループ名 | web-security | |
説明 | web-security |
- ルール
タイプ | プロトコル | ポート範囲 | ソース | IPアドレス | 説明 |
---|---|---|---|---|---|
SSH | TCP | 22 | マイIP | PCのIPアドレス ※自動で設定される |
|
HTTP | TCP | 80 | カスタム | 0.0.0.0/0,::/0 | |
HTTPS | TCP | 443 | カスタム | 0.0.0.0/0,::/0 |
※HTTPSは使わないが、念のために開ける。
設定完了後、「確認と作成」をクリックする。
11.「ステップ7:インスタンス作成の確認」にて設定に誤りがないか確認。
確認後、「起動」をクリックする。
12.キーペア作成のポップアップが表示されるので、「キーペアのタイプ」を「RSA」とし、キーペアのダウンロードを実施する。(キーペア名は任意)
※こちらのキーペアのダウンロードを逃すと二度とログインできるタイミングがないため、必ずキーペアをダウンロードしておく。
ダウンロード後、「インスタンスの作成」をクリック。
13.インスタンスの作成処理が走るので、少し待つ。
14.インスタンス一覧にて作成したインスタンスのステータスが「実行中」になることを確認。
実行中であることを確認後、パブリックIPv4アドレスをコピーし、ブラウザの別タブのURL欄に入力する。
3.113.13.186
15.以下のようにWordPressの画面が表示されることを確認する。
③RDSインスタンス作成
セキュリティグループ作成
1.EC2ダッシュボードの右より「セキュリティグループ」をクリックする。
2.セキュリティグループ一覧の画面より「セキュリティグループの作成」をクリックする。
3.「セキュリティグループを作成」にて以下のように入力する。
項目 | 設定 | 備考 |
---|---|---|
セキュリティグループ名 | db-security | |
説明 | web-security | セキュリティグループ名と同じ |
VPC | vpc-06********* | 本手順にて作成したVPC(Web-VPC) |
4.下にスクロールし、インバウンドルールを入力。
タイプ | プロトコル | ポート範囲 | ソース | IPアドレス | 説明 |
---|---|---|---|---|---|
MySQL/Aurora | TCP | 3306 | カスタム | sg-xxxxxx(web-security) ※「②EC2作成」手順にて作成したセキュリティグループを選択 |
5.インバウンドルール入力後、「セキュリティグループを作成」をクリックする。
6.セキュリティグループが作成されたことを確認。
サブネットグループ作成
1.AWSマネジメントコンソールより「RDS」を開く。
2.RDSダッシュボードの左より「サブネットグループ」をクリックする。
3.「DBサブネットグループを作成」をクリックする。
4.「サブネットグループの詳細」にて以下のように入力する。
入力項目 | 内容 | 備考 |
---|---|---|
名前 | db-subnet | |
説明 | RDS for MySQL | |
VPC | Web-VPC | 本手順にて作成したVPC |
5.「サブネットを追加」にて以下を設定する。
- アベイラビリティゾーンの設定
以下の2つのアベイラビリティゾーンを設定する。
・ap-northeast-1a
・ap-northeast-1c
- サブネット
以下の2つのサブネットを選択する。
・PrivateSubnet#1(10.0.32.0/24)
・PrivateSubnet#2(10.0.33.0/24)
6.「選択したサブネット」の部分を確認し、問題がなければ「作成」をクリックする。
7.サブネットグループが作成されることを確認する。
データベース作成
1.RDSダッシュボードの左より「データベース」をクリックする。
2.「データベースの作成」をクリックする。
3.データベースの作成の画面に遷移する。
- 「データベース作成方法を選択」にて「標準作成」を選択する。
- 「エンジンのオプション」にて「MySQL」を選択する。
- 「エディション」のバージョンは「MySQL 8.0.25」を選択する。
- テンプレートは「無料利用枠」を選択する。
- 設定の部分は以下のように入力する。
入力項目 | 内容 |
---|---|
DBインスタンス識別子 | Rds01 |
マスターユーザー名 | admin |
マスターパスワード | 任意のパスワード |
パスワードを確認 | マスターパスワードと同じパスワードを入力 |
※「マスターユーザー名」と「マスターパスワード」は後ほど使用するため、メモ帳等に控えておく。
- DBインスタンスクラスはそのままで問題なし。
- ストレージの部分もそのままで問題なし。
- 接続の設定は以下のように入力する。
入力項目 | 内容 | 備考 |
---|---|---|
Virtual Private Cloud(VPC) | Web-VPC | 本手順で作成したVPC |
サブネットグループ | db-subnet | 先ほど作成したDBのサブネットグループを選択 |
パブリックアクセス | なし | 外に向けては公開しない。 |
- VPCセキュリティグループは「既存の選択」にチェックを入れ、以下のように設定する。
入力項目 | 内容 | 備考 |
---|---|---|
既存のVPCセキュリティグループ | db-security | 先ほど作成したDB用のセキュリティグループを選択 |
アベイラビリティゾーン | ap-northeast-1a |
※セキュリティグループの変更方法
「default」のセキュリティグループを「×」で削除する。
「db-security」を選択する。
「db-security」が選択されていることを確認する。
- 追加設定の部分はデフォルトで問題なし。
- データベース認証の部分は「パスワード認証」に設定する。
- 追加設定の部分を以下のように設定する。
入力項目 | 内容 | 備考 |
---|---|---|
最初のデータベース名 | wordpress | |
DBパラメータグループ | default.mysql8.0 | |
オプショングループ | default.mysql8.0 |
- 「バックアップ」「モニタリング」「ログのエクスポート」は以下のようにチェックを外した状態にする。
- メンテナンスの部分はデフォルトで問題なし
- 全て入力完了したら、「データベースの作成」をクリックする。
4.データベースの作成が開始する。
※10分ぐらいかかります。
5.作成したデータベースの詳細画面を確認し、ステータスが「利用可能」になっていることを確認する。
④ELB作成
ターゲットグループ作成
1.AWSマネジメントコンソールより「EC2」をクリックする。
2.EC2ダッシュボードより「ターゲットグループ」をクリックする。
3.ターゲットグループ一覧より「Create target group」をクリックする。
4.「Choose a target type」にて「Instances」を選択する。
※EC2インスタンス単位でロードバランシングするため。
5.下にスクロールし、ターゲットグループ名等を入力する。
入力項目 | 内容 | 備考 |
---|---|---|
Target group name | web-target | |
Protocol/Port | HTTP/80 | |
VPC | Web-VPC | |
Protocol version | HTTP1 |
6.「Helth checks」にて以下のように入力する。
入力項目 | 内容 | 備考 |
---|---|---|
Health check protocol | HTTP | |
Health check path | /wp-includes/images/blank.gif |
7.Interval(間隔)を6秒に変更し、ページ下の「Next」をクリックする。
8.起動しているインスタンスにチェックを入れ、80ポートであることを確認し、「Include as pending below」をクリックする。
9.「Review targets」にて対象のインスタンスが「Pending」になっていることを確認し、「Create target group」をクリックする。
10.ターゲットグループの作成に成功したことを確認する。
セキュリティグループ作成
1.EC2ダッシュボードの左より「セキュリティグループ」をクリックする。
2.「セキュリティグループを作成」をクリックする。
3.セキュリティグループの設定画面に遷移する。
- 基本的な詳細画面を以下のように設定する。
入力項目 | 内容 | 備考 |
---|---|---|
セキュリティグループ名 | elb-security | |
説明 | elb-security | セキュリティグループ名と同名 |
VPC | vpc-xxxxx | 本手順で作成したVPC(Web-VPC) |
- インバウンドルールを以下のように設定する。
- 「セキュリティグループを作成」をクリックする。
4.セキュリティグループが作成できたことを確認する。
ロードバランサー作成
1.EC2ダッシュボードの左メニューより「ロードバランサ」をクリックする。
2.「ロードバランサーの作成」をクリックする。
3.「Application Load Balancer」の部分の「create」ボタンをクリックする。
4.ロードバランサー作成前の設定を実施する。
- ロードバランサー名などを設定
入力項目 | 内容 | 備考 |
---|---|---|
Load balaner name | web-elb | ロードバランサー名 |
Schema | Internet-facing | 外部に接続する ※「Internal」は内部接続 |
IP address type | IPv4 |
- マッピング設定
以下のように設定する。
ap-northeast-1a:PublicSubnet#1
ap-northeast-1c:PublicSubnet#2
- セキュリティグループ設定
先程作成した、ELB用のセキュリティグループ(elb-security)を設定する。
※セキュリティグループ設定方法
・「default」のセキュリティグループの右の「✖︎」をクリックし、削除する。
・先程作成したELB用のセキュリティグループを選択する。
・ELB用のセキュリティグループが選択されていることを確認する。
- ターゲット選択画面にて先程作成したターゲット(web-target)を選択する。
- 設定に問題がないことを確認し、「Create Load Balancer」をクリックする。
5.ロードバランサーの作成が完了したことを確認。
6.先程のターゲットグループの画面に遷移し、「web-target」の「targets」を確認する。
Health statusが緑表示で「helthy」になっていることを確認する。
⑤WordPress初期設定
1.ブラウザの別タブを開き、先程作成したEC2インスタンス(Web01)のパブリックIPアドレスを入力する。
以下の画面が表示される。
2.データベース情報を入力する。
入力項目 | 内容 | 備考 |
---|---|---|
データベース名 | wordpress | 「③RDS作成」で設定したデータベース名 |
ユーザー名 | admin | 「③RDS作成」で設定したデータベースのユーザー名 |
パスワード | xxxxxxx | 「③RDS作成」で設定したデータベースのパスワード |
データベースのホスト名 | xxxxx.xxxxxx | 「③RDS作成」で作成したDBのエンドポイント |
※テーブル接頭辞はデフォルトでOK
入力後、「送信」をクリックする。
3.「インストール実行」をクリックする。
4.必要情報を入力する。
入力項目 | 内容 | 備考 |
---|---|---|
サイトのタイトル | テストページ | 任意のタイトルをつける。 |
ユーザー名 | admin | WordPressの管理画面にログインするためのユーザー名 |
パスワード | xxxxxxx | WordPressの管理画面にログインするためのパスワード |
メールアドレス | 任意のメールアドレス | |
検索エンジンでの表示 | チェックを入れる。 |
入力後、「WordPressをインストール」をクリックする。
5.「成功しました」と表示されることを確認し、ログインをクリックする。
6.「4.必要情報を入力する。」にて設定したユーザー名/パスワードを入力し、ログインする。
7.WordPressの管理画面が表示されることを確認する。
⑥AMI作成
1.EC2のインスタンス一覧の画面にアクセスする。
対象のインスタンス(Web01)にチェックを入れ、「アクション」→「イメージとテンプレート」→「イメージを作成」と選択する。
2.「イメージを作成」にて以下のように設定する。
入力項目 | 内容 | 備考 |
---|---|---|
イメージ名 | web-ami | |
イメージの説明 | web-ami | イメージ名と同様 |
再起動しない | チェックを外す | AMI作成時にEC2 インスタンスの再起動が発生する |
3.「イメージの作成」をクリックする。
4.左メニューより「AMI」をクリック。
5.AMIが作成完了するまで待つ。
- 作成中の状態
ステータスが「pending」の状態
- 作成完了の状態
ステータスが「available」の状態
⑦2つ目のEC2インスタンスの作成
1.作成したAMIを右クリックし、「起動」をクリックする。
2.「ステップ2:インスタンスタイプの選択」にて「t2.micro」を選択する。
選択後、次のステップをクリックする。
3.「ステップ3:インスタンスの詳細の設定」にて設定する。
- ネットワークの設定をする。
入力項目 | 内容 | 備考 |
---|---|---|
ネットワーク | Web-VPC | |
サブネット | PublicSubnet#2 | |
自動割り当てパブリックIP | 有効 |
- 「次のステップ」をクリックする。
4.「ステップ4:ストレージの追加」はデフォルトのまま「次のステップ」をクリックする。
5.「ステップ5:タグの追加」にて以下のように入力する。
入力項目 | 内容 | 備考 |
---|---|---|
キー | Name | |
値 | Web02 | EC2の名前 |
入力後、「次のステップ」をクリックする。
6.「ステップ6:セキュリティグループの設定」にて先程作成したセキュリティグループ「web-security」を設定する。設定後、「確認と作成」をクリックする。
7.インスタンス作成前の設定が問題ないことを確認し、「起動」をクリックする。
8.1台目のインスタンス作成時に作成したキーペア「WEB-KEY」を選択し、「インスタンスの作成」をクリックする。
9.インスタンスの作成が開始する。
10.インスタンス作成が完了すると、以下のようになる。
⑧2つ目のEC2インスタンスをELBに登録
1.EC2ダッシュボードの左メニューより「ロードバランサー」をクリックする。
2.対象のロードバランサー「web-elb」にチェックを入れる。
3.下の画面にて「リスナー」タブを選択し、転送先のターゲット「web-target」をクリックする。
4.ターゲットグループの画面に遷移するので、「web-target」をクリックする。
5.「Targets」タブより「Register Targets」をクリックする。
6.2台目のインスタンス(Web02)を選択し、「Include as pending below」をクリックする。
7.Web2が追加されたことを確認し、「Register pending targets」をクリックする。
8.「Targets」にWeb02が追加され、2台とも緑表示で「healthy」になることを確認する。
⑧RDSインスタンスのマルチAZ配置化
1.RDSダッシュボードにてデータベースをクリックし、作成したデータベース「Rds01」をクリックする。
2.「可用性と耐久性」にて「スタンバイインスタンスを作成する」にチェックを入れ、「続行」をクリックする。
3.変更のスケジューリングにて「すぐに適用」にチェックを入れ、「DBインスタンスを変更」をクリックする。
4.しばらく待つと、DBインスタンスの変更が完了する。
※20分程時間がかかります。
完了すると、ステータスが「利用可能」になる。
試験・確認手順
①ELBアクセス確認
ELBアクセス確認
1.EC2ダッシュボードの左メニューより「ロードバランサー」をクリックする。
2.対象のロードバランサ「web-elb」にチェックを入れる。
3.下の説明タブをクリックし、DNS名をコピーする。
4.ブラウザにて別タブを開き、コピーしたDNS名をURL欄にペーストする。
以下のテストページが表示されることを確認。
ログ確認
1.TeraTerm等のターミナルソフトを用意し、作成した2つのEC2インスタンスにSSHログインする。
SSH接続する場合は、以下が必要
・EC2インスタンスのパブリックIPアドレス
・ダウンロードしたキーペア
※ログインする際は、ユーザー名が「ec2-user」でパスワードはなしとなります。
※パブリックIPアドレスは、EC2インスタンスの詳細画面より確認可能
2.SSHログイン後、2つのEC2インスタンスにて以下コマンドを実行する。
sudo tail -f /var/log/httpd/access_log
※コマンドを流した状態にする。
3.「①ELBアクセス確認」にて開いたURLを再度開く。
※開いている場合はページをリロードする。
4.どちらかのEC2インスタンスにて以下のログが出力されることを確認。
10.0.31.194 - - [15/Oct/2021:07:27:16 +0000] "GET / HTTP/1.1" 200 12645 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"
以下ログはロードバランサーのヘルスチェック時のログになります。
10.0.31.194 - - [15/Oct/2021:07:28:01 +0000] "GET /wp-includes/images/blank.gif HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"
※何回かリロードすると、両方のEC2インスタンスにてアクセスログが出力される。
5.ターミナル画面から抜ける。
「Ctrl+C」にてログ出力を止める。
10.0.30.244 - - [15/Oct/2021:07:29:37 +0000] "GET /wp-includes/images/blank.gif HTTP/1.1" 200 43 "-" "ELB-HealthChecker/2.0"
^C
[ec2-user@ip-10-0-30-190 ~]$
以下コマンドにてターミナル画面から抜ける。
exit
②EC2インスタンス停止確認
1号機停止~起動
1.EC2インスタンス一覧より、1号機(Web01)を右クリックし、「インスタンスを停止 」をクリックする。
2.停止前のポップアップが表示されるため、「停止」をクリックする。
3.1号機(Web01)が停止されたことを確認する。
4.ブラウザにて「①ELBアクセス確認」にて開いたURLが開けるか確認する。
※ロードバランサーのDNS名になります。
5.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、1号機(Web01)が「unused」になっていることを確認する。
6.EC2インスタンス一覧の画面にて、1号機(Web01)を右クリックし、「インスタンスの開始」をクリックする。
7.1号機(Web01)のステータスが実行中になったことを確認。
8.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、1号機(Web01)が緑表示で「healthy」になっていることを確認する。
2号機停止~起動
1.EC2インスタンス一覧より、2号機(Web02)を右クリックし、「インスタンスを停止 」をクリックする。
2.停止前のポップアップが表示されるため、「停止」をクリックする。
3.2号機(Web02)が停止されたことを確認する。
4.ブラウザにて「①ELBアクセス確認」にて開いたURLが開けるか確認する。
※ロードバランサーのDNS名になります。
5.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、2号機(Web02)が「unused」になっていることを確認する。
6.EC2インスタンス一覧の画面にて、2号機(Web02)を右クリックし、「インスタンスの開始」をクリックする。
7.2号機(Web02)のステータスが実行中になったことを確認。
8.対象のターゲットグループ(web-target)の詳細画面にて「Targets」タブをクリックし、2号機(Web02)が緑表示で「healthy」になっていることを確認する。
③RDSインスタンスフェールオーバー確認
1.AWSマネジメントコンソールより「RDS」を開く。
2.左メニューより「データベース」をクリックする。
3.対象のデータベースを選択し、アクションから「再起動」をクリックする。
4.「フェールオーバーで再起動しますか?」にチェックを入れ、「確認」をクリックする。
※「フェールオーバーで再起動しますか?」にチェックを入れない場合は、フェールオーバーせずにそのまま再起動かかる。
5.データベースの再起動が完了するまで待つ。
- 再起動中
- 再起動後
6.ブラウザにて「①ELBアクセス確認」にて開いたURLが開けるか確認する。
7.データベース一覧より対象のデータベース(Rds01)をクリックする。
8.「ログとイベント」タブをクリックする。
9.以下のようなフェールオーバー実行時のログが存在することを確認する。
あとがき
以下の参考サイトを参考にWordPress環境を構築しましたが、非常に勉強になると感じました。
参考サイトを元に構築するのみであれば難しくはないですが、こちらの記事の執筆は3日程かかりました..orz
気になる方は、構築してみると勉強になると思います。
Discussion