本教學課程將逐步說明如何探索及收集 EC2 虛擬機器 (VM) 執行個體的資料,以便使用遷移中心探索用戶端 CLI 進行離線技術評估。
目標
您在本教學課程中將學習以下內容:
- 下載
mcdc
CLI 來評估 AWS EC2 VM。 - 執行 AWS EC2 資產目錄探索。
- 使用 AWS Session Manager 或 SSH,收集 EC2 區域中所有 VM 的客層級資訊。
- 產生離線評估報告。
- (進階) 視需要修改指令碼。
- (進階) 從頭編寫自動化調度管理指令碼。
費用
本教學課程不會產生任何費用。 Google Cloud
這不太可能影響您的 AWS 費用。
事前準備
視連線至 EC2 VM 的方式而定,必備條件也會有所不同。
工作階段管理工具
準備 Linux 機器,下載並執行
mcdc
CLI。Linux 電腦必須符合下列最低需求:- Linux 核心版本 2.6.23 以上
- 4 GB RAM 和 10 GB 磁碟空間
- 已安裝 AWS CLI
確認 AWS CLI 具有下列權限:
- 可呼叫
aws ssm describe-instance-information
- 可呼叫
aws ssm start-session
- 可呼叫
安全殼層 (SSH)
準備 Linux 機器,下載並執行
mcdc
CLI。Linux 電腦必須符合下列基本需求:- Linux 核心版本 2.6.23 以上
- 4 GB RAM 和 10 GB 磁碟空間
- 已安裝 AWS CLI
- 與 EC2 執行個體的網路連線 (可能透過 Proxy)
確認 AWS CLI 具有下列權限:
- 可呼叫
aws ec2 describe-instances
- 執行個體連線
- 可呼叫
下載 mcdc
CLI
- 連線至 Linux 電腦:
ssh MACHINE_IP
將 MACHINE_IP 替換為 Linux 機器的 IP 位址。
- 下載最新版
mcdc
CLI 並設為可執行:curl -O "https://mcdc-release.storage.googleapis.com/$(curl -s https://mcdc-release.storage.googleapis.com/latest)/mcdc" chmod +x mcdc
- 將
mcdc
CLI 新增至殼層路徑:PATH=$PATH:`pwd`
執行 AWS 資源探索
執行廣告空間探索作業:
./mcdc discover aws -r REGION
將 REGION 替換為 EC2 VM 的區域。
mcdc
CLI 會提示您輸入存取金鑰 ID 和私密存取金鑰。探索指令的輸出內容如下所示:
Collected 166 VMs [✓] Collection completed.
執行訪客探索
您可以使用 Session Manager 或 SSH 執行訪客探索作業。
工作階段管理工具
這個方法會使用 AWS Systems Manager Session Manager,在安裝 SSM 代理程式 的所有 VM 上執行訪客探索作業。在大多數 Amazon 提供的 AMI 上,SSM 代理程式預設會安裝,您也可以在其他 AMI 上手動安裝。
確認所有 VM 都有 IAM 角色,可透過 Session Manager 連線。詳情請參閱 AWS 說明文件。
確認要收集的 VM 都已開啟。
使用 GitHub 上 Migrate to Containers 存放區中的 ssm guest collection script 執行客體探索。
a. 下載指令碼:
curl -O https://raw.githubusercontent.com/GoogleCloudPlatform/migrate-to-containers/main/scripts/mcdc/mcdc_collect_aws_guest_ssm.sh chmod +x mcdc_collect_aws_guest_ssm.sh
b. 執行指令碼,並將輸出內容儲存至檔案:
./mcdc_collect_aws_guest_ssm.sh --region REGION
將 REGION 替換為 EC2 VM 的區域。
所有旗標都會直接傳遞至
aws ssm describe-instance-information
。 如要從特定 VM 收集資料,請執行下列指令:./mcdc_collect_aws_guest_ssm.sh --region REGION --filters "Key=InstanceIds,Values=VM_ID"
將 VM_ID 替換為 VM ID。
如要進一步瞭解
describe-instance-information
指令允許的所有標記,請參閱 AWS 說明文件。
安全殼層 (SSH)
這個方法會使用 SSH,在 Linux VM 上執行訪客探索作業。並連線至每個 VM 的公開 IP 位址。不過,修改指令碼應該很簡單。舉例來說,如要連線至私人 IP 位址。
指令碼會使用 EC2 執行個體連線進行驗證。執行個體連線僅適用於 Amazon Linux 和 Ubuntu VM,且可能需要安裝。不過,調整指令碼以使用替代驗證方法 (例如使用 sshpass 進行密碼驗證,或使用私密金鑰) 應該很簡單。
確認您擁有 VM 的網路存取權。您可能需要調整安全性群組的連入規則,或使用 Proxy 連線。
確認要收集資料的所有 VM 都已開啟。
使用 GitHub 上 Migrate to Containers 存放區中的 ssh guest collection script 執行客體探索。
下載指令碼:
curl -O https://raw.githubusercontent.com/GoogleCloudPlatform/migrate-to-containers/main/scripts/mcdc/mcdc_collect_aws_guest_ssh.sh chmod +x mcdc_collect_aws_guest_ssh.sh
執行指令碼,並將輸出內容儲存至檔案:
./mcdc_collect_aws_guest_ssh.sh --region REGION
將 REGION 替換為 EC2 VM 的區域。
任何名為
-a
或--ssh-arg
的旗標都會直接傳遞至 SSH。如要停用嚴格的主機金鑰驗證,請執行下列指令:./mcdc_collect_aws_guest_ssh.sh --region REGION -a '-o StrictHostKeyChecking=no'
所有其他標記都會直接傳遞至
aws ssh describe-instances
。 如要從特定 VM 收集資料,請執行下列指令:./mcdc_collect_aws_guest_ssm.sh --region REGION --instance-ids VM_ID
將 VM_ID 替換為 VM ID。
如要瞭解所有允許的旗標,請參閱 AWS 說明文件。
您可以使用 Proxy,透過「使用 SSH 連線至 VM」
ProxyCommand
選項連線至 VM。舉例來說,如要在連接埠 PROXY_PORT 上使用現有的 socks5 代理伺服器,請執行下列指令:./mcdc_collect_aws_guest_ssh.sh --region REGION -a '-o ProxyCommand=nc -X 5 -x 127.0.0.1:PROXY_PORT %h %p'
將 PROXY_PORT 替換為通訊埠號碼。
如果您在步驟 1 中調整了連入規則,請考慮還原變更。
產生離線評估報告
收集所有資料後,您就能產生詳細的 HTML 報表:
./mcdc report --format html --full > REPORT_NAME.html
(進階) 視需要修改指令碼
這兩個指令碼可能都不完全符合您的需求。舉例來說,您可能未在某些 VM 上安裝 SSM 代理程式或 Instance Connect。
在這種情況下,您通常會以標準方式連線至機器。建議您編寫指令碼,以便大規模協調這些方法。有時您可能需要從頭編寫這些指令碼,但有時可以修改現有指令碼。
舉例來說,您可以修改 SSH 收集指令碼,改用私人 IP 位址而非公開 IP 位址。
這些指令碼附有大量註解,方便您瞭解內容。
(進階) 從頭編寫自動化調度管理指令碼
如要大規模協調訪客探索和資料收集作業,請按照下列步驟操作:
- 找出要收集資料的所有 VM。
- 將訪客資料收集指令碼上傳至每個 VM。Linux 和 Windows VM 需要不同的客體收集指令碼。
- 在每個 VM 上執行訪客資料收集指令碼。
- 從各個 VM 下載建立的構件。
- 將下載的訪客收集指令碼匯入
mcdc
CLI。
雖然您可能經常需要從頭編寫大部分內容,但範例指令碼中有些實用的建構區塊,或許能協助您完成部分工作。例如:
- 在 EC2 中疊代所有 VM。
- 下載 Windows 和 Linux 訪客收集指令碼。
- 有時你無法上傳及下載檔案。在這種情況下,您可以將收集指令納入傳送的指令,並將 Base64 編碼的構件寫入 stdout。SSM 收集指令碼可做為實用範例,說明如何執行這項操作。
- 將收集到的構件匯入
mcdc
CLI。
後續步驟
- 進一步瞭解
mcdc
CLI。 - 查看指令碼範例。
- 如要瞭解如何遷移更複雜的應用程式,請參閱 Migrate to Containers GitHub 存放區中的遷移 Spring 架構應用程式教學課程。
- 瞭解規劃最佳做法。