AWS環境にシングルAZのWordPress環境を構築する備忘録となります。
構成は以下のような構成図を想定しています。
Table of Contents
サブネットの作成
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バージョン | タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|---|
IPv4 | HTTP | TCP | 80 | 0.0.0.0/0 |
IPv4 | SSH | TCP | 22 | 0.0.0.0/0 |
IPv6 | HTTP | TCP | 80 | ::/0 |
キーペアは既存のキーペアでも新規で作成してもどちらでも良いです。
EC2が起動したらSSH接続を実施し、EC2にログインできることを確認します。
EC2のSSH接続する方法はこちらの記事でも紹介しております。
参考 EC2踏み台サーバを経由してssh接続ITサービス指向エンジニアブログWindowsOSであればPowerShell、MacOSであればターミナルを起動し以下コマンドでSSH接続
ssh -i keypair名 ec2-user@パブリックIPアドレス
問題なく接続できることを確認します。
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とサブネットを追加した構成図は以下の通りになります。
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 コマンドを実行し、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
一つずつ説明すると以下になります。
名称 | 内容 |
---|---|
mysql | MySqlのこと |
httpd | Apacheのこと |
php-mbstring | mbstring(マルチバイト文字列のこと)全角文字を使用できるようにする拡張モジュール |
php-xml | xml文字列を使用できるようにする拡張モジュール |
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冊でしっかりわかる教科書 : 小笠原 種高: 本