アプリケーション移行ワークショップやってみた(3) – AWS MGNでのリホスト

AWSでは、実際に手を動かして学ぶワークショップのコンテンツも多数公開されています。
本記事は、それらのうち「アプリケーション移行ワークショップ」を実施した記録です。

このワークショップを通じて、AWSクラウドに移行する方法のうち、以下のものを学ぶことができます。

  • AWS Database Migration Service(AWS DMS)を使ったデータベースのリプラットフォーム
  • AWS Application Migration Service(AWS MGN)を使ったウェブサーバのリホスト
  • Amazon Elastic Container Service(Amazon ECS)で稼働するコンテナへの移行による、ウェブサーバのモダナイゼーション

前回はAWS Database Migration Serviceを用いて、移行元(ソース)のデータベースから移行先(ターゲット)のRDSインスタンスへ、継続的なレプリケーションを設定しました。
今回は全5回のうちの第3回として、AWS Application Migration Service(AWS MGN)を使ったウェブサーバのリホストを行います。

目次
  1. AWS Application Migration Service(AWS MGN)を使用したウェブサーバのリホスト
    1. ターゲットウェブサーバ用セキュリティグループ作成
    2. レプリケーションサーバテンプレート設定
    3. レプリケーションエージェントをインストール
    4. Launch settings変更
    5. テストインスタンスの起動
    6. カットオーバー準備完了
    7. カットオーバーインスタンスの起動
    8. カットオーバーの確定
    9. カットオーバーインスタンスのwp-config.php変更
    10. ターゲットデータベース用セキュリティグループにインバウンドルール追加
    11. Webブラウザでのアクセス確認
  2. まとめ

AWS Application Migration Service(AWS MGN)を使用したウェブサーバのリホスト

マニュアル:https://application-migration-with-aws.workshop.aws/en/app-mig-service.html

この章では、AWS Application Migration Service(AWS MGN)を使用してウェブサーバのリホストを体験します。
具体的には、移行元サーバ(「環境の準備」で作成した「Source-Webserver」)を、Amazon EC2へ移行します。

登場するものは次のとおりです。

要素名 設定する名前 説明
ソースサーバ Source-Webserver 「環境の準備」で作成した移行元のサーバです
レプリケーションエージェント ソースサーバにインストールするソフトウェアで、レプリケーションサーバへソースサーバのデータを転送します。
AWS Application Migration Serviceの操作によって自動でアンインストールされます
レプリケーションサーバ AWS Application Migration Service Replication Server レプリケーションエージェントから送信されたデータを受信し、EBSボリュームにデータを保持するサーバです。
AWS Application Migration Serviceの操作によって自動で作成、削除されます
コンバージョンサーバ AWS Application Migration Service Conversion Server EBSスナップショットをもとに、ターゲットサーバがAWS上で動作するように変換を行うサーバです。
AWS Application Migration Serviceの操作によって自動で作成、削除されます
テストインスタンス Webserver テスト用のターゲットサーバです。
AWS Application Migration Serviceの操作によって自動で作成、削除されます
カットオーバーインスタンス カットオーバー用のターゲットサーバです。
AWS Application Migration Serviceの操作によって自動で作成、削除されます

AWS Application Migration Service(AWS MGN)では、以下の流れでサーバを移行していきます。

  • レプリケーションエージェントをインストール
  • AWSへデータ複製
  • テストインスタンス起動、テスト
  • テストインスタンス終了、カットオーバーインスタンス起動

それでは作成していきます。

ターゲットウェブサーバ用セキュリティグループ作成

ワークショップの手順とは異なりますが、のちほどターゲットウェブサーバが使用するセキュリティグループを作成します。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「EC2 > セキュリティグループ」へ移動します
  • 「セキュリティグループを作成」ボタンをクリックします
  • 設定値のとおりセキュリティグループを作成します

設定値は以下のとおりです。

パラメータ 備考
セキュリティグループ名 WEB-SG
説明 Security group for the target Web
VPC TargetVPC 「環境の準備」で作成したもの

