#■はじめに
AWSでEC2(wordpress),RDSシングル構成を構築したので、そこから冗長化する際の手順をまとめました
AMIによるEC2複製手順、MultiAZ機能によるRDS冗長化手順、ALB作成手順となります。
#■対象者
本記事はAWS初学者向けの情報共有として構築手順をまとめています。
また、自分用の手順メモでもあります。
#■構成図
まず、冗長化していない構成図は上記。
- userはブラウザからIPを入力しhttp通信でEC2にアクセスする。
- EC2にはmysql、wordpressをインストールし、SQL発行でRDSにアクセス、データを取得し画面表示を行う。
- ssh接続はteratermでEC2に接続する際に利用する。
- EC2は外部のユーザからのアクセスを受けるが、RDSにはアクセスさせない。そのためEC2はパブリックサブネットに配置し、RDSはプライベートサブネットに配置する。
ここから以下のように変更する。
- EC2をAMIを用いて別AZに複製する。
- RDSはマルチAZ機能で別AZに冗長化する。
- EC2が複数になるので、前段にALBを配置し、通信を振り分ける。
#■作業内容
大まかに以下。
- EC2を複製する
- ロードバランサーを作成する
- ブログアドレスの設定変更を行う
- EC2セキュリティグループの設定変更を行う
- RDSをmultiAZ構成にする
#■作業手順詳細
##1. EC2を複製する
【EC2のAMIを取得】
【AMIを用いてEC2起動】
1-4. EC2画面から「インスタンスを起動」押下
1-5. 左ペイン マイAMI に 作成した AMI があるので選択
1-6. インスタンスタイプの選択
t2.micro を選択
1-7. インスタンスの詳細の設定
以下を入力
項目名 | 入力値 |
---|---|
ネットワーク | MyVPC1 |
サブネット | Public Subnet2 |
自動割り当てパブリックIP | 有効 |
1-8. ストレージの追加
デフォルトの8GiBとする
1-9. タグの追加 以下を入力
項目 | 入力値 |
---|---|
キー | Name |
値 | WebServer2 |
1-10. セキュリティグループの設定
「既存のセキュリティグループを選択する」にチェックを入れ、Web-SG-1 を選択
※既存のEC2もAMIで複製したEC2も同じセキュリティグループを使うということ
1-11. キーペアの選択
「既存のキーペアを選択」、任意のキーペア名を選択し、「インスタンスの作成」押下
これでEC2複製は完了。
##2. ロードバランサーを作成する
【ALB作成】
2-1. EC2左ペイン ロードバランサー - ロードバランサーの作成 を選択を押下
2-2. ロードバランサータイプの選択画面
Application Load Balancer を選択
2-3. Application Load Balancer を作成画面 以下を入力
・基本的な設定
項目 | 入力値 |
---|---|
ロードバランサー名 | LB-1 |
スキーム | インターネット向け |
IPアドレスタイプ | ipv4 |
・ネットワークマッピング
項目 | 入力値 |
---|---|
VPC | MyVPC1 |
マッピング | ap-northeast-1aとPublicSubnet1, ap-northeast-1cとPublicSubnet2 |
どのアベイラビリティーゾーンのどのターゲットにルーティングするかを設定
【LB用のセキュリティグループの作成】
【ターゲットグループの作成】
・リスナーとルーティング
「ターゲットグループの作成」押下
・基本的な設定
項目 | 入力値 |
---|---|
ターゲットタイプの選択: | インスタンス |
ターゲットグループ名: | TG-1 |
プロトコル: | HTTP |
ポート: | 80 |
VPC: | MyVPC1 |
プロトコルバージョン: | HTTP1 |
・ヘルスチェック
項目 | 入力値 |
---|---|
ヘルスチェックプロトコル: | HTTP |
ヘルスチェックパス: | /readme.html |
curlコマンド実行時に200が帰ってくるような適切な実在するパスを設定する必要がある |
・ヘルスチェックの詳細設定
EC2インスタンスのヘルスチェック間隔、閾値を設定
項目 | 入力値 |
---|---|
正常のしきい値: | 2 |
間隔: | 10 |
・ターゲットの登録画面
インスタンスでwebserver1,2両方選択し、「保留中として以下を含める」を押下
そうすると登録済みターゲットにwebserver1,2が表示される
これでwebserver1,2に通信が振り分けられるようになった
「ターゲットグループの作成」押下
2-4. 「Application Load Balancer を作成」画面に戻り、リスナーとルーティング - デフォルトアクションに ターゲットグループ TG-1を選択
2-5. 「ロードバランサーの作成」押下
ターゲットグループ TG-1 のターゲットタブからwebserver1,2のヘルスチェックのステータスを確認できる
ステータスチェックが問題なければhealthyとなる
##3. ブログアドレスの設定変更を行う
【RDSのサイトアドレスを書き換える】
前段にALBを配置したため。userからのアクセスはALBが受けるので、
ブログサイトアドレスをEC2のパブリックIPからALBのエンドポイントに変更する。
3-1. teratermでwebserver1,2どちらかにログインし以下コマンドでRDSにCLI接続する
3-2. 以下を実行
# mysql -h database-1.xxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u XXXXXXXX -p
※伏字となっている部分はRDS - database-1 - 接続とセキュリティタブに出ているエンドポイント名
-u はwordpressインストール時に指定したユーザ名
> USE wordpress
> SELECT * FROM wp_options WHERE option_name IN ('siteurl', 'home');
※ここで表示されるのはどちらかログインした方のEC2のパブリックIPが登録されている
> UPDATE wp_options SET option_value = 'ロードバランサーのDNS名' WHERE option_name IN ('siteurl', 'home');
##4. EC2セキュリティグループの設定変更を行う
【EC2はLBからの通信のみ許可する】
EC2のセキュリティグループは、HTTP通信のすべてを許可する設定されているので、ロードバランサーからの通信のみ許可するよう変更する
4-1. EC2画面 - セキュリティグループ - Web-SG-1 - インバウンドルールタブ - インバウンドのルールを編集を押下
4-2. インバウンドルールを編集
HTTPすべて(ソース:0.0.0.0/0,::0/)があるので、LB以外からのインバウンドも許可することになっている。そのため削除する。その代わりに タイプ:HTTP ソース:LB-SG-1 を追加する。
ただし、teratermで接続するのでSSHは残す。
以下のようにHTTPのソース LB-SG-1を設定したものを作成し保存する
##5. RDSをMultiAZ構成にする
【シングルからMultiAZへ】
5-1. RDS - database-1にチェックを入れ「変更」 押下
5-2. DB インスタンスを変更: database-1 画面
・可用性と耐久性
マルチAZ配置:スタンバイインスタンスを作成する (本稼働環境向けに推奨)にチェックを入れて続行を押下
・変更のスケジューリング
すぐに変更にチェックを入れる
変更後、時間がたつとマルチAZありに変わる
【補足 フェイルオーバーのやり方】
補足-1. データベース - database-1 - アクション - 再起動 を選択
補足-2. DBインスタンスを再起動画面で「フェイルオーバーで再起動しますか?」にチェックを入れて確認を押下
補足-3. AZが切り替わっていることが確認できる
※何度か再起動を繰り返してみたが、表示が変わらないことがあった。表示が変わるまでラグがある?
以上