5
4

More than 1 year has passed since last update.

AWS Elastic Disaster Recovery Workshopをやる

Posted at

はじめに

この記事はAWS Elastic Disaster Recovery Workshopをやった際のメモ書きです。
リンク先のWorkshopは英語で書かれています。もし、英語を読むことが大変である方はこの記事をぜひ参考にしてください。
ただし、リンク先の情報を全てこちらに記載しているわけではないため、詳細な情報を得たい方は本家Workshopを実施してみてください。

Introduction

AWS Elastic Disaster Recovery(DRS)は、OS、データベースやアプリケーションなどのマシンを、低コストなステージングエリアに継続的にレプリケートするサービスです。
災害発生時にDRSに指示することで、レプリケートしていたマシンをリカバリーインスタンスとして、数分で自動的に起動することができます。

以下はDRSの基本的なネットワーク図です。
左手のオンプレデータセンターにあるサーバにはAWS Replication Agentがインストールされています。
そして、サーバから継続的にブロックレベルのレプリケーションが行われます。レプリケーションのデータは圧縮、暗号化されます。
右手のステージングエリアには軽量なEC2インスタンスがレプリケーションサーバとして起動されており、ここにレプリケーションデータが蓄積されます。
DRSへの指示により、リカバリーサブネットにリカバリーインスタンスを起動させることができます。

image.png

Workshop

このWorkshopでは次のことを行います。

  • AWS Replication Agentのインストールとサーバのレプリケーション設定
  • 起動テンプレートの設定
  • レプリケーションのモニタリング
  • フェールオーバーの実施とそれが成功したか確認

image.png

1. Account Setup

自己学習のためのCloudFormationテンプレートをここからダウンロードし、CloudFormationスタックを作成してください。(入力は全てデフォルト値で構いません)
使用するリージョンはバージニア北部(us-east-1)とします。
以下の認証情報をメモっておいてください。

Bastion Host
user = Administrator
password = Adm1nP@s

Linux Hosts
password = SshPass1

3. Connect to the Bastion Host

BastionにRDPで接続してみます。
当方Macを使用しているためMicrosoft Remote Desktopでアクセスしてみます。

BastionのIPアドレスはCloudFormationで作成したスタックの出力から確認します。
ネストされていないスタックを選択し、出力のBastionRDPの値を確認します。

image.png

続いて、EC2の画面に移動します。

image.png

Bastionインスタンスを選択し、セキュリティグループのインバウンドルールを確認します。
タイプがRDPのもののソースをマイIPに変更します。

image.png

Microsoft Remote DesktopでBastionにRDPで接続します。
ユーザー名、パスワードは1. Account Setupでメモしたものを入力してください。

image.png

4. Configure DRS Settings

AWS Elastic Disaster Recovery (DRS)のコンソールを表示します。
ここでは、ステージングエリアをどこにするかや、レプリケーションサーバのキャパシティなどの設定を行います。

  1. 画面に表示されているSet default replication settingsボタンを押下します。
    image.png

  2. Stagin area subnetCloudEndure Stagingを選択、Replication server instance typet3.smallを選択し、Nextボタンを押下します。
    image.png

  3. レプリケーションを保存するEBSのタイプや暗号化有無、また、ステージングエリアへのアクセスを制御するセキュリティグループを選択します。今回は全てデフォルト設定で構いません。
    image.png

  4. レプリケーショントラフィックのルーティング設定やポイントインタイムリカバリの設定を行います。今回は全てデフォルト設定で構いません。
    image.png

  5. Create defaultボタンを押下します。このデフォルト設定はAWS Replication Agentがインストールされたサーバのデフォルト設定となります。
    image.png

  6. AWS Replication Agentはまだどのサーバにもインストールされていないため、現時点でSource serversには1件も表示されません。
    image.png

5. Configure DRS Agent IAM User

AWS Replication AgentはAWSアカウントと対話するため、IAMクレデンシャルを必要とします。
ここでは、IAMユーザーとクレデンシャルを設定します。