WEB-SGには、HTTPとSSHのインバウンドセキュリティグループルールを追加します。

パラメータ 備考
タイプ HTTP
ソースタイプ カスタム アクセスするのが自分のみであれば「自分のIP」
ソース 0.0.0.0/0 アクセスするのが自分のみであれば自分のIP
パラメータ
タイプ ssh
ソースタイプ 自分のIP
ソース (自分のIP)

レプリケーションサーバテンプレート設定

AWSマネジメントコンソールでAWS Application Migration Serviceのレプリケーションサーバのテンプレートを設定します。

操作内容

初めてAWS Application Migration Serviceを使うときは「Get Started」ボタンを押したとき、それ以降は「Application Migration Service > Settings」に移動した先のページで設定を行うことができます。

設定値は以下のとおりです。

パラメータ 備考
Staging area subnet TargetVPC-public-a 「環境の準備」で作成したもの

レプリケーションエージェントをインストール

ソースウェブサーバへAWS MGNのレプリケーションエージェントをインストールします。

ソースウェブサーバ(Source-Websever)へ接続

「AWS CloudFormationの出力確認」で確認した「WebServerDNSName」「WebServerUsername」「SSHKeyURL」の値を用いて、移行元(ソース)のウェブサーバへ接続します。

クライアントPCでSSHKeyをダウンロードし、ソースウェブサーバに接続するコマンドは以下のようなイメージです。

接続コマンドのイメージ

> Invoke-WebRequest -OutFile migration_workshop.pem {{SSHKeyURLの値}}
 
> ssh -i migration_workshop.pem -l {{WebServerUsernameの値}} {{WebServerDNSNameの値}}

レプリケーションエージェントインストール

インストールには「AWS CloudFormationの出力確認」で確認した「AppMigServiceAccessKey」「AppMigServiceSecretAccessKey」の値を用います。

## インストーラーのダウンロード
$ wget -O ./aws-replication-installer-init.py https://aws-application-migration-service-us-west-2.s3.amazonaws.com/latest/linux/aws-replication-installer-init.py

## エージェントのインストール(各プロンプトに入力する)
$ sudo python3 aws-replication-installer-init.py
The installation of the AWS Replication Agent has started.
AWS Region Name: us-west-2 ← 入力
AWS Access Key ID: {{AppMigServiceAccessKeyの値}} ← 入力
AWS Secret Access Key: {{AppMigServiceSecretAccessKeyの値}} ← 入力 ※画面には表示されない
Identifying volumes for replication.
Choose the disks you want to replicate. Your disks are: /dev/nvme1n1,/dev/nvme0n1
To replicate some of the disks, type the path of the disks, separated with a comma (for example, /dev/sda,/dev/sdb). To replicate all disks, press Enter: ←エンターキーを入力

「The AWS Replication Agent was successfully installed.」と出力されればインストールは完了です。

レプリケーションエージェントインストール後の確認

AWSマネジメントコンソールの「EC2 > インスタンス」へ移動すると、「AWS Application Migration Service Replication Server」名前でレプリケーションサーバが起動しています。

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動すると、一覧にソースサーバが追加されています。
「Data replication status」欄を見ると、データの転送が始まっていることがわかります。

この時点の概要図を示します。

データ同期を待つ間に、次の手順でターゲットの起動テンプレートを設定します。

Launch settings変更

AWSマネジメントコンソールで、ターゲットとして起動するインスタンスの設定を変更します。

General launch settings変更

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、対象のSource server nameをクリックします。
「Launch settings」タブの「General launch settings」セクションで「Edit」ボタンをクリックします。

設定値は以下のとおりです。

パラメータ 備考
Instance type right sizing Off EC2起動テンプレートを上書きしてRecommended instance typeで起動するか

EC2 Launch Template変更

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、対象のSource server nameをクリックします。
「Launch settings」タブの「EC2 Launch Template」セクションで「Modify」ボタンをクリックします。

設定値は以下のとおりです。

セクション パラメータ 備考
インスタンスタイプ インスタンスタイプ t3.micro
リソースタグ キー「Name」のもの Webserver 値を「Webserver」に変更
ネットワーク設定 サブネット TargetVPC-public-a 「環境の準備」で作成したもの
ファイアウォール(セキュリティグループ) 既存のセキュリティグループを選択する
共通のセキュリティグループ WEB-SG 「ターゲットウェブサーバ用セキュリティグループ作成」で作成したもの
パブリックIPの自動割り当て 有効化

作成した起動テンプレートを表示し、「バージョン」タブで作成したバージョン(最新のバージョン)を選択、「アクション > デフォルトバージョンを設定」をクリックします。
これは、Application Migration Serviceがデフォルトの起動テンプレートを参照するためです。

テストインスタンスの起動

テストインスタンスを起動します。

操作内容

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、対象の「Migration lifecycle」が「Ready for testing」になっていることを確認したら、テストインスタンスを起動するため「Test and Cutover」メニューから「Launch test instances」をクリックします。

操作後の説明

AWSマネジメントコンソールの「EC2 > インスタンス」へ移動すると、「AWS Application Migration Service Conversion Server」というインスタンスが起動しています。
しばらくすると「AWS Application Migration Service Conversion Server」は終了し「Webserver」というインスタンスが起動します。

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、「Migration lifecycle」を見ると「Test in progress」というステータスになっています。

この時点の概要図を示します。

作業前後でのSource serversのステータスは以下のようになります。

Migration lifecycle Next step 説明
作業前 Ready for testing Launch test instance ソースサーバへレプリケーションエージェントをインストールし、AWSへのデータ転送が完了した状態
作業後 Test in progress Complete testing and mark as ‘Ready for cutover’ テストインスタンスが起動した状態

実際の移行作業ではテストインスタンスを用いてAWSでの動作をテストしていきますが、ここではカットオーバー準備完了とします。

カットオーバー準備完了

テストインスタンスを終了し、カットオーバー準備完了とします。

操作内容

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、「Test and Cutover」メニューから「Mark as “Ready for cutover”」をクリックします。

確認のプロンプトの中で「Yes, terminate launched instances (recommended).(※起動されたインスタンスを終了します)」にチェックが入っていますが、そのままにします。

操作後の説明

AWSマネジメントコンソールの「EC2 > インスタンス」へ移動すると、テストインスタンス「Webserver」が終了しています。

この時点の概要図を示します。

作業前後でのSource serversのステータスは以下のようになります。

Migration lifecycle Next step 説明
作業前 Test in progress Complete testing and mark as ‘Ready for cutover’ テストインスタンスが起動した状態
作業後 Ready for cutover Launch cutover instance テストインスタンスを用いたテストが完了、テストインスタンスを終了(削除)しており、カットオーバー準備が整った状態

カットオーバーインスタンスの起動

カットオーバーインスタンスを起動します。

操作内容

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、対象の「Migration lifecycle」が「Ready for cutover」になっていることを確認したら、カットオーバーインスタンス起動のため「Test and Cutover」メニューから「Launch cutover instances」をクリックします。

操作後の説明

AWSマネジメントコンソールの「EC2 > インスタンス」へ移動すると、「AWS Application Migration Service Conversion Server」というインスタンスが起動しています。
しばらくすると「AWS Application Migration Service Conversion Server」は終了し「Webserver」というインスタンスが起動します。

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、「Migration lifecycle」を見ると「Cutover in progress」というステータスになっています。

この時点の概要図を示します。

作業前後でのSource serversのステータスは以下のようになります。

Migration lifecycle Next step 説明
作業前 Ready for cutover Launch cutover instance テストインスタンスを用いたテストが完了、テストインスタンスを終了(削除)しており、カットオーバー準備が整った状態
作業後 Cutover in progress Finalize cutover カットオーバーインスタンスが起動した状態

カットオーバーの確定

ソースウェブサーバのレプリケーションエージェントをアンインストールし、カットオーバーを確定させます。

操作内容

AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、対象の「Migration lifecycle」が「Cutover in progress」になっていることを確認します。
「Test and Cutover」メニューから「Finalize cutover」をクリックします。

操作後の説明

ソースウェブサーバを確認すると、レプリケーションエージェントがアンインストールされています。
AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、「Migration lifecycle」を見ると「Cutover complete」というステータスになっています。

この時点の概要図を示します。

作業前後でのSource serversのステータスは以下のようになります。

Migration lifecycle Next step 説明
作業前 Cutover in progress Finalize cutover カットオーバーインスタンスが起動した状態
作業後 Cutover complete Mark as archived データ同期が終了し、カットオーバーが完了した状態

カットオーバーインスタンスのwp-config.php変更

カットオーバーインスタンス(Webserver)のWordPress設定ファイルを変更し、データベースとしてターゲットのRDS(database-1)を参照するようにします。

カットオーバーインスタンスへ接続

SSH接続に用いるユーザやpemファイルは移行元(ソース)のウェブサーバと同じもの、つまり「AWS CloudFormationの出力確認」で確認した「WebServerUsername」「SSHKeyURL」の値を用います。
AWS マネジメントコンソールの「EC2 > インスタンス」へ移動し、カットオーバーインスタンス(Webserver)の「パブリックIPv4 DNS」の値を確認します。

クライアントPCでSSHKeyをダウンロードし、カットオーバーインスタンス(ターゲットウェブサーバ)に接続するコマンドは以下のようなイメージです。

接続コマンドのイメージ

> Invoke-WebRequest -OutFile migration_workshop.pem {{SSHKeyURLの値}}
 
> ssh -i migration_workshop.pem -l {{WebServerUsernameの値}} {{Webserver「パブリックIPv4 DNS」の値}}

wp-config.php変更

カットオーバーインスタンス(ターゲットウェブサーバ)で、手順のとおりwp-config.php内のdefine()関数を変更/追加します。

変数コマンドの例

$ sudo vim /var/www/html/wp-config.php

編集内容は以下のとおりです。

constant_name value 備考
DB_USER admin 変更
DB_PASSWORD ******** 前回「ターゲットデータベース作成」で設定したマスターパスワード
DB_HOST {{database-1の「エンドポイント」の値}} 前回「ターゲットデータベース作成」で作成したRDSインスタンスのエンドポイント
WP_SITEURL http://{{Webserver「パブリックIPv4 DNS」の値}} 追加
WP_HOME http://{{Webserver「パブリックIPv4 DNS」の値}}

ターゲットデータベース用セキュリティグループにインバウンドルール追加

カットオーバーインスタンス(ターゲットウェブサーバ)からデータベースへアクセスできるよう、セキュリティグループへルールを追加します。

操作内容

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「EC2 > セキュリティグループ」へ移動します
  • 「ターゲットデータベース用セキュリティグループ作成」で作成したDB-SGを選択します。
  • 「アクション」メニューから「インバウンドのルールを編集」をクリックします
  • 設定値のとおりインバウンドルールを追加します

設定値は以下のとおりです。

パラメータ 備考
タイプ MYSQL/Aurora
ソース WEB-SG 「ターゲットウェブサーバ用セキュリティグループ作成」で作成したもの

Webブラウザでのアクセス確認

カットオーバーインスタンス(Webserver)の「パブリックIPv4 DNS」の値を確認します。

WebブラウザでAWSマネジメントコンソールにアクセスします。

  • 「EC2 > インスタンス」へ移動します
  • 「WebServer」を選択します。
  • 「詳細」タブの「パブリックIPv4 DNS」の値を確認します

Webブラウザで『Webserverの「パブリックIPv4 DNS」の値』へアクセスすると、移行先(ターゲット)環境でECサイトが動作していることを確認することができます。

まとめ

  • AWS Application Migration Serviceを用いてウェブサーバをAmazon EC2へ移行しました
  • 移行先(ターゲット)環境は以下のようになっています
  • 次回は、今回移行したウェブサーバを、Amazon Elastic Container Service(Amazon ECS)で稼働するコンテナを用いた構成にリプラットフォームします