AWS環境にWordPressを構築

aws_wordpress

AWS環境にシングルAZのWordPress環境を構築する備忘録となります。

構成は以下のような構成図を想定しています。

サブネットの作成

VPCのIPv4 CIDERブロックは10.0.0.0/21で作成します。

PublicSubnetを作成します。

サブネット名をPublicSubnet-1とし、IPv4 CIDERブロックを10.0.0.0/24で設定し、サブネットを作成します。

PrivateSubnetを作成します。

サブネット名をPrivateSubnet-1とし、IPv4 CIDERブロックを10.0.2.0/24とします。

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

PublicSubnetのRouteTableにインターネットに出れるように設定が必要なため、インターネットゲートウェイを作成します。

名前タグは任意に入力し、作成します。

作成したインターネットゲートウェイをVPCにアタッチします。

対象のインターネットゲートウェイを選択し、アクションからVPCにアタッチを選択します。

VPCにインターネットゲートウェイをアタッチします。

また、AWS CLIでもVPCにアタッチすることが可能です。以下コマンドで対象のVPCにインターネットゲートウェイをアタッチすることができます。

aws ec2 attach-internet-gateway –vpc-id “ここにVPC IDを入力” –internet-gateway-id “ここにインターネットゲートウェイのIDを入力” –region ap-northeast-1 –profile configで指定しているユーザー名

aws ec2 attach-internet-gateway --vpc-id "vpc-0b0b93c95dbb6a6e2" --internet-gateway-id "igw-0fc7fe3e7e37fefca" --region ap-northeast-1 --profile ec2-user

AWS CLIコマンドを使用して、インターネットゲートウェイの状態を確認すると「Attached」になっていれば問題ありません。

ルートテーブルの設定

PublicSubnetに対して、送信先に0.0.0.0/0、ターゲットに上記で作成したインターネットゲートウェイを設定します。

対象のサブネットを選択し、ルートテーブルのタブからルートテーブルのリンクをクリックします。

ルートテーブルのルートタブからルートを編集を選択

ルートの編集画面にて送信先を0.0.0.0/0、ターゲットをインターネットゲートウェイを選択し、

作成したインターネットゲートウェイを追加します。

PrivateSubnetはインターネットの環境に出れない設定が望ましいため、

送信先が10.0.0.0/21、ターゲットがlocalになっているなっていることを確認します。

EC2を作成

PublicSubnetにEC2を作成し、起動します。

インスタンス画面からインスタンスを起動を選択

無料枠のt2.microを選択し、

ネットワークに対象のVPC、サブネットはPublicSubnet、自動割り当てパブリックIPを有効に設定

適当なタグ名を入力

セキュリティグループにタイプにHTTP, ポート範囲80番のルールを追加します。

IPv4とIPv6(::/0)をソースとして入るため、このまま確認と作成をします。

EC2のセキュリティグループの内容をまとめると以下のようになります。

IPバージョンタイププロトコルポート範囲ソース
IPv4HTTPTCP800.0.0.0/0
IPv4SSHTCP220.0.0.0/0
IPv6HTTPTCP80::/0

キーペアは既存のキーペアでも新規で作成してもどちらでも良いです。

EC2が起動したらSSH接続を実施し、EC2にログインできることを確認します。

EC2のSSH接続する方法はこちらの記事でも紹介しております。

参考 EC2踏み台サーバを経由してssh接続ITサービス指向エンジニアブログ

WindowsOSであればPowerShell、MacOSであればターミナルを起動し以下コマンドでSSH接続

ssh -i keypair名 ec2-user@パブリックIPアドレス

問題なく接続できることを確認します。

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

RDSのサブネットグループを作成します。

RDSサブネットグループとは
RDSを作成する際に、割り当てるアベイラビリティゾーンやサブネット(どこのサブネットに割り当てるか)のことです。

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

サブネットグループの名前を入力し、対象のVPCを選択します。

サブネットの追加でアベイラビリティゾーン、サブネットを選択し作成します。

DBサブネットを追加する際、最低二つのAZとサブネットを選択する必要があります。

そこで、VPCに新たなサブネットを作成して、アベイラビリティゾーンに「ap-northeast-1c」、

PublicSubnetのIPv4CIDRブロックを「10.0.1.0/24」、PrivateSubnetのIPv4CIDRブロックを「10.0.3.0/24」とし、各セグメントを分けて作成します。

AZとサブネットを追加した構成図は以下の通りになります。

注意点
サブネットを新たに作成すると、VPCにアタッチしているインターネットゲートウェイがデフォルトで送信先に追加されます。
PublicSubnetに対して、対象のインターネットゲートウェイが送信先に存在する分には問題ないかと思いますが、PrivateSubnetの場合はそのままだとインターネットにでれる環境になってしまいますので、ルートから削除しておきましょう。

ちなみにサブネットを単一のAZのサブネットのみ選択している場合は以下のようなエラーメッセージが表示されます。

The DB subnet group doesn't meet Availability Zone (AZ) coverage requirement. Current AZ coverage: ap-northeast-1a. Add subnets to cover at least 2 AZs.

Google翻訳にかけると

DBサブネットグループがアベイラビリティーゾーン(AZ)のカバレッジ要件を満たしていません。現在のAZカバレッジ:ap-northeast-1c。少なくとも2つのAZをカバーするサブネットを追加します。

という意味になります。

上記エラーの対処法は

RDSのサブネットグループのサブネット追加における対処については以下をごらんください。

