AWSのマネジメントコンソール…
AWSでは、実際に手を動かして学ぶワークショップのコンテンツも多数公開されています。
本記事は、それらのうち「アプリケーション移行ワークショップ」を実施した記録です。
このワークショップを通じて、AWSクラウドに移行する方法のうち、以下のものを学ぶことができます。
前回はAWS Database Migration Serviceを用いて、移行元(ソース)のデータベースから移行先(ターゲット)のRDSインスタンスへ、継続的なレプリケーションを設定しました。
今回は全5回のうちの第3回として、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)では、以下の流れでサーバを移行していきます。
それでは作成していきます。
ワークショップの手順とは異なりますが、のちほどターゲットウェブサーバが使用するセキュリティグループを作成します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
セキュリティグループ名 | 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のレプリケーションエージェントをインストールします。
「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」欄を見ると、データの転送が始まっていることがわかります。
この時点の概要図を示します。
データ同期を待つ間に、次の手順でターゲットの起動テンプレートを設定します。
AWSマネジメントコンソールで、ターゲットとして起動するインスタンスの設定を変更します。
AWSマネジメントコンソールの「Application Migration Service > Source servers」へ移動し、対象のSource server nameをクリックします。
「Launch settings」タブの「General launch settings」セクションで「Edit」ボタンをクリックします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
Instance type right sizing | Off | EC2起動テンプレートを上書きしてRecommended instance typeで起動するか |
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 | データ同期が終了し、カットオーバーが完了した状態 |
カットオーバーインスタンス(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内の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マネジメントコンソールにアクセスします。
設定値は以下のとおりです。
パラメータ | 値 | 備考 |
---|---|---|
タイプ | MYSQL/Aurora | |
ソース | WEB-SG | 「ターゲットウェブサーバ用セキュリティグループ作成」で作成したもの |
カットオーバーインスタンス(Webserver)の「パブリックIPv4 DNS」の値を確認します。
WebブラウザでAWSマネジメントコンソールにアクセスします。
Webブラウザで『Webserverの「パブリックIPv4 DNS」の値』へアクセスすると、移行先(ターゲット)環境でECサイトが動作していることを確認することができます。