MGN 原理及使用方式 (workshop & why)
說明 AWS MGN 的初始設定、Agent 安裝、測試執行個體與 cutover 的流程和原理。
Overall Workflow

初始設定
MGN 基本配置:啟用及設置 replication template
名詞解釋
- Replication Template:決定資料如何被複製,之後每台新加入的 source server 都會自動套用這份設定。裡面包含的內容涵蓋 staging subnet、replication server 機型、data routing/throttling、EBS 加密、安全群組、標籤等。
- Data Routing:預設走公網進行複製,但如果要使用 VPN/DX 等私有連線複製,則需選擇「Use private IP」選項切換
- Throttling:避免複寫把你客戶端的頻寬吃滿,導致正常業務流量受影響
- 計算 TCP 埠 1500 所需的頻寬 → MGN 使用 TCP port 1500 進行複製
- AWS 複製代理程式消耗多少頻寬?
- 如何控制用於複製的頻寬?
- Staging subnet:是複寫機制實際運作的地方,AWS 會在這裡啟動輕量的 Replication Server(t3.small),接收來源伺服器抄過來的資料並寫進 EBS 磁碟區;測試、轉換啟動時,也會在這裡短暫啟動 Conversion Server 把資料轉成可開機的快照
-
在該地區初次使用時會需要建立對應的 IAM roles,點選 set up service 後會自動設置完 replication template

-
自動設置的 replication template

-
Replication template 可設置的內容

-
需注意 quota 裡面最多可使用的 source server 數量預設為 150

VPC Endpoints
為確保 end to end 都走加密、私有通道,因此要在 staging subnet 裡面新增 MGN / S3 / EC2 等 VPC endpoints

- AWS MGN VPC interface endpoint:由安裝在來源伺服器上的 AWS 複製代理程式和暫存子網路中的 AWS MGN 複製和轉換伺服器共同使用
- Amazon EC2 VPC interface endpoint:僅由暫存子網路中的 AWS MGN 複製和轉換伺服器使用
- Amazon S3 VPC interface endpoint:僅需要讓內部部署代理程式透過 VPN 或 Direct Connect 與暫存 VPC 通訊,然後連接到 Amazon S3 儲存貯體(讓地端 server 抓得到 S3 裡面的 agent script)
- Amazon S3 VPC gateway endpoint:僅用於暫存區域伺服器(複製、轉換)存取 Amazon S3
- Route53 Resolver 入站端點:僅需要讓來源伺服器的代理程式能夠從來源伺服器解析 VPC 端點的私有 DNS 名稱
新增 MGN endpoint 時要記得選取正確的 VPC & staging subnet

設置 MGN Agent IAM Role
建立一個 Role,attach 這個 policy AWSApplicationMigrationAgentInstallationPolicy,並且 trust 要使用 MGN 的 Account ID,命名為 MGN_Agent_Installation_Role

Default Launch Template
等於預設啟動的 EC2 launch template
Post-launch Template
真正啟動 EC2 之後要執行的動作,像是直接 SSM agent 或者進行 DR 備份等
配置和部署
Source Servers 安裝 MGN Agent
Installing the AWS Replication Agent on Linux servers - AWS Transform MGN
agent 裡面做了類似 iam role anywhere 的機制,使用 x.509 憑證來確保 agent 不需到期重複驗證(有自動輪替效果)
1. 確認地端堡壘機與 AWS 網路連通
- 測試控制層路徑:堡壘機 → S3 VPC endpoint(443)、堡壘機 → MGN VPC endpoint(443)
- 額外測試資料層路徑:telnet/nc 到 Replication Server 的 TCP 1500(這條才是實際複製會用到的路徑,光測 443 不夠)
- 確認堡壘機能透過 Route53 Resolver 入站端點解析到這些 VPC endpoint 的私有 DNS 名稱
2. 用 IAM Roles Anywhere 讓堡壘機取得暫時憑證
- 前提:需先建立 Trust Anchor(綁定 CA)+ Profile(指向目標角色)
MGN_Agent_Installation_Role的信任政策要改成信任rolesanywhere.amazonaws.com,並用條件式限定來源為特定 Trust Anchor ARN(不能沿用原 workshop 那份「信任此帳戶」的寫法)- Roles Anywhere 的
CreateSession一次到位直接換回目標角色的暫時憑證,不是「先變身分、再 assume」的兩段式流程 - 角色本身維持只掛
AWSApplicationMigrationAgentInstallationPolicy,符合最小權限
3. 下載安裝腳本
- 在堡壘機執行 wget,來源為該區域的 MGN 安裝腳本 S3 位置
- 決定分送方式:複製到各 source server(收斂 S3 開通面到堡壘機一台)vs. 各 source server 自行 wget(官方預設寫法,但每台都要能連到 S3 endpoint)
- 若選擇分送模式,仍需在步驟 4 安裝指令中帶 S3 endpoint 參數,讓安裝程式執行期間額外的 S3 呼叫也走私有路徑(複製檔案本身不足以完全去除對 S3 的依賴)
4. 帶憑證與 endpoints 執行 aws-replication-installer-init
- 必要參數:
-region、-aws-access-key-id、-aws-secret-access-key、-aws-session-token(暫時憑證專用) - 私有路徑參數:
-endpoint(MGN 端點,需為雙棧端點)+ S3 endpoint 參數(避免對外開防火牆) - 執行後進入磁碟識別/選擇階段,確認識別到的磁碟與預期一致再繼續


現在這個階段 server 已經開始抄寫
抄寫會分成兩階段 (1) 初始同步 (2) 寫入過濾器,第一階段會將整顆磁碟複製到 replication server 上,第二階段會偵測磁碟 I/O,有變更的才會進行修改。如果變更量超過 250MB,會退回去讀整顆磁碟;同時也會在 console 上看到 backlog 的狀態
更新 Target Instance 設置
可以依據不同 source server 更新各自的 launch settings,查看路徑如下
-
左側選單選擇 Source servers 後,點選其中一個主機名稱以查看伺服器詳細資訊

-
選擇 Launch settings 可以看到 default launch template 的設置,可以在這邊做修改。當然也可以使用 cli 等工具進行批次調整

App & Waves
Applications
為了提供業務需求而一起運作的 server group,這些 server 之間存在 dependencies,例如 backend server + DB 的組合,必須網路聯通才有辦法正確運作。這些 servers 必須要一起遷移,才能在 production 環境繼續正確運作

Waves
計劃在指定期間內一起遷移的 Application group。Waves 中的 applications 不一定具有相依性,通常可以將低優先級的 applications 放在第一波次進行遷移,確認路徑、SOP 後,再以更穩定的流程去遷移高優先級 wave 中的 applications

測試和驗證
MGN 搬遷生命週期
-
Not Ready - 伺服器正在進行初始同步過程,尚未準備好進行測試。根據網路頻寬和來源伺服器的大小,此過程可能需要幾小時到幾天的時間。
-
Ready for testing - 伺服器已成功添加到應用程式遷移服務,且初始同步已完成。現在可以為此伺服器啟動測試或轉換執行個體。
-
Test in progress - 目前正在為此伺服器啟動測試執行個體。
-
Ready for cutover - 此伺服器已經過測試,現在可以啟動轉換執行個體。
-
Cutover in progress - 目前正在為此伺服器啟動轉換執行個體。
-
Cutover complete - 此伺服器已轉換。此伺服器上的所有資料都已遷移到轉換執行個體。

啟動測試執行個體
Question:跟正式 cutover 差在哪?
底層技術路徑一模一樣(同一套 Launch Conversion Server → 轉換成可開機快照 → 啟動執行個體的流程,用的也是同一份 launch settings)。真正的差異在「目的」跟「後續動作」,不是技術機制:
- Test:純驗證用途,source server 正常運作、複寫持續進行,不影響正式環境;驗證完通常會把這個 test instance 終止掉。
- Cutover:這是要成為正式環境的那一個;發起前建議先關閉 source server;官方文件也提到,每次執行新的轉換時,MGN 會先刪除先前啟動的測試執行個體及相依資源,再啟動反映最新狀態的新轉換執行個體;轉換完成後接的是 finalize(而非單純終止)。
- Console 上的生命週期狀態也不同:Ready for testing → Test in progress,是一條路;Ready for cutover → Cutover in progress → Cutover complete,是另一條路,兩者不會混在一起。
-
一旦伺服器在 AWS MGN 主控台上的狀態變更為「Ready for testing」,您就可以啟動該伺服器的測試執行個體。

-
選擇要以測試模式啟動的執行個體。您可以選擇對應於 WordPress 應用程式的兩個伺服器。選擇右上角的 Test and cutover,然後選擇 Launch test instance。

-
這將把遷移生命週期的狀態更改為「Test in progress」

-
可以在遷移儀表板上檢查測試狀態。選擇清單中的任何伺服器以進入該伺服器的遷移儀表板

下一步應該是驗證已啟動的伺服器,以確保轉換過程已完成。但在我們可以驗證測試執行個體之前,我們必須等待10-15分鐘讓已啟動的任務完成。
在此期間,我們將對來源伺服器進行額外的變更,為下一個遷移步驟(最終轉換)做準備。然後我們將回到新啟動的測試執行個體的驗證,並繼續進行遷移生命週期。
Post-launch command
使用步驟如下:
-
Console 設定 Post-launch Template SSM 整合(開啟執行的開關)


-
把腳本複製到 source server 的固定路徑(放進去要被執行的內容,也會被 MGN 抄去 target)
-
target instance 開機時,SSM 自動化去那個固定路徑撿腳本執行
- Linux 路徑:
/boot/post_launch/ - Windows 路徑:
C:\Program Files (x86)\AWS Replication Agent\post_launch\
- Linux 路徑:
驗證測試執行個體
啟動測試執行個體將需要約 10-15 分鐘才能完成。一旦啟動任務完成,您應該在 AWS 應用程式遷移服務 主控台的來源伺服器清單中看到以下更新,並在警示欄中看到綠色的 Launched 狀態

在此步驟中,我們將驗證新啟動的測試執行個體具有正確的配置,並能夠在 AWS 上啟動。這包括:
-
檢查所有執行個體是否通過系統狀態檢查和執行個體狀態檢查(2/2 檢查)在 Amazon EC2 主控台中
-
驗證目標 AWS 配置是否正確:
- 執行個體已在正確的目標子網路中啟動,並使用正確的安全群組
- 執行個體類型和大小、EBS 磁碟區類型、IAM 設定檔角色正確指派
-
使用 AWS Systems Manager 登入並執行額外測試,例如檢查任何特定的作業系統層級配置(系統驅動程式、網路配置等)
-
最後,在完成所有檢查後,將所有來源伺服器標記為「Ready for cutover」

轉換 / Cutover
Note:AWS MGN 遷移最佳實務建議在最終轉換前至少兩週完成所有測試和驗證活動
Question:為啥要先 stop source server 再去做 cutover?
- 執行 cutover 時,MGN 會從 staging 區抄來的**資料當下 snapshot **在目標區啟動 cutover instance。因此若有資料持續寫入 source server,新寫入的那段資料會遺失,不會跟去 cutover instance 上
- 官方文件:每次轉換時,AWS MGN 會先刪除先前啟動的測試執行個體及相依資源,接著啟動一個反映來源伺服器最新狀態的新轉換執行個體。轉換完成後,資料複寫會照常繼續——但來源伺服器上新增或修改的資料,會被傳輸到暫存區子網路,而不會再進到轉換過程中啟動的那個轉換執行個體裡。
- 由於 block level replication 不會管你程式邏輯、檔案狀態、資料庫是不是寫到一半,因此沒關服務就直接 cutover 很可能會發生在「資料寫入到一半的狀態」,導致 cutover instance 抄出來的東西是壞的、沒辦法讓應用正常運作
Reference:Migration workflow - AWS Transform MGN
- Stop source servers
- Launch cutover instances
- Validate application
- Finalize cutover
2. Launch cutover instances
-
一旦伺服器處於 **Ready for cutover **狀態,在右上角的下拉式選單中選擇 Test and cutover,選擇 Launch cutover instances

如果看到
無法啟動轉換執行個體訊息:前往左側的啟動歷史記錄選單並驗證先前的啟動任務是否已完成,等待終止任務完成,然後再次啟動轉換執行個體。 -
這會將所選伺服器的 **Migration lifecycle **狀態更改為 Cutover in progress

由於關閉了 source servers,因此在各個 source server 的 alerts 和 data replication status 欄位都會顯示
Stalled狀態 -
在測試或轉換啟動期間,可以監控 AWS MGN 任務歷史記錄的進度

-
點擊 Job 之後可以檢視詳細的 job log 及狀態、完成時間等資訊

包含此啟動任務中的所有來源伺服器及其個別狀態的清單

4. Finalize cutover
為避免 MGN agent 在 cutover 之後持續抄寫、儲存複製的資料(暫存區的 EBS)產生額外費用,需要在 cutover 後進行 Finalize cutover 的動作。
這個動作會終止、刪除為了支援這些來源伺服器複寫而建立的所有 AWS 資源,時限是在 90 分鐘內完成;已啟動的 Test 或 Cutover instance 不會被終止;而 Replication Agent 會在 10 分鐘內收到解除安裝指令。[ref]
Note:上面說會移除 replication agent 的是
FinalizeCutover這個 API,至於 console 上要做到這件事則需要點選 source server > Actions > Disconnect from service

當轉換成功完成時,應用程式遷移服務主控台將顯示轉換已完成。

Note:最後還有一個「Archive」的動作可以做,不過就只是單純不會繼續顯示在 MGN 介面上,技術面意義不大,單純整理介面用的功能