IAMコンソールを表示し、ユーザー、ユーザーを追加ボタンを押下します。
スクショのCloudEndureUserはCloudFormationで自動的に作成されるようです。

image.png

ユーザー名drs-agent-userアクセスキー-プログラムによるアクセスをチェックし、次のステップ:アクセス権限ボタンを押下します。

image.png

既存のポリシーを直接アタッチを選択、フィルタにdisasterを入力し、ポリシー名AWSElasticDisasterRecoveryAgentInstallationPolicyをチェック。次のステップ:タグボタンを押下します。

image.png

次のステップ:確認ユーザーの作成ボタンを押下し、ユーザーを作成します。
作成後、アクセスキーIDとシークレットアクセスキーがCSVでダウンロードできるので、ダウンロードしておきます。

6. Installing the Agent

各マシンにAWS Replication Agentをインストールし、各マシンからステージングエリアのインスタンスへのレプリケーションを開始します。

RDPでBastionインスタンスにログインします。

image.png

デスクットップのPuttyアイコンをダブルクリックし、HostNameにAWS Replication AgentをインストールするサーバのFQDNを入力し、Openボタンを押下します。

image.png

AWS Replication Agentインストール対象

Server Name FQDN OS Username Password
wordpress-web wordpress-web.onpremsim.env Linux user 1. Account SetupLinux Hostspassword
wordpress-db wordpress-db.onpremsim.env Linux user 1. Account SetupLinux Hostspassword

ユーザー名とパスワードが求められるので、上記の通り入力します。

image.png

ログインできたら、以下のコマンドを実行します。

wget -O ./aws-replication-installer-init.py https://aws-elastic-disaster-recovery-us-west-2.s3.amazonaws.com/latest/linux/aws-replication-installer-init.py

image.png

次に以下のコマンドを実行します。

sudo python3 aws-replication-installer-init.py

途中入力が求められます。
AWS Region NameはBastionインスタンスを起動しているリージョン(us-east-1など)を入力してください。
AWS Access Key ID5. Configure DRS Agent IAM Userの手順でダウンロードしたCSVに記載されているAccess Key IDを入力してください。
AWS Secret Access Key5. Configure DRS Agent IAM Userの手順でダウンロードしたCSVに記載されているSecret Access Keyを入力してください。
最後にディスクについて質問されますがそのままエンターしてください。
完了まで体感5分かかります。

以上の手順を2つのサーバ(wordpress-web, wordpress-db)に対して実施してください。

Agentインストール完了後、AWS Elastic Disaster Recovery(DRS)のSource serversに戻り、Source ServerにAgentをインストールした2サーバが表示されていることを確認します。

登録した直後はReady for recoveryInitial syncになっており、初回同期を実行しています。
初回同期では、以下のタスクを実行しています。

  • セキュリティグループの作成
  • レプリケーションサーバーの起動
  • レプリケーションサーバーのBoot
  • サービスとの認証
  • レプリケーションソフトウェアのダウンロード
  • ステージングディスクの作成
  • ステージングディスクのアタッチ
  • レプリケーションサーバとAWS Replication Agentのペアリング
  • AWS Replication Agentとレプリケーションサーバを接続
  • データ転送の開始

image.png

初回同期が完了すると、Data replication statusHealthy に変わります。

7. Configure Launch Settings

リカバリーインスタンスを起動するため、EC2の起動テンプレートの設定を行います。

AWS Elastic Disaster Recovery(DRS)コンソールで、Source serversを表示し、Source Serverの1つをクリックします。
Launch settingsタブを選択し、General launch settingsEditボタンを押下します。

image.png

Instance type right sizingNoneを選択し、Save settingsボタンを押下します。

image.png

続いて、EC2 launch templateEditボタンを押下します。

image.png

EC2の起動テンプレートボックスで、Editを押下します。
テンプレートバージョンの説明にWorkshopTemplateと入力します。

image.png

インスタンスタイプにt3.smallを選択します。

image.png

