この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
株式会社協栄情報クラウド事業本部の石井です。
今回は、マルチAZWordPressサイト構築を復習として行っていこうと思います。
AWS-マルチAZWordPressサイト構築練習(AmazonLinux2023)
構成図とやりたいこと
今回の構築の目的として、新しくリリースされた[AmazonLinux2023]を使った構築方法を学ぶという点があります。
AmazonLinux2と同じようにコマンドを入れるとうまく動作しないため注意しましょう。
主な違いとして、Tera Termで接続できない、rsyslog がインストールされていないといった点が挙げられます。
インストールされていないパッケージ
・rsyslog
・cronie
・iptables
・make
・lvm2
今回はセッションマネージャーを使っての構築を行っていきます。
構築を行っていく上での目的に至るための設計としてこれらがあります。
・高可用性にすることにより障害対策
・暗号化によるセキュリティ対策
これらの構築方法をもとに今後のAWS構築の力を身に着けていくことを狙った学習となります。
必要なサービス
サービスサービス | 説明 |
---|---|
ACM(AWS Certificate Manager) | https通信を行うための証明書の作成/利用のため |
ALB (Application Load Balancer) | 二つのEC2にヘルスチェックを行いながらリクエストを振り分け、高可用性を実現するため |
IAM (Identity and Access Management) | EC2にCWAgent用の権限を与えるため |
KMS (Key Management Service) | RDS、EBSなどの暗号化のために暗号化鍵の作成と管理を行うため |
EC2 (Elastic Compute Cloud) | Webサーバーとして使用するため |
RDS (Relational Database Service) | DBサーバーとして使用するため |
EFS (Elastic File System) | WordPressのインストールファイルをEC2間でファイル共有を行うため |
Route53 | 名前解決のため |
WordPress環境構築手順
1権限とアクセス制限
1.セキュリティグループ作成
2.IAM作成
2データベース・暗号化・ファイルシステム
1.KMSで暗号化鍵の作成
2.サブネットグループ作成
3.RDS作成
4.EFS作成
3マルチ・AZWEBサーバー構築
EC2インスタンス作成
4負荷分散作成
1.ALB作成
2.Route53作成
5証明書、https設定・検証
1.Wordpressのインストールおよび設定
2.ACMで証明書の作成
3.httpsの設定
おわりに
1.権限とアクセス制限
まず最初に、それぞれのサービスに割り当てるロール、セキュリティグループを設定していきます。
1.セキュリティグループ作成
次にセキュリティグループを作成します。今回作成するのはALB用、EC2用、RDS用、EFS用の四つです。
左の欄をスクロールしてセキュリティグループを選択しましょう。
右上のセキュリティグループを作成を押しましょう。
今回は以下の値をもとに作成していきます
サービス | プロトコル | 送信先 |
---|---|---|
ALB | HTTPS | 0.0.0.0/0 |
EC2 | HTTP | ALBのセキュリティグループ |
RDS | MYSQL/Aurora | EC2のセキュリティグループ |
EFS | NFS | EC2のセキュリティグループ |
以下に設定理由を記します
・ALB用のものはRoute53のパブリックホストゾーンからのトラフィックを受け入れる必要がありますのでソースは0.0.0.0/0としました。また、その通信は暗号化されている必要があるのでタイプはHTTPSになります。
・EC2は二つのものを別々のAZに用意し、ALBでリクエストを振り分けることで高可用性を実現する予定です。
ですので、EC2用のもの①はALBからのトラフィックを受け入れる必要がありますのでソースはALBSGとしました。
また、VPC内部の通信は暗号化されている必要がないのでタイプはHTTPになります。
・RDSはEC2(Webサーバー)に対するDBサーバーとして扱う予定です。
ですのでRDS用のものはEC2からのトラフィックを受け入れる必要がありますのでソースはEC2SGとしました。
タイプはDBにMYSQLを選定しますのでMYSQL/Auroraを選びました。
・EFSはEC2(Webサーバー)のWordpressインストールファイルを共有するために使用します。
ですのでEFS用のものはEC2からのトラフィックを受け入れる必要がありますのでソースはEC2SGとしました。
タイプはEFSはNFSの一種ですのでNFSを選びました。
VPCは一度消して、自分の作成したVPCを選択しましょう。
ALBのセキュリティグループの設定方法を載せるのでその他は実際に自分で作成してみましょう。
引用https://cloud5.jp/aws-wordpresspractice-part1/#5-
以上が、セキュリティグループの作成方法です。
各リソースタグ付けを忘れないようにしましょう、以降省きます。
2.IAM作成
次に以下のロールとポリシーを作成していきます。
セッションマネージャーを使用するためのロール
・AmazonSSMManagedInstanceCore
では早速作っていきましょう。
まずサービス一覧からIAMを検索いたします。
次に、左の欄のロールを押します。
次に右上のロールの作成を押します。
EC2ロールを作っていきます。
EC2を選択し終えたら次へを押してください。
先ほど挙げたポリシーを検索し、チェックします。
チェックを入れたら次へを押してください。
ロール名とタグを入れて、ロールの作成を押します。
無事作成が出来ました。
2.データベース・暗号化・ファイルシステム
RDS,EFS構築していきます。まず、暗号化するための暗号化鍵の作成から行いましょう。
1.KMSで暗号化鍵の作成
まずはサービス一覧よりKey Management Serviceを開きます。
その後、キーの作成を押します。
それでは作成していきます。
ここには右上の自分のユーザー名を入れます。
次も同じように行ってください。
次へ進んで完了を押せば作成されます。
無事作成完了しました。
2.サブネットグループ作成
次にRDSのサブネットグループを作成していきます。
サービスからRDSサイドからサブネットグループを検索します。
DBサブネットグループを作成を押します。
まず、名前を入れ、自分のVPCを選択します。
AZとサブネットを選択していきます、プライベートサブネットに配置するため、プライベートサブネットを選択してください。
入力完了したら作成を押していきます。
無事作成完了いたしました。
3.RDS作成
次はRDSを作成していきます。
サービス一覧からRDSを検索します。
こちらのデータベースの作成を押しましょう
下記に設定値を載せます。
DB識別子は任意でつけてください。
パスワードは後で使えるので忘れないようにしましょう。
自分のVPCを選択しましょう。
自身の作成したサブネットグループ、セキュリティグループを割り当てていきましょう
こちらのデータベース名は後で使うため、忘れないようにメモを取っておきましょう、任意の名前を入れてください。
あらかじめ作っておいたKMSキーを選択しましょう。
あとはこのままデータベースの作成をしていきましょう。
余談ですが、マイナーバージョン自動アップグレートは要件によってはチェックをつけてはならないことがあるため、十分に注意をしましょう。今回はそのままにして続けます。
利用可能になれば無事完了です!
4.EFS作成
次はEFSを作成していきます。
サービスからEFSを検索し、ファイルシステムの作成を選びましょう。
任意の名前と、自身のVPCを選択しましょう。
作成完了しました!!
次に、マウントターゲットを設定します。
作成したファイルシステムのネットワークから管理を押します。
一度両方削除しましょう、その後保存を押してください。
こちらの画面になったら、また管理画面を開きましょう。
自身の設定したAZとパブリックサブネット、EFSのセキュリティグループを割り当てましょう。
その後保存します。
利用可能になったら作成完了です。
3.マルチ・AZWEBサーバー構築
EC2インスタンス作成
それでは、以下の手順に沿って、webサーバーとなる2台のインスタンスを作成していきます。
まず、サービスからEC2を検索し、インスタンスを起動を二回押しましょう。
作成画面にはいったら、まずわかりやすい任意の名前を付けましょう。
今回はAmazonLinux2023で作成していきます。
キーペアは新しいキーペアの作成で任意の名前を付けて作成しましょう。
その後、ネットワーク設定で編集を押して設定していきます。
自身のVPC、配置するパブリックサブネット、セキュリティグループを入れていきます。
gp2が1 か月あたり 0.10 ドルに比べ、gp3が1 か月あたり 0.08 USDのため20%ほど安くなっております。そのため、こちらを選択しています。
また、ベースラインパフォーマンスも大幅に上がっているため、こちらを推奨しております。
自身の作成したEC2ロールをいれます。
その後、ユーザーデータを入れたらインスタンスを起動を押します。
入力するデータは下記を参照してください。
1台目
#!/bin/bash
sudo dnf update -y
sudo dnf install -y httpd wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y
sudo yum install -y amazon-efs-utils
sudo mount -t efs -o tls fs-xxxx:/ /var/www/html/
echo 'fs-xxxx:/ /var/www/html efs tls,_netdev 0 0' | sudo tee -a /etc/fstab
cd /tmp/
sudo wget https://wordpress.org/latest.zip
unzip latest.zip
sudo mv wordpress/* /var/www/html/
sudo rm -rf wordpress/ latest.zip
fs-xxxxの部分は、自身の作成したEFSのDNS(fs-xxxxのみ)と入れ替えてください。
2台目
#!/bin/bash
sudo dnf update -y
sudo dnf install -y httpd wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y
sudo yum install -y amazon-efs-utils
sudo mount -t efs -o tls fs-xxxx:/ /var/www/html/
echo 'fs-xxxx:/ /var/www/html efs tls,_netdev 0 0' | sudo tee -a /etc/fstab
sudo systemctl enable httpd.service
sudo systemctl start httpd.service
例
もう一つも同様に作成していきましょう、こちらの同様のものを起動を押すとよりスムーズに作成することが出来ます。
次に、Apacheの権限付与と起動などを行っていきます。
自身の作成したインスタンスを押して接続を押しましょう。
セッションマネージャーに接続するロールを割り当てているため、接続可能なはずです。
接続できない場合は、時間を置くか、正しいポリシーが割り当てられているか確認をしてみましょう。
それでは、接続を押していきます。
このような画面が出てきたら成功です。
以下のコマンドを打ち込んでいってください。
こちらのコマンドは、一台のみで問題ないです。
sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
sudo systemctl enable httpd.service
sudo systemctl start httpd.service
確認用コマンド
mysql -h データベースエンドポイント -P 3306 -u ユーザ名 -p
df -h
sudo systemctl status httpd.service
これらのコマンドで、データベースへのログイン、マウント確認、Apache起動されているかの確認を行っていきます。
4負荷分散作成
1.ALB作成
次にALBの作成を行っていきます。先にターゲットグループから作成していきます。
サービス一覧からEC2、サイドメニューよりターゲットグループを選択してください。
その後、ターゲットグループの作成を押してください。
それでは設定を行っていきます。
ターゲットグループは任意の名前を、VPCは自身のものを選択してください。
入力が完了したら次へを押してください。
今回作成したインスタンスにチェックを入れて、保留中として以下を含めるを押してください。
その後、ターゲットグループの作成をしてください。
完了したら、ALBを作成していきます
サイドから一つ上のロードバランサーを押してください
開いたら、ロードバランサーの作成を押しましょう。
今回使用するのはApplication Load Balancerなので、それを選択して作成しましょう。
ロードバランサー名は任意のものを入力しましょう。
自身のVPCを選択後、AZ,パブリックサブネットを選択してください。
自身であらかじめ作成したセキュリティグループを選択し、先ほど作成したターゲットグループを割り当てましょう。
以降入力が終わったら、ロードバランサーの作成を行っていきましょう。
無事作成が完了しました。
次に、サイドメニューのセキュリティグループからALB用セキュリティグループを選び、一時的にhttpでアクセスするためにインバウンドルールを修正しましょ
う。
この時点で一度ターゲットグループを確認してアンヘルシーの場合は、EC2の停止後起動すると改善する場合があります。
2.Route53作成
次にRoute 53を作成していきます。
サービスからRoute 53、サイドからホストゾーンを選択します。
ホストゾーンの作成は、任意のドメイン名を入れ、パブリックホストゾーンを選択するだけなので省きます。
作成したホストゾーンをおし、レコード画面に移ったら、レコードの作成を押します。
引用https://cloud5.jp/aws-wordpresspractice-part2/#4-
入力が終えたら、作成完了を押しましょう
5.証明書、https設定・検証
次に、いよいよWordpressの設定に移っていきます。
1.ACMで証明書の作成
まずは、httpsでアクセスできるようにするための準備を行っていきます。
そのために、ACMを利用して証明書を作っていきます。
それでは、サービス一覧からACMを選びましょう。その後、証明書をリクエストを押しましょう。
こちらには、先ほど作成したRoute53のレコード名を完全装飾ドメイン名に貼り付けましょう
完了したら、リクエストを押しましょう。
次に、作成したACMを押して、route53でレコードを作成を押しましょう。
完了したら、ステータスが発行済みになるはずです。
2.httpsの設定
次に手に入れた証明書を使ってhttpsの設定を行っていきましょう。
ALBのリスナーにhttpsを追加します。
こちらに来たら、もう一個ターゲットグループの作成でhttps用のターゲットグループを作りましょう。
作成が完了したら、元の画面に戻って設定を続けましょう。
先ほど作成した証明書を選択します。終わったら追加を押しましょう。
3.Wordpressのインストールおよび設定
では、ワードプレスのインストールを始めましょう。
Route53のDNS名をコピーして貼り付けましょう。
この画面に移ったら、まず日本語をおします。
さあ、始めましょう!を押しましょう。
こちらの画面に移ったら、入力していきましょう。日本語になったり英語になったりするのであまり気にせずに。
データベース名は先ほど自分がメモしたデータベースの最初の名前です
PSもメモしたものを使います。
ユーザー名は変えていなければadminのはずです。
データベースホストはRDSのエンドポイントをコピペしましょう。
入力したらこの画面からインストールを実行しましょう。
この画面になったら、キャッシュ削除や、ゲストモードで試してみると動いたりします。
こちらの画面に移ったら、そのまま入力していきましょう。
パスワードはログインに使うため、必ずメモしましょう。
この画面が出たらログインを押しましょう。
ここにadmin、さっきメモしたPWを入力していきます。
プラグインの検索にReally Simple SSLといれます。
有効化を押しましょう。
この画面に進んだら、片方のEC2のセッションマネージャーに入り、wp-config.phpの中にコマンドを入れていきます。
Iを押して編集モードに入りましょう。
↓
↓
貼り付けが終わったら、ESCを押した後、:wqで戻ります。
戻ったら、sudo systemctl restart httpd.service
を押して、WordPressをリスタートしましょう。
その後、念のためsudo systemctl status httpd.serviceのコマンドでステータスを確認しましょう。
問題なければWordPressに戻ります。
その後、一度リフレッシュを行います。
再度ログインします。
SSLの有効化を押しましょう。
ここはスキップを押します。
ここまで進んだら、管理画面へを押しましょう。
再度設定の一般にいき、httpsになっていることを確認します。
最後の確認として、HTTPを削除してもちゃんと表示されるか確認しましょう。
セキュリティグループもhttpを削除していきます。
インスタンスも片方停止しましょう。
再度WordPressをリフレッシュしても表示することが出来れば、検証成功です。
お疲れさまでした。
おわりに
今回のAWS-マルチAZWordPressサイト構築練習を通し、可用性やセキュリティの大切さを学び、これからに活かしていきたい考えてます。