ふるてつのぶろぐ

福岡在住のエンジニアです。

写真提供:福岡市

今夜は社内AWSもくもく会2 - シーズン2

今日すること

こんにちはふるてつです。

久しぶりに社内AWSもくもく会のことを書きます。
社内AWSもくもく会自体は継続していたのですが、わたしのアカウントの無料利用枠が尽きてしまい、 ブログ書きのみしばらくお休みしていました。
今回新たにもう1つアカウントを作り直しましたので、先週から再開しましたので、今回からAWSはシーズン2になります。
いつもの本の続きからですけど。

今回のテーマは「WordPressを使ったブログサイトの構築」になります。
本では下記のように本番版のDBを作ってマルチAZのマスタとスレーブ構成にするそうですが、どうも有償になりそうなのでテスト版のDBで1台だけにしました。
皆様ももし本と同じことをするなら、この点はぜひ気を付けてください。
※このブログを書いた後に分かったのですが、無償版でもマルチAZのマスタとスレーブ構成はできそうです。
ためしたらまた別途書きます。
f:id:tetsufuru:20190805024952p:plain:w500

VPCネットワークの作成

まずはいつものVPC作成です。
なにかするときは大体これがありますね。今回は10.1.0.0/16です。
f:id:tetsufuru:20190804211540p:plain:w500

新たに作成したVPCが1件増えました。下の画像の1件目になります。
f:id:tetsufuru:20190804211431p:plain:w500

追加したVPCの「DNSホスト名」を有効にします。
これはなぜ必要かわからないのですが、多分Wordpressの設定あたりでつまずくのでしょう。
いったん本の通りに有効にします。
f:id:tetsufuru:20190804211922p:plain:w500

サブネット作成

次はサブネットを4つ作成します。

Name IPv4 CIDR
WP-PublicSubnet-A 10.1.11.0/24
WP-PrivateSubnet-A 10.1.15.0/24
WP-PublicSubnet-C 10.1.51.0/24
WP-PrivateSubnet-C 10.1.55.0/24

下は「WP-PublicSubnet-A」を作っています。
本の通りに4つ作成しますが、「WP-PrivateSubnet-C」は今回は使用しないそうです。
f:id:tetsufuru:20190804213411p:plain:w500

インターネットゲートウェイ作成

次もほぼお約束ですが、インターネットゲートウェイの作成です。
メニューの「インターネットゲートウェイ」から「インターネットゲートウェイの作成」をクリックします。
f:id:tetsufuru:20190804221210p:plain:w500

作成したゲートウェイを今回新たに作成したVPCにアタッチします。
f:id:tetsufuru:20190804221716p:plain:w500

f:id:tetsufuru:20190804221942p:plain:w500

ルートテーブル作成

これもいつものルートテーブル作成です。
メニューの「ルートテーブル」から「ルートテーブルの作成」をクリックします。
f:id:tetsufuru:20190804222440p:plain:w500

VPCの欄は今回新たに作成したVPCを選択します。
f:id:tetsufuru:20190804222546p:plain:w500

追加したルートテーブルを選択し画面下側にある「ルート」タブを選択し「ルートの編集」を行います。
f:id:tetsufuru:20190804223227p:plain:w500

すべての送信先(0.0.0.0/0)に上記で作成したインターネットゲートウェイを割り当てます。
f:id:tetsufuru:20190804224213p:plain:w500

下の感じになります。
f:id:tetsufuru:20190804224805p:plain:w500

そして2つのパブリックサブネット「WP-PublicSubnet-A」と「WP-PublicSubnet-C」に作成したルートテーブルとの関連付けを追加します。
これで2つのサブネットに外部からアクセスできるようになるはずです。
下は「WP-PublicSubnet-A」にルートテーブルの関連付けを追加しているところです。
「ルートテーブルの関連付けの編集」をクリックします。
f:id:tetsufuru:20190804225500p:plain:w500

作成したルートテーブルを選択します。
f:id:tetsufuru:20190804225753p:plain:w500

下のようにルートテーブルの関連付けが新たに追加されています。
「WP-PublicSubnet-C」も同様に行います。
f:id:tetsufuru:20190804230355p:plain:w500

セキュリティグループの作成

次にセキュリティグループを作成します。
メニューから「VPC」→「セキュリティグループ」→「セキュリティグループの作成」を選んでいきます。
f:id:tetsufuru:20190804232010p:plain:w500

まずはWordpress用のセキュリティグループを作成します。
名称は「WP-Web-DMZ」とし、VPC欄には今回作成したVPCを選択します。
f:id:tetsufuru:20190804232135p:plain:w500

次にインバウンドのルールを追加します。
SSHHTTPの22番と80番ポートを開けるようにします。
f:id:tetsufuru:20190804233020p:plain:w500

次はDBです。
名称は「WP-DB」とし、こちらもVPC欄に今回作成したVPCを選択します。 f:id:tetsufuru:20190804233320p:plain:w500

DBはMySQLの3306番ポートを開けるようにします。
f:id:tetsufuru:20190804233510p:plain:w500

DBサブネットグループの作成

RDSを作る前にDBサブネットを作成します。
AWSではRDSを作成する際、必須のようです。
まずはRDSのメニューから「サブネットグループ」を選択します。

f:id:tetsufuru:20190804234734p:plain:w500

下記の内容で「サブネットグループ」を作成します。
名前は「wp-dbsubnet」、AZは「ap-northeast-1a」に加え「ap-northeast-1c」も追加します。

f:id:tetsufuru:20190804234851p:plain:w500 f:id:tetsufuru:20190804235222p:plain:w500

RDS(MySQL)の作成

これまでの道のりは少々長かったですねー。
しかしやっていることはほとんど下準備といった感じです。
これからやっとDBやPHPが出てきます。

RDSのメニューから「データベース」→「データベースの作成」をクリックします。
f:id:tetsufuru:20190805001914p:plain:w500

データベースはMySQLを選びます。
f:id:tetsufuru:20190805002511p:plain:w500

本では本番用を選ぶように書いてありますが、有償になってしまうので「開発/テスト」用に変えました。
f:id:tetsufuru:20190805002713p:plain:w500

無料利用枠内で選択すると下記のようになります。
MySQLのバージョンは「5.6.37」
無償にしたいのでDBインスタンスは「t2.micro」
マルチAZは選べません。
f:id:tetsufuru:20190805003202p:plain:w500 f:id:tetsufuru:20190805003250p:plain:w500 f:id:tetsufuru:20190805003416p:plain:w500

「次へ」をクリックする。
ネットワークとセキュリティの設定は下記になります。
データベースの名前は空にします。
残りはほぼデフォルトのままです。
f:id:tetsufuru:20190805004008p:plain:w500 f:id:tetsufuru:20190805004136p:plain:w500 f:id:tetsufuru:20190805004244p:plain:w500 f:id:tetsufuru:20190805004334p:plain:w500 f:id:tetsufuru:20190805004424p:plain:w500 f:id:tetsufuru:20190805004452p:plain:w500

そしてデータベースを作成します。 f:id:tetsufuru:20190805010040p:plain:w500

Wordpress用のEC2作成

Wordpress用のEC2インスタンスを作成します。
Amazon Linux2もありますが、慣れていないので2でない方を使用しました。
上から2番目です。
f:id:tetsufuru:20190805010339p:plain:w500 こちらも無償にしたいので「t2.micro」を選択します。 f:id:tetsufuru:20190805010634p:plain:w500

セキュリティグループは「WP-Web-DMZ」を指定して、22番と80番ポートを開けるようにします。
f:id:tetsufuru:20190805014124p:plain:w500

あとはまたキーペアを作成してTeraTermsshログインできるようにします。
f:id:tetsufuru:20190805014441p:plain:w500

PHPMySQLWordPressのインストール

まずはEC2にTeraTermでログインします。
f:id:tetsufuru:20190805014617p:plain:w300

そしてコマンドラインからPHP一式をyumコマンドでインストールします。

sudo yum install php php-mysql php-gd php-mbstring -y

f:id:tetsufuru:20190805020034p:plain:w300

次はWordpress関連。wgetgzファイルをダウンロードしtarで解凍します。
mysqlは不要な気もしますが本の言うとおりにしました。

sudo yum install mysql -y
wget -O /tmp/wordpress-4.9.4-ja.tar.gz https://ja.wordpress.org/wordpress-4.9.4-ja.tar.gz
sudo tar zxf /tmp/wordpress-4.9.4-ja.tar.gz  -C /opt/
sudo ln -s /opt/wordpress /var/www/html/
sudo chown -R apache:apache /opt/wordpress
sudo chkconfig httpd on
sudo service httpd start

下のようにhttpdサービスがスタートしました。 f:id:tetsufuru:20190805020905p:plain:w300

次にRDSWordpress用のスキーマ(データベース)を作ります。

まずRDSの「エンドポイント」を確認します。
下記画面の赤枠のところが「エンドポイント」です。
こちらを使用してDBにログインします。
f:id:tetsufuru:20190805021509p:plain:w500

下記のようなコマンドでログインできます。

mysql -u hoge-p -h wp-mysql.**********.ap-northeast-1.rds.amazonaws.com

f:id:tetsufuru:20190805022041p:plain:w300

あとはWordpress用のユーザーとデータベースを下記のコマンドで作成します。

CREATE USER 'wordpress-user'@'%'IDENTIFIED BY 'wordpress';
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress-user"@"%";
FLUSH PRIVILEGES;

最後にWordpressのセットアップ用URLを開きます(EC2のエンドポイント + wordpressのアドレス)
http://ec2*********.ap-northeast-1.compute.amazonaws.com/wordpress/wp-admin/setup-config.php

f:id:tetsufuru:20190805022818p:plain:w500

データベース名は「wordpress」、ユーザ名とパスワードはRDSに設定した値を入力します。 データベースのホスト名はデフォルトのまま、テーブル接頭辞は「wp_」にします。
f:id:tetsufuru:20190805023042p:plain:w500

あとサイトのタイトルやユーザ名は任意で、パスワードはデフォルトのままにしました。
f:id:tetsufuru:20190805023623p:plain:w500

これで終わりです。長かった… f:id:tetsufuru:20190805023808p:plain:w500

感想

今回は区切りが若干悪くて1つの記事で大分長くなってしまいました。
しかしまだこの続きがあるようなので、次回はさらにその2を書く予定です。
次回のために環境を残さないとですね。
RDSが最近停止(STOP)できるようになったのは良いですね。 1週間だけらしいのですがその間でも課金を心配せずに済みます。
あとWordpressEC2を立てなくても作れるような話を聞いたことがあります。
本の先でそのあたりの話が出てくるかもしれません。

それではまた