ネットワーク設定サブネットTargetPrivateを選択します。
また、ファイアウォール(セキュリティグループ)で、既存のセキュリティグループを選択するを選択します。
そして、共通のセキュリティグループの欄でTargetSecurityGroupを名前に含んだセキュリティグループを選択します。

image.png

ストレージの設定でボリュームの種類をgp3に変更します。

image.png

それ以外はデフォルトのまま、テンプレートのバージョンを作成ボタンを押下します。

作成した起動テンプレートIDを押下します。

image.png

アクションデフォルトバージョンを設定を押下します。

image.png

テンプレートのバージョンWorkshopTemplateを選択し、デフォルトバージョンとして設定ボタンを押下します。

image.png

以上を2サーバに対して実行してください。

8. Failing Over

DRSコンソールで、Source Serverの1つを選択し、Server infoを表示します。

image.png

画面右上にあるInitiate recovery jobボタンを押下し、Initiate Drillを選択します。

image.png

Use most recent dateを選択し、Initiate drillボタンを押下します。

image.png

画面左のRecovery job historyメニューを選択し、Job IDを選択します。
Job logでRecoveryが成功したことを確認します。

image.png

以上を2サーバに対して実行してください。

9. Validating Fail Over

EC2コンソールでインスタンスwordpress-web.onpremsim.envwordpress-db.onpremsim.envが新たに起動されていることを確認します。
wordpress-web.onpremsim.envプライベート IPv4 アドレスをメモしておきます。

image.png

Bastionサーバにログインし、PuTTyします。
Saved Sessionswordpress-webを選択し、Loadボタンを押下します。

image.png

Host Name(or IP address)wordpress-webの部分を先ほどメモしたプライベート IPv4 アドレスに変更し、Openボタンを押下します。

image.png

以下のコマンドを実行し、インスタンスのDNSレコードを更新します。

ADDR=`hostname -I`
HOST=`hostname`
sudo touch /tmp/nsupdate.txt
sudo chmod 666 /tmp/nsupdate.txt
echo "server dns.onpremsim.env" > /tmp/nsupdate.txt
echo "update delete $HOST A" >> /tmp/nsupdate.txt
echo "update add $HOST 86400 A $ADDR" >> /tmp/nsupdate.txt
echo "update delete $HOST PTR" >> /tmp/nsupdate.txt
echo "update add $HOST 86400 PTR $ADDR" >> /tmp/nsupdate.txt
echo "send" >> /tmp/nsupdate.txt
sudo nsupdate /tmp/nsupdate.txt

以上を2サーバ実行してください。

最後にBastionサーバのChromeブラウザを起動し、http://wordpress-web.onpremsim.envにアクセスしてください。
以下のように表示されれば成功です。

image.png

後片付け

CloudFormationでネストされたスタック以外のスタックを選択し、削除を実行してください。
スタックの削除に失敗する場合があります。私の場合、再度削除を実施することで解決しました。
それでも削除に失敗するリソースがある場合、CloudFormationからではなく、手動で直接削除してください。

image.png

EC2コンソールにを表示し、Recoveryしたサーバ2台を終了します。

image.png

EC2コンソールでボリュームメニューを選択し、本ハンズオンで生成した2つのボリュームをチェックします。アクションボリュームの削除を選択します。

image.png

EC2コンソールでスナップショットメニューを選択し、本ハンズオンで生成した1つのスナップショットをチェックします。アクションスナップショットの削除を選択します。

image.png

DRSコンソールでRecovery instancesを選択し、表示されているサーバをチェックし、ActionsDisconnect from AWSを押下してください。
ダイアログでDisconnectボタンを押下してください。

image.png

続いて、再度サーバをチェックし、Delete recovery instancesを押下してください。ダイアログでDeleteボタンを押下してください。

image.png

DRSコンソールでSource serversを選択し、表示されているサーバをチェックし、ActionsDisconnect from AWSを押下してください。

image.png

続いて、再度サーバをチェックし、Delete serverを押下してください。ダイアログでPermanently deleteボタンを押下してください。

image.png

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4