参考 RDSでサブネットグループ作成時 カバレッジ要件を満たしていない場合の対処法ITサービス指向エンジニアブログ

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

PrivateSubnetに配置するRDSはPublicSubnetのEC2からのみ接続許可をし、なおかつポート3306で受け付ける設定を行います。

セキュリティグループ名を入力

インバウンドルールは

タイプ: MYSQL/Aurora

ソース選択: EC2作成時に作成したセキュリティグループを選択

アウトバウンドはすべてのトラフィックを許可のままでOKです

これでポート3306の範囲でのみインバウンドを許可し、PublicSubnetのEC2からの接続を許可するRDS用のセキュリティグループを作成します。

RDSの作成

検索窓から”RDS”を検索し、データベースの作成をクリックします。

今回はMySQLを選択して作成します。

MySQLのバージョンは現時点(2022.6.8)の最新バージョンを選択してみます

テンプレートはどれを使用しても問題ないですが、テストや構築の練習をする場合には、

「開発/テスト」もしくは「無料利用枠」を選択してください。

「開発/テスト」を選択した場合は可用性と耐久性を選択する必要がありますので、マルチAZを DB インスタンス、単一のDBインスタンスどちらを選択しても問題ありません。

可用性と耐久性は「マルチAZ DB インスタンス」を選択します。

設定項目にて、DBのマスターユーザー名、マスターパスワードを入力します。

インスタンスの設定は、バースト可能クラス(tクラスを含む)を選択し、以前の世代のクラスをオンにして、db.t2.microを選択します。

ストレージの設定はデフォルトのまま

接続設定をします。

対象のVPCを選択

サブネットグループに作成したRDSサブネットグループを選択

パブリックアクセスはなし(RDSをインターネット上に出れない環境にしたいため)

VPCセキュリティグループでRDSセキュリティグループで作成したものを選択します。

データベース認証はパスワード認証にしておきます。

セキュリティを高める場合にはIAMデータベース認証等を使用しますが、今回テストで作るため、パスワード認証としておきます。

最初のデータベース名をwordpress、DBパラメータグループとオプショングループはデフォルトのまま

バックアップ保持期間は7日間にしておき、その他の設定はデフォルトのままデータベース作成をします。

WordPressのインストール

RDSの作成には数分程度時間がかかるため、その間にEC2にWordPressをインストールします。

Windowsの場合PowerShellもしくはTeraTermでEC2にssh接続をし、以下コマンドを実行していきます。

管理者権限で実行していくためroot権限に切り替えます。

sudo su -
sudo su - とは
細分化すると
sudo: 管理者権限で実行するコマンド
su: ユーザを切り替えるコマンド
-(ハイフン): カレントディレクトリを切り替えたユーザのホームディレクトリに移動するというオプション

sudo su コマンドを実行し、pwdでカレントディレクトリを確認すると、当然そのカレントディレクトリが表示されるが、
sudo su – コマンドを実行し、pwdでカレントディレクトリを確認すると/root に移動する

パッケージのバージョンを更新します。

パッケージ管理に関する詳細は以下記事からご覧ください。

解説はaptの関する内容ですが、yumに置き換えても読むことができるかと思います。

参考 aptコマンドのUbuntuパッケージ管理についてITサービス指向エンジニアブログ
yum -y update

PHPをインストールをします。

amazon-linux-extras install php7.2 -y

PHPに必要な拡張モジュールのインストールをします。

yum -y install mysql httpd php-mbstring php-xml gd php-gd

一つずつ説明すると以下になります。

名称内容
mysqlMySqlのこと
httpdApacheのこと
php-mbstringmbstring(マルチバイト文字列のこと)全角文字を使用できるようにする拡張モジュール
php-xmlxml文字列を使用できるようにする拡張モジュール
php-gdグラフィック描画ライブラリ

Apacheの自動起動設定を有効化

systemctl enable httpd.service

Apacheを起動

systemctl start httpd.service

wgetでURLを指定して、WordPressのソフトウェアをダウンロード

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

ダウンロードしたファイルを展開します。

tar zxvf ~/latest-ja.tar.gz

/wordpressディレクトリを再帰的に /var/www/htmlへコピーします。

cp -r ~/wordpress/* /var/www/html/

/var/www/htmlディレクトリの所有者を再帰的にapacheに変更する。

ユーザー: apache
グループ: apache

chown apache:apache -R /var/www/html

WordPressをブラウザで確認

EC2のパブリックIPアドレスをGooglechromeのURL窓に入力します。

以下のような画面が表示されていれば、まずEC2に問題なくWordPressが問題なくインストールされていることが確認できます。

さあ、始めましょう!をクリックすると、以下画面が表示されますので、RDS作成時に設定したユーザー名、パスワードデータベースホスト名を入力し送信します。

RDS作成時に入力した情報はRDS画面の設定タブにて確認することができます。

データベースホスト名はRDSのデータベース画面にある接続とセキュリティタブに記載のある、エンドポイントの内容をコピペします。

送信して入力情報に間違いがなければインストール実行画面に遷移します。

インストールを実行します。

必要情報を入力します。

WordPressのダッシュボードが表示されれば、無事にWordPressにログインできています。

AWS環境にWordPressを構築する内容については以上です。

最後にAWS初学者向けのAWS本をご紹介しておきます。
AWSのサービスの基本から理解したいという方は以下の書籍はおすすめです。

図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書

Amazon.co.jp: 図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書 : 小笠原 種高: 本

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です