このラボでは、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Virtual Private Cloud (Amazon VPC)、および Amazon Relational Database Service (Amazon RDS) を使用して、WordPress によるブログサイトを構築します。
このラボを修了すると、次のことができます。
Amazon EC2 および Amazon RDS を使用して、WordPress によるブログサイトを構築する
最終的には、次の図で示すようなアプリケーション環境を構築する
このラボの前提条件を次に示します。
このラボは、終了までに 45 分かかります。
ラボのこのセクションでは、最小権限の原則に基づいてアクセス許可を割り当てた Web サーバー用のセキュリティグループを作成します。
AWS マネジメントコンソールで [サービス] から [EC2] をクリックします。
ヒント : マネジメントコンソール上部の検索フォームで ec2 と入力して、目的の AWS サービスを見つけることもできます
左側のナビゲーションペインで [セキュリティグループ] をクリックします。
[セキュリティグループを作成] をクリックします。
[基本的な詳細] のセクションで、セキュリティグループ名、説明、および VPC を次のように入力します。
セキュリティグループ名 | websg |
説明 | for Web Server |
VPC | LabVPC 入力欄の右端の×で一度削除すると 選択できるようになります。 |
ヒント : この背景色の文字列
は、コピーしてマネジメントコンソールにペースト(貼り付け)することが可能です。コピー&ペーストを行うことで、誤入力を防止することが出来ます。
[インバウンドルール] のセクションで [ルールを追加] をクリックします。
注意 : [インバウンドルール] のセクションを編集していることを確認してください。間違えて [アウトバウンドルール] を編集すると今回の環境は正常に動作しません。
以下の内容で、ルールを追加します。
タイプ | プロトコル | ポート範囲 | ソース(またはリソースタイプ) | 説明 |
---|---|---|---|---|
HTTP を選択 | (自動的に選択されます) | (自動的に選択されます) | Anywhere-IPv4 を選択 | Access to WordPress |
最終的に、以下のようなセキュリティグループ設定になっていることを確認してください。
タイプ | プロトコル | ポート範囲 | ソース | 説明 |
---|---|---|---|---|
HTTP | TCP | 80 | Anywhere-IPv4 | Access to WordPress |
[タグ] のセクションで、[新規タグを追加]をクリックし、タグのキーと値を次のように入力します。
キー | 値 |
---|---|
Name |
websg |
[セキュリティグループを作成] をクリックします。
[インバウンドルール] の設定として HTTP が任意の場所(Internet を含む)からアクセスを許可されていることを確認します。
ヒント: ルールを編集するには、[インバウンドのルールを編集] をクリックします。
【送信元 Anywhere-IPv4 について】 セキュリティグループの送信元を Anywhere-IPv4 とすると、送信元として "0.0.0.0/0" というルールが作成されます。これは IPv4 プロトコルのすべての通信を表します。ラボの実施環境によって、必要な場合は IPv6 プロトコルのすべての通信を表す Anywhere-IPv6 を選択してください。 [参考:IPv6の概要](https://www.nic.ad.jp/ja/newsletter/No20/sec0700.html)画面下部の [詳細] タブの [セキュリティグループ ID] の値を、メモ帳などのテキストエディタへコピーします。この値は “sg” から始まります。 このリンクを右クリックして「名前をつけてリンク先を保存」 して、ハンズオンで利用する各種パラメータのメモ用フォーマットをダウンロードできます。
ここでメモした値は、DB サーバーへのアクセスを制御するため、この後の Task で使用します。
ラボのこのセクションでは、最小権限の原則に基づいてアクセス許可を割り当てた DB サーバー用のセキュリティグループを作成します。
AWS マネジメントコンソールで [サービス] から [EC2] をクリックします。
左側のナビゲーションペインで [セキュリティグループ] をクリックします。
[セキュリティグループを作成] をクリックします。
[基本的な詳細] のセクションで、セキュリティグループ名、説明、および VPC を次のように入力します。
セキュリティグループ名 | dbsg |
説明 | for DB Server |
VPC | LabVPC 入力欄の右端の×で一度削除すると 選択できるようになります。 |
[インバウンドルール] のセクションで、[ルールを追加] をクリックします。
注意 : [インバウンドルール] のセクションを編集していることを確認してください。間違えて [アウトバウンドルール] を編集すると今回の環境は正常に動作しません。
以下の内容でルールを追加します。
タイプ | プロトコル | ポート範囲 | ソース | 説明 |
---|---|---|---|---|
MYSQL/Aurora を選択 | (自動的に選択されます) | (自動的に選択されます) | カスタム を選択 Task 1 でコピーした Web サーバー用セキュリティグループ ID (例:sg-abcdefgh) を入力 |
SQL Connection from WordPress |
このセキュリティグループの設定は、後の Task で DB サーバー (MySQL) に適用します。 セキュリティグループ “websg” が適用されている EC2 インスタンスから、TCP:3306 (一般的に MySQL への SQL 接続に使用)でのアクセスを許可する、という設定になっています。 送信元 (ソース) として Web サーバの IP アドレスではなく、Web サーバに適用するセキュリティグループ ID を指定して抽象化しています。そのため、Web サーバの増減に容易に対応することが可能になっています。
[タグ] のセクションで、[新規タグを追加]をクリックし、タグのキーと値を次のように入力します。
キー | 値 |
---|---|
Name |
dbsg |
[セキュリティグループを作成] をクリックします。
左側のナビゲーションペインで [セキュリティグループ] をクリックし、作成したセキュリティグループ [dbsg] が一覧にあることを確認します。
[dbsg] の左側にあるチェックボックスをオンにし、画面下部の [インバウンドルール] タブをクリックして、新しいルールにより MYSQL/Aurora (ポート範囲が 3306) が Web サーバー用セキュリティグループ [websg] からアクセスを許可されていることを確認します。
ヒント: ルールを編集するには、[インバウンドルールを編集]をクリックします。
ラボのこのセクションでは、DB サーバー用のサブネットグループを作成します。
AWS マネジメントコンソールで [サービス] から [RDS] をクリックします。
ヒント: EC2 を操作していたブラウザのタブを右クリックしてタブを複製しましょう。そして、新たなブラウザタブを使って RDS のダッシュボードにアクセスしましょう。複数のブラウザタブを利用することで、GUI 操作の効率が向上します。
左側のナビゲーションペインで [サブネットグループ] をクリックします。 ナビゲーションペインが閉じている場合は、三本線のアイコンをクリックすると開くことができます
[DB サブネットグループを作成] をクリックします。
[DB サブネットグループを作成] ページの [サブネットグループの詳細] にて以下のように指定します。
名前 | dbsubnetg |
説明 | Database Subnet Group |
VPC | LabVPC を選択 |
画面下の [サブネットを追加] にて、DB サブネットグループで 2 つのプライベートサブネット (10.0.3.0/24、10.0.4.0/24) を選択するために、以下の手順を実施します。
アベイラビリティゾーン | サブネット ID | CIDR ブロック |
---|---|---|
ap-northeast-1a |
subnet-0ab98cd76ef54g321 | 10.0.3.0/24 |
ap-northeast-1c |
subnet-123n4m5l6k7j8i9h0 | 10.0.4.0/24 |
ヒント: サブネット ID は例です。サブネット ID は受講者環境によって異なります。
[作成] をクリックします。 DB サブネットグループの一覧に dbsubnetg が見つからない場合は、右上の[更新]アイコンをクリックして表示を更新してください。
ラボのこのセクションでは、WordPress で使用する DB サーバーを RDS インスタンスで作成します。
AWS マネジメントコンソールで [サービス] から [RDS] をクリックします。
左側のナビゲーションペインで [データベース] をクリックし、画面右側で [データベースの作成] をクリックします。
[データベース作成方法を選択] で、標準作成 を選択します。
[エンジンのオプション] で、以下の項目を選択します。
エンジンのタイプ | MySQL |
バージョン | MySQL 5.7.31 |
[テンプレート] で、[開発/テスト] を選択します。
[可用性と耐久性] は、デフォルトのままにします。デフォルト設定が、以下のようになっていることを確認します。
デプロイオプション | 単一の DB インスタンス |
[設定] で、以下のように指定します。
DB インスタンス識別子 | chapter1 |
マスターユーザー名 | wpuser |
マスターパスワード | wppassword |
パスワードを確認 | wppassword |
[DB インスタンスクラス] で、以下のように指定します。
DB インスタンスクラス | バースト可能クラス(t クラスを含む) |
db.t3.micro |
[ストレージ] は、デフォルトのままにします。
[接続] で、以下のように指定します。
Virtual Private Cloud(VPC) | LabVPC |
サブネットグループ | dbsubnetg |
パブリックアクセス可能 | なし |
VPC セキュリティグループ | 既存の選択 をチェックする。 “default"というセキュリティグループが選択済みの場合は、“✕"をクリックして選択解除 dbsg を選択 dbsg のみが選択済みの状態であることを確認する |
アベイラビリティゾーン | ap-northeast-1a |
注意 : 追加設定の [データベースポート]は 3306 のまま変更しないよう注意してください。
[データベース認証] は、デフォルトのままにします。
[追加設定] で、以下のように指定します。([接続]の[追加設定]ではなく、下の方にある別のセクションです)
下記項目以外は、すべてデフォルト値にしてください。
最初のデータベース名 | wordpress |
暗号化を有効化 | チェックあり (デフォルトのまま) |
拡張モニタリングの有効化 | チェックなし |
注意: データベースの名前を指定し忘れると、後から手動によるデータベース作成が必要になりますので、忘れずに入力してください。
[データベースの作成] をクリックします。
DB インスタンスの一覧に作成したインスタンス (chapter1) が表示されていることを確認します 。
chapter1 の[ステータス] が [利用可能] になっていなくても構いません。
この時点では、[ステータス] は [作成中] になっています。次の Task に進んでください。
ラボのこのセクションでは、WordPress で使用する Web サーバーを EC2 インスタンスで作成します。
AWS マネジメントコンソールで [サービス] から [EC2] をクリックします。
左側のナビゲーションペインで [インスタンス] をクリックし、[インスタンスを起動] をクリックします。
新しいインスタンスを起動するには、まず Amazon Machine Image (AMI) を選択する必要があります。AMI とは EC2 インスタンスのテンプレートです。 [クイックスタート] の [Amazon Linux 2 AMI (HVM) - Kernel 4.14, SSD Volume Type] の横にある [選択] をクリックします。
ヒント: 必ず Amazon Linux 2 AMI を選択してください。
[インスタンスタイプの選択] ページで、インスタンスタイプを選択できます。これにより、インスタンスに割り当てられる RAM 容量、 ストレージ容量、処理速度が決まります。 t2.micro を選択して、[次のステップ:インスタンスの詳細の設定] をクリックします。
[インスタンスの詳細の設定] ページで、次のように指定します。
ネットワーク | LabVPC |
サブネット | PublicSubnet01 |
自動割り当てパブリック IP | 有効 |
IAM ロール | WP-Role を選択 |
モニタリング | CloudWatch 詳細モニタリングを有効化 にチェックしてください |
ヒント: サブネットの設定は PublicSubnet01
になっていますか? PublicSubnet01 と PrivateSubnet01 を間違えないようにしてください。
Elastic Inference に関してアクセス権限の問題で赤くメッセージが表示されていますが、次のステップに進んでください
[次のステップ: ストレージの追加] をクリックします。インスタンスのストレージ設定はデフォルトのままにします。
[次のステップ: タグの追加] をクリックします。
[クリックして Name タグを追加します] のリンクをクリックします。
追加されたテキストボックスに以下の値を入力します。
キー | Name |
値 | Web Server01 |
[次のステップ: セキュリティグループの設定] をクリックします。
[セキュリティグループの割り当て] で、[既存のセキュリティグループを選択する] のラジオボタンをクリックします。
[websg]を選択します。
[確認と作成]をクリックします。
ヒント:【警告メッセージが出た場合】
下記警告メッセージは、このハンズオンでは無視して下さい。
「AMI では、アクセスを可能にするためにポート 22 を開く必要があるため、このインスタンスに接続できません。現在のセキュリティグループでは、ポート 22 が開いていません。」
尚、実際のシステム構築・運用では、警告メッセージをよく読み、セキュリティや運用上の問題がないか確認することをお勧めします。
表示された設定を確認して、[起動] をクリックします。
[既存のキーペアの選択] をクリックして[キーペアなしで続行] を選択します。
“私は、キーペアがない場合、EC2 Instance Connect を使用するか、AMI に組み込まれているパスワードを知っている場合にのみ、このインスタンスに接続できることを認識しています。EC2 Instance Connect は、Amazon Linux 2 および Ubuntu でのみサポートされています。詳細はこちらをご覧ください。“のチェックボックスに、チェックを入れます。
[インスタンスの作成]をクリックします。
[インスタンスの表示] をクリックします。
EC2 インスタンスの一覧に作成したインスタンスが表示されます。 作成した EC2 インスタンス (Web Server01) の [ステータスチェック] が [2/2 のチェックに合格しました] と表示されるのまで待ちます。
表示が変わらない場合は、マネジメントコンソール右上の [更新]アイコンをクリックし、画面をリフレッシュしてください。
確認後、画面下部 [詳細]タブに表示されているインスタンス (Web Server01) の パブリック IPv4 DNS をコピーして、メモ帳などのテキストエディタに コピー します(後続のハンズオンで使用します)。
ここまでの Task を完了させることで、Amazon VPC、Amazon EC2、Amazon RDS を利用した Lab1 のインフラストラクチャが整いました。
次の Task からは、インフラストラクチャ上でアプリケーション (WordPress) をインストールし、Internet 上からアクセスして Blog を参照できるようにします。
ラボのこのセクションでは、Task5 で作成した Web サーバーに Session Manager で接続します。
AWS マネジメントコンソールで[サービス] から[EC2] をクリックします。
左側のナビゲーションペインで[インスタンス] をクリックします。
Web Server01 左のチェックボックスをクリックします。
画面上部の [接続] をクリックします。
接続方法 [セッションマネージャー] を選択します。
[接続] をクリックします。
新しいブラウザタブで、コマンドプロンプトが表示されます
以下のコマンドを実行します。
sudo su ec2-user
cd
pwd
ヒント:
コマンド入力はコピー & ペーストで操作することをオススメします。
・コピー :コマンドが記載された箇所にマウスカーソルを合わせると、右上にコピー用のアイコンが表示されますのでクリックしてください。
・ペースト:Windows OS をご利用の方は Session Manager のターミナル上で Shift + Ctrl + v のショートカットキーで貼り付けが可能です。
ショートカットに慣れていない方は、右クリック > 貼り付け で操作を行ってください。
この Task では、Web サーバー上で WordPress のセットアップを行います。
Task6 で Web サーバー (Web Server01) へのログインが完了しているターミナル上で、以下のような表示になっている事を確認します。
下記は表示例ですので、プロンプトの IP アドレスなどは実際の値と異なります。
sh-4.2$ sudo su ec2-user
[ec2-user@ip-10-0-1-111 bin]$ cd
[ec2-user@ip-10-0-1-111 ~]$ pwd
/home/ec2-user
パッケージのアップデートやソフトウェアのインストールを行うために、以下のコマンドを実行します。
# COPY START
~ # COPY END
までの全ての行をコピーして、ターミナルにペースト(貼り付け)し、キーボードの Enter キーを押下することでコマンドが実行されます。
必ず、すべてのコマンドを実行してください
# COPY START
cat > ~/install-tools <<-"EOF"
#!/bin/bash -ex
# Apache httpd、PHP、MySQL クライアントをインストール
sudo yum -y update
sudo amazon-linux-extras install php7.2 -y
sudo yum -y install mysql httpd php-mbstring php-xml gd php-gd
# Apache httpd を有効化、プロセス起動
sudo systemctl enable httpd.service
sudo systemctl start httpd.service
# WordPress をインストール
sudo wget http://ja.wordpress.org/latest-ja.tar.gz ~/
sudo tar zxvf ~/latest-ja.tar.gz
sudo cp -r ~/wordpress/* /var/www/html/
sudo chown apache:apache -R /var/www/html
EOF
chmod +x ~/install-tools
sh install-tools
# COPY END
ブラウザで WordPress のセットアップ用ページにアクセスします。
http://<インスタンスのパブリック DNS 名>/wp-admin/setup-config.php
ラボのこのセクションでは、WordPress をセットアップします。
ブラウザに表示された画面で [さあ、始めましょう!] をクリックします。
AWS マネジメントコンソールに戻り、[サービス] から [RDS] をクリックします。
ナビゲーションペインで [データベース] をクリックします。
Task4 で作成した DB インスタンス chapter1 の名前のリンクをクリックします。
注意 : ラジオボタンを選択するのではなく、chapter1 の名前をクリックしてデータベースの詳細画面へ遷移します。
DB インスタンスの [ステータス(または、情報)] が [利用可能] になっていることを確認します。
[接続とセキュリティ] に表示されている エンドポイント をコピーします。
データベースのエンドポイントは chapter1.abcdef12gh56.ap-northeast-1.rds.amazonaws.com
のような値になります。
データベースのエンドポイントは、メモ帳などのテキストエディタにコピーしてください。
WordPress サイトのデータベースの設定画面で以下の様に指定します。
データベース名 | wordpress |
ユーザー名 | wpuser |
パスワード | wppassword |
データベースのホスト名 | DBインスタンス"chapter1"のエンドポイントを入力してください (例:chapter1.abcdef12gh56.ap-northeast-1.rds.amazonaws.com ) |
テーブル接頭辞 | wp_ (デフォルトのまま) |
[送信] をクリックします。
表示された画面で、[インストール実行] をクリックします。
WordPress のサイトの設定画面で以下のように入力します
サイトのタイトル | 任意のタイトルにしてください |
ユーザー名 | admin |
パスワード | (あなたの名前) + (今日の日付) + !(例: Suzuki20210115!) パスワードは必ずテキストエディタなどに控えておいてください |
メールアドレス | 任意 (ご自身のメールアドレス、または johndoe@example.com と設定) |
検索エンジンでの表示 | チェックを入れる(検索されないようにする) |
ヒント:トラブルシューティング等でインストラクターがログインする可能性もあるため、パスワードは指定した形式にしてください。 ただし、実際のシステム構築・運用では、セキュリティ上の問題がないパスワードを設定することをお勧めします。
[WordPress をインストール] をクリックします。
表示された画面で、[ログイン] をクリックします。
ここまでの手順で WordPress のセットアップが完了しました。
ラボのこのセクションでは WordPress の管理画面にログインし、新規ブログを投稿してアプリケーションの動作確認を行います。
WordPress の管理画面にログインします。
ユーザー名 | admin |
パスワード | Task9 で設定した WordPress の管理者用パスワード |
画面左の [投稿] メニューから [新規追加] をクリックして、画像付きの記事を投稿します。
[タイトルを追加] 部分をクリックしてブログのタイトル(英語)を入力します。
ヒント:ブログのタイトルは 英語 で入力します。
次に、本文の入力と画像の挿入を行います。 [文章を入力、または / でブロックを選択] という部分をクリックして本文(適当な文章)を記述し、キーボードの Enter を押します。
次のブロックができますので、入力欄の右側の [+]
(ブロックの追加) アイコンをクリックして [画像] をクリックします。
もしくは スラッシュ ‘/’ を入力しても画像アイコンが出てきます。
[アップロード] をクリックします。ローカル PC にある任意の画像ファイルを選択し、右下の [開く] をクリックします。
ブログに画像が挿入されたことを確認し、画面右上にある [公開] をクリックし、更に[公開] をクリックします。
投稿したブログ内容を表示するには、[投稿を表示] をクリックします。
ヒント: ページが見つかりませんというエラーになった場合は、ブログのタイトルを英語で入力しているか確認してください。
画像の URL を確認します。画像を右クリックして新しいタブで開きます。
ブラウザの URL を確認します。EC2 のホスト名と画像パスが表示されています。
【画像ファイルはどこにある?】 WordPress の新規投稿でアップロードした画像ファイルは、皆さんが作成したシステムのどこに保管されていますか? Web Server01 (WordPressが稼働しているWebサーバ) のターミナルで `ls -la /var/www/html/wp-content/uploads/yyyy/mm/` のようなコマンドを実行してみましょう。"yyyy" は西暦、"mm" は月を指定します。 Session Manager で Web Server01 に接続する方法は、Task6 を参照してください。ここまでのタスクで、画像ファイル付きで Blog 投稿を行うと画像ファイルが皆さんの作成したシステムに保管されていることが分かりました。では、Blog のタイトル、本文等のデータはどこに保管されているのでしょうか。
この Challenge Task ではデータベースに SQL 接続を行い、SQL を利用してデータベース内の情報を参照します。
Web Server01 に Session Manager でログインします。詳細な手順は Task6 を参照してください。
次のコマンドで DB インスタンスに SQL 接続します
mysql -u wpuser -p -h [メモしてある"RDSのDBエンドポイント"を入力]
Enter password: ["wppassword"を入力]
Web Application サーバーで稼働している WordPress が使用しているデータベース “wordpress” を選択します
USE wordpress;
データベース “wordpress” 内のテーブル一覧を参照します。
SHOW tables;
データベース “wordpress” のテーブル “wp_posts” 内の、最新レコードを参照します。
SELECT ID,post_date,post_content,post_title
FROM wp_posts
ORDER BY ID
DESC LIMIT 1
\G
post_content に皆さんが投降した Blog の本文(画像ファイルの URL 含む)が、post_title に Blog 投稿時のタイトルが記録されているはずです。
SQL 接続をクローズします。
EXIT;
このラボでは、Amazon EC2 と Amazon RDS で WordPress によるブログサイトを構築しました。
お疲れさまでした。これでラボ 1 は終了です。 このラボで作成した環境は継続して利用するので、[ラボを終了] はクリックしないでください。