プライベートネットワーク経由でAWS MGNを使用する

プライベートネットワーク経由でAWS MGNを試してみました。
2022.08.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大家好、AWS事業本部の西野です。

プライベートネットワークを経由したAWS Application Migration Service (AWS MGN) の利用を検証してみました。

前提条件

  • オンプレミス環境を模したVPC(Source VPC)を用意し、ステージングエリア(Staging VPC)とVPC Peeringで接続しています。
  • 「ソースサーバー(AWS Replication Agent)からの通信」と「レプリケーションサーバーからの通信」の両方をプライベートネットワークで実行する構成です。
    • 前者のみをプライベートネットワークで行なう構成も可能です。
  • セキュリティグループのみでトラフィック制御を実施しています。
    • ネットワークACLでは全通信を許可(デフォルトの状態)
    • VPCエンドポイントポリシーではすべてのアクセスを許可(デフォルトの状態)
  • プライベートネットワーク経由の利用に特有ではない事項については記載をほぼ割愛しています。
    • AWS MGNの基本的な仕組み、初期設定、AWS Replication Agentのインストール条件など
  • アジアパシフィック(東京)リージョン/ ap-northeast-1 で検証しています。
    • 別リージョンで使用する場合には各種のパラメータにおけるリージョン部分を変更してください。
  • ソースサーバーとしてAmazon Linux 2のインスタンスを用いています。

検証

VPCエンドポイントの作成

ステージングエリアのVPCに以下のVPCエンドポイントを作成します。

  • AWS MGN (Interface)
  • Amazon EC2 (Interface)
  • S3 (Interface)
  • S3 (Gateway)

パラメータは下記のとおりです。

サービス名 タイプ Private DNS Name セキュリティグループ ルートテーブル
com.amazonaws.ap-northeast-1.mgn Interface 有効化 ソースサーバー(AWS Replication Agent)およびレプリケーションサーバーからのHTTPS 443を許可 対象外
com.amazonaws.ap-northeast-1.ec2 Interface 有効化 レプリケーションサーバーからのHTTPS 443を許可 対象外
com.amazonaws.ap-northeast-1.s3 Interface 対象外(S3のInterface型VPCエンドポイントはPrivate DNS Nameをサポートしていないため) ソースサーバー(AWS Replication Agent)からのHTTPS 443を許可 対象外
com.amazonaws.ap-northeast-1.s3 Gateway 対象外 対象外 レプリケーションサーバーを起動させるサブネットを指定

Replication template

Replication templateの設定を変更します。 ここでの注意点は主に3つです。

  • Staging area subnet
    • ソースサーバーから通信可能なサブネットを指定します。
  • Security groups
    • "Additional security groups"にソースサーバーからのTCP 1500を許可したセキュリティグループを設定します。
    • "Always use Application Migration Service security group"にチェックが入っているとMGNがセキュリティグループを自動で作成するため、これを外しておくと良いでしょう。
  • Use private IP for data replication
    • チェックを入れます。説明の通り、ここにチェックを入れるとソースサーバー・レプリケーションサーバー間のデータレプリケーションがプライベートIPで実行されます。

VPCエンドポイントの名前解決

VPCエンドポイントに設定されたPrivate DNS Nameの名前解決をソースサーバー側から実行させる必要があります。
ドキュメントではRoute53リゾルバーを使った方法が紹介されていますが、本稿ではhostsファイルを利用します。

MGNおよびEC2のVPCエンドポイントに紐づくENIに設定されたプライベートIPを確認した後、以下のとおりソースサーバーのhostsファイルに設定します。 ENIのプライベートIPは環境によって異なるのでご注意ください。

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost6 localhost6.localdomain6
192.168.128.176 mgn.ap-northeast-1.amazonaws.com
192.168.128.92  ec2.ap-northeast-1.amazonaws.com

AWS Replication Agentインストール

まずはS3のVPCエンドポイント(Interface)経由でAgentのインストーラーをダウンロードします。
通常のダウンロードとは異なりS3 VPCエンドポイント(Interface)のDNS名を渡してあげる必要があります。このDNS名はVPCエンドポイントの詳細から確認可能です。

# コマンド
wget -O ./aws-replication-installer-init.py \ 
https://aws-application-migration-service-<aws_region>.bucket.<s3-endpoint-DNS-name>/latest/linux/aws-replication-installer-init.py
# 実行例
wget -O ./aws-replication-installer-init.py https://aws-application-migration-service-ap-northeast-1.bucket.vpce-0707d04f45c701548-75kfv1hy.s3.ap-northeast-1.vpce.amazonaws.com/latest/linux/aws-replication-installer-init.py
--2022-08-17 10:43:16--  https://aws-application-migration-service-ap-northeast-1.bucket.vpce-0707d04f45c701548-75kfv1hy.s3.ap-northeast-1.vpce.amazonaws.com/latest/linux/aws-replication-installer-init.py
aws-application-migration-service-ap-northeast-1.bucket.vpce-0707d04f45c701548-75kfv1hy.s3.ap-northeast-1.vpce.amazonaws.com (aws-application-migration-service-ap-northeast-1.bucket.vpce-0707d04f45c701548-75kfv1hy.s3.ap-northeast-1.vpce.amazonaws.com) をDNSに問いあわせています... 192.168.128.222
aws-application-migration-service-ap-northeast-1.bucket.vpce-0707d04f45c701548-75kfv1hy.s3.ap-northeast-1.vpce.amazonaws.com (aws-application-migration-service-ap-northeast-1.bucket.vpce-0707d04f45c701548-75kfv1hy.s3.ap-northeast-1.vpce.amazonaws.com)|192.168.128.222|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 14387 (14K) [binary/octet-stream]
`./aws-replication-installer-init.py' に保存中

100%[===========================================================================================================================================================================>] 14,387      --.-K/s 時間 0s

2022-08-17 10:43:16 (55.1 MB/s) - `./aws-replication-installer-init.py' へ保存完了 [14387/14387]

続いて下記のコマンドでインストールを実行します。
こちらも通常のインストールとは異なりS3 VPCエンドポイント(Interface)のDNS名を渡します。

# コマンド
sudo python3 aws-replication-installer-init.py \
--region <aws_region> \
--aws-access-key-id <access-key> \
--aws-secret-access-key <secret-key> \
--s3-endpoint <s3-endpoint-DNS-name>
# 実行例
sudo python3 aws-replication-installer-init.py \
--region ap-northeast-1 \
--aws-access-key-id AKIATWP57PEXAMPLEKEY \
--aws-secret-access-key 7IpAkAmhvszxcvbnmasdfghjqwkertyuisdf \
--s3-endpoint aws-application-migration-service-ap-northeast-1.bucket.vpce-0707d04f45c701548-75kfv1hy.s3.ap-northeast-1.vpce.amazonaws.com
The installation of the AWS Replication Agent has started.
Identifying volumes for replication.
Choose the disks you want to replicate. Your disks are: /dev/xvda,/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:
Identified volume for replication: /dev/nvme0n1 of size 8 GiB
All volumes for replication were successfully identified.
Downloading the AWS Replication Agent onto the source server... Finished.
Installing the AWS Replication Agent onto the source server... Finished.
Syncing the source server with the Application Migration Service Console... Finished.
The following is the source server ID: s-619c05203bfe59c1d.
You now have 2 active source servers out of a total quota of 20.
Learn more about increasing source servers limit at https://docs.aws.amazon.com/mgn/latest/ug/MGN-service-limits.html
The AWS Replication Agent was successfully installed.

正常にインストールできたのでAWS MGNコンソールからデータレプリケーションのステータスを確認してみます。

Initial syncが始まっており、プライベートネットワーク経由でレプリケーションできていることがわかります。

あらためて通信経路を見てみる

以上が必要な設定のすべてです。

ソースサーバー(AWS Replication Agent)およびレプリケーションサーバーそれぞれの視点から必要な通信経路・設定をあらためて確認してみましょう。
なお、先述のとおり、ネットワークACLおよびVPCエンドポイントポリシーではすべての通信を許可する設定になっています。

ソースサーバー(AWS Replication Agent)

まずはソースサーバからの通信についてです。

ソースサーバーはMGN・S3のVPCエンドポイント(Interface)およびレプリケーションサーバーと通信します。

  • ステージングエリアへの接続
    • ソースサーバーが存在するネットワークからステージングエリアへ接続できる必要があります。ソースサーバーがオンプレミス環境にある場合、Direct ConnectやSite-to-site VPNでAWSにつなげる必要があります。
  • セキュリティグループ
    • MGN・S3のVPCエンドポイントのセキュリティグループがソースサーバーからのHTTPS(443)を許可している必要があります。
    • レプリケーションサーバーのセキュリティグループがソースサーバーからのTCP(1500)を許可している必要があります
  • ルートテーブル
    • レプリケーションサーバーのサブネットに紐づくルートテーブルにソースサーバー側ネットワークへのルートを追加しましょう。

レプリケーションサーバー

続いてレプリケーションサーバーです。

レプリケーションサーバーはMGN・EC2のVPCエンドポイント(Interface)およびS3のVPCエンドポイント(Gateway)と通信します。 ソースサーバーは無関係なので上図からは省いてあります。

  • セキュリティグループ
    • MGN・EC2のVPCエンドポイントのセキュリティグループがレプリケーションサーバーからのHTTPS(443)を許可している必要があります。
  • ルートテーブル(VPCエンドポイントの設定)
    • S3用VPCエンドポイント(Gateway)の設定において、レプリケーションサーバーのサブネットに紐づくルートテーブルを指定しましょう。

参考

Connect to Application Migration Service data and control planes over a private network

終わりに

このブログがほんの少しでも世界を良くできれば嬉しいです。
元コンサルティング部の西野 (@xiyegen) がお送りしました。