从 EC2 虚拟机收集客机数据以进行离线评估


本教程将引导您完成在 EC2 虚拟机 (VM) 实例上发现和收集数据的过程,以便使用迁移中心发现客户端 CLI 进行离线技术评估。

目标

在本教程中,您将学习如何完成以下操作:

  • 下载 mcdc CLI 以评估 AWS EC2 虚拟机。
  • 执行 AWS EC2 清单发现。
  • 使用 AWS Session Manager 或 SSH 收集 EC2 区域中所有虚拟机的客机级信息。
  • 生成离线评估报告。
  • (高级)根据您的需要修改脚本。
  • (高级)从头开始编写编排脚本。

费用

本教程不会产生 Google Cloud 费用。

这不太可能影响您的 AWS 费用。

准备工作

前提条件取决于您连接到 EC2 虚拟机的方式。

Session Manager

  1. 准备 Linux 机器以下载并运行 mcdc CLI。Linux 机器必须满足以下最低要求:

    • Linux 内核版本 2.6.23 或更高版本
    • 4 GB RAM 和 10 GB 磁盘空间
    • 已安装 AWS CLI
  2. 确保 AWS CLI 具有以下权限:

    • 可以调用 aws ssm describe-instance-information
    • 可以调用 aws ssm start-session

SSH

  1. 准备 Linux 机器以下载并运行 mcdc CLI。Linux 机器必须满足以下最低要求:

    • Linux 内核版本 2.6.23 或更高版本
    • 4 GB RAM 和 10 GB 磁盘空间
    • 已安装 AWS CLI
    • 与 EC2 实例的网络连接(可能通过代理)
  2. 确保 AWS CLI 具有以下权限:

下载 mcdc CLI

  1. 连接到 Linux 机器:
    ssh MACHINE_IP
    

    MACHINE_IP 替换为您的 Linux 机器的 IP 地址。

  2. 下载最新版本的 mcdc CLI 并使其可执行:
      curl -O "https://mcdc-release.storage.googleapis.com/$(curl -s https://mcdc-release.storage.googleapis.com/latest)/mcdc"
      chmod +x mcdc
    
  3. mcdc CLI 添加到 shell 路径:
    PATH=$PATH:`pwd`
    

执行 AWS 清单发现

  • 运行资产清单发现:

    ./mcdc discover aws -r REGION
    

    REGION 替换为您的 EC2 虚拟机的区域。

    mcdc CLI 会提示您输入访问密钥 ID 和私有访问密钥

    发现命令的输出类似于以下内容:

    Collected 166 VMs
    [✓] Collection completed.
    

执行客机发现

您可以使用 Session Manager 或 SSH 执行客机发现。

Session Manager

此方法使用 AWS Systems Manager Session Manager 在安装了 SSM 代理的所有虚拟机上执行客机发现。SSM 代理默认安装在 Amazon 提供的大多数 AMI 上,并且可以手动安装在其他 AMI 上。

  1. 确保所有虚拟机都具有允许使用 Session Manager 进行连接的 IAM 角色。如需了解详情,请参阅 AWS 文档

  2. 确保您要收集的所有虚拟机都已开启。

  3. 使用 GitHub 上的 Migrate to Containers 代码库中的 ssm 客机收集脚本运行客机发现。

    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 虚拟机的区域。

    所有标志直接传递给 aws ssm describe-instance-information。如需从特定虚拟机收集数据,请运行以下命令:

     ./mcdc_collect_aws_guest_ssm.sh --region REGION --filters "Key=InstanceIds,Values=VM_ID"
    

    VM_ID 替换为虚拟机 ID。

    如需详细了解 describe-instance-information 命令允许的所有标志,请参阅 AWS 文档

SSH

此方法使用 SSH 在 Linux 虚拟机上执行客机发现。SSH 会连接到每个虚拟机的公共 IP 地址。但是,修改脚本应该很简单。例如,连接到专用 IP 地址

该脚本使用 EC2 实例连接进行身份验证。实例连接仅适用于 Amazon Linux 和 Ubuntu 虚拟机,并且可能需要安装。不过,调整脚本以使用替代身份验证方法(例如使用 sshpass 进行密码身份验证)或私钥非常简单。

  1. 确保您拥有对虚拟机的网络访问权限。您可能需要为安全群组调整入站规则,或使用代理进行连接。

  2. 确保您要从中收集数据的所有虚拟机都已开启。

  3. 使用 GitHub 上的 Migrate to Containers 代码库中的 ssh 客机收集脚本运行客机发现。

    1. 下载脚本:

      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
      
    2. 运行脚本并将输出保存到文件中:

      ./mcdc_collect_aws_guest_ssh.sh --region REGION
      

      REGION 替换为您的 EC2 虚拟机的区域。

      任何名为 -a--ssh-arg 的标志都会直接传递给 SSH。如需停用严格主机密钥身份验证,请运行以下命令:

      ./mcdc_collect_aws_guest_ssh.sh --region REGION -a '-o StrictHostKeyChecking=no'
      

      所有其他标志都会直接传递给 aws ssh describe-instances。如需从特定虚拟机收集数据,请运行以下命令:

      ./mcdc_collect_aws_guest_ssm.sh --region REGION --instance-ids VM_ID
      

      VM_ID 替换为虚拟机 ID。

      如需了解所有允许的标志,请参阅 AWS 文档

      您可以使用代理通过 SSH ProxyCommand 选项连接到虚拟机。例如,如需在端口 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 替换为端口号。

  4. 如果您在第 1 步中调整了入站规则,请考虑还原更改。

生成离线评估报告

  • 收集完所有数据后,您可以生成详细的 HTML 报告:

    ./mcdc report --format html --full > REPORT_NAME.html
     

(高级)根据您的需要修改脚本

这两种脚本可能无法完全满足您的需求。例如,您可能未在某些虚拟机上安装 SSM 代理或实例连接。

在这种情况下,您通常可以通过标准方式连接到机器。我们建议您编写脚本,以便您可以大规模编排这些方法。在某些情况下,您可能需要从头开始编写这些脚本,但在其他情况下,您或许能够修改现有脚本。

例如,您可以将 SSH 收集脚本修改为使用专用 IP 地址,而不是公共 IP 地址。

这些脚本已添加了大量注释,以便于理解。

(高级)从头开始编写编排脚本

如需大规模编排客机发现和数据收集,请执行以下操作:

  1. 确定您要从中收集数据的所有虚拟机。
  2. 将客机收集脚本上传到每个虚拟机。Linux 和 Windows 虚拟机需要不同的客机收集脚本。
  3. 在每个虚拟机上运行客机收集脚本。
  4. 从每个虚拟机下载创建的工件。
  5. 将下载的客机收集脚本导入 mcdc CLI。

虽然您可能经常需要从头开始编写大量代码,但示例脚本中提供了一些有用的基础组件,它们或许可以帮助您完成其中的部分任务。例如:

后续步骤