亚马逊AWS官方博客

使用 CloudEndure 脚本自动化 AWS 迁移及减少问题

Original Link:https://aws.amazon.com/blogs/apn/automating-aws-migration-and-reducing-issues-with-cloudendure-scripts/

许多 Amazon Web Services (AWS) 客户会使用工具将其本地服务器迁移到 AWS,例如  CloudEndure。CloudEndure 在今年年初被 AWS 收购。CloudEndure 具有一些其他公司无法提供的独特功能,包括能够将服务器从任何源平台迁移到任何目标平台。机器转换流程将为您完成所有管理程序和操作系统的配置更改。CloudEndure 是一种数据块级复制,几乎可支持所有应用程序。它使用的是连续复制,这意味着源机器上的任何更改都能在不到一秒钟的时间内复制到转储区域。这样一来,即可最大程度地减少切换期间的停机时间。在本文中,我将向您展示如何使用 CloudEndure 自动化 AWS 迁移,并为您提供自动化脚本。借助此脚本和 YAML 配置文件,您可以代码形式管理 AWS 迁移,在几分钟内重新启动机器,以及避免切换过程中的诸多潜在错误。以代码形式管理迁移还将简化审计和报告流程。

先决条件

CloudEndure 是一款出色的工具,可帮助您迁移工作负载,但是如果您使用该控制台迁移大量服务器,则会遇到一些挑战,例如:

  • 您需要逐个更新服务器的蓝图,因此将需要很长时间才能进行同级审核。
  • 您需要使用相同的蓝图重建所有服务器的环境。
  • 在迁移到切换环境之前,不能强迫用户迁移到测试环境。
  • 如果复制延迟超过 180 分钟,您可能会想停止切换任务,但是 CloudEndure 控制台中没有此类选项。
  • 您可能想从 CloudEndure 删除迁移的服务器,但又不想误删除任何其他服务器。

在开始之前,请确保您已满足以下条件:

  • 体验 CloudEndure 服务,安装代理以及通过控制台进行使用。了解有关如何使用 CloudEndure 的更多信息。
  • 已创建 CloudEndure 账户并购买了许可证。
  • 已创建 CloudEndure 项目并已配置 AWS 凭证。
  • 在源机器上安装了 CloudEndure 代理。
  • 从 Github 存储库下载 Python 脚本和配置文件:
    • config-cutover.yml – 生产环境的配置文件。
    • config-test.yml – 测试环境的配置文件。
    • config-project.yml – 项目复制设置的配置文件。
    • CloudEndure.py – 可驱动编排流程的主 Python 脚本。
    • CheckMachine.py – 可在迁移前检查机器状态的 Python 脚本。
    • LaunchMachine.py – 可启动测试或生产环境中的机器的 Python 脚本。
    • Machine.py – 可调用其他三个功能的 Python 脚本:检查状态、更新蓝图和启动目标机器。
    • StatusCheck.py – 可检查目标机器的迁移状态的 Python 脚本。
    • UpdateBlueprint.py – 可更新安全组、子网 ID、标签等机器蓝图的 Python 脚本。
    • UpdateProject.py – 可更新复制服务器状态的 Python 脚本,例如加密密钥、安全组 ID 和子网 ID。
    • Cleanup.py – 可在切换后从 CloudEndure 删除机器的 Python 脚本。

迁移脚本功能

CloudEndure 脚本可提供以下核心功能:

更新 CloudEndure 复制服务器设置

CloudEndure 使用您账户中的复制服务器,来将数据从源机器复制到该帐户的转储区域。在 CloudEndure 控制台,您可以为该复制服务器选择子网安全组 ID,然后您可使用 KMS 密钥加密卷。

CloudEndure 脚本-1.2

图 1 – CloudEndure 项目复制设置

该脚本还可帮助您更新复制服务器设置。您只需要更新 config-project.yml 文件中的复制部分即可。图 2 显示了一个 YAML 配置文件,其中包含三个密钥:encryptionkey、subnetID、securitygroupID。请将这些值替换为您账户中对应的正确值。

CloudEndure 脚本-2

图 2 – 项目复制设置的配置文件

将服务器迁移到测试环境

服务器启动类型有两种:测试和切换。测试模式是供客户在测试环境中启动机器,并确保在生产环境中的切换模式中启动服务器之前,一切运行良好。

图 3 所示,您可看到启动类型参数接受了两个值:测试和切换。

CloudEndure 脚本-3

图 3 – 迁移模式

迁移保护

如果满足以下条件之一,则脚本将返回错误:

  • 启动类型是切换,但是服务器尚未迁移到测试环境。
  • 启动类型是切换,但是服务器已迁移到生产环境。

图 4 所示,该脚本将检查“lastTestLaunchDateTime”和“lastCutoverDateTime”属性。如果尚未对机器进行测试,则“lastTestLaunchDateTime”值将为“无”,如果机器尚未迁移到生产环境,则“lastCutoverDateTime”值将为“无”。

这样一来,就能迫使用户在切换前必须先迁移到测试环境。

CloudEndure 脚本-4

图 4 – 迁移保护

空转:YAML 文件的语法检查

借助空转功能,您即能验证 YAML 文件中的所有配置,并可以在切换期间节省大量时间,因为要排查语法错误问题需要花费一些时间。在脚本中使用空转参数将可强制 CloudEndure 为配置文件中的所有机器更新蓝图并恢复还原,从而确保 CloudEndure 在切换期间能接受蓝图更新。

完成迁移后清理服务器

切换完成后,您可能要从 CloudEndure 中删除机器。一种方法是登录控制台,然后选择要删除的机器。不过,使用脚本更为简单,因为可以将相同的 YAML 配置文件用于切换。

图 5 所示,该脚本调用删除方法从 CloudEndure 项目中删除机器。

CloudEndure 脚本-5

图 5 – 迁移清理

脚本还会检查以下错误,且如果用户尝试执行以下操作,则将宣告失败并会返回相应的错误消息:

  • 在切换完成之前清理服务器。
  • 迁移服务器时出现超过 180 分钟的延迟。
  • 使用错误的机器名称或项目名称。
  • 启动尚未完成初始复制的机器。

部署流程

让我们使用此脚本通过 CloudEndure 启动 AWS 中的实例。首先,我们需要准备一个配置 YAML 文件,因为该脚本可从 YAML 文件中读取所有服务器信息,并相应地更新 CloudEndure 机器蓝图。接着,我们将在测试环境中启动这些机器,并确保一切运作正常。然后,我们将在生产环境中启动这些机器。最后,我们将清理从 CloudEndure 迁移的机器。

请注意,在执行本节中的任何操作之前,请确保在源机器上安装了 CloudEndure 代理,并且该机器已完成复制。您可以在 CloudEndure 控制台中检查复制状态。

步骤 1:准备配置文件并获取 API 令牌

在此步骤中,我们将准备三个 YAML 文件。首先是 Config-project.yml,用于更新项目级别的复制设置。第二个是 Config-test.yml,您需要将服务器添加到该文件中,并更新测试环境的子网和安全组 ID。

第三个文件是 Config-cutover.yml,用于生产环境。您需要将安全组和子网 ID 更改为您生产 VPC 中的安全组和子网 ID,并且此文件与 Config-test.yml 相似。唯一的区别应该是 subnetIDs 和 securitygroupIDs 属性。

因此,登录 CloudEndure 控制台,单击设置与信息,然后选择其他设置。接着,向下滚动到页面底部,您即可看到 API 令牌。切勿使用安装令牌,其只可用于代理安装中。如果没有 API 令牌,则单击右下角的生成新令牌按钮。

API 令牌如图所示:

CloudEndure 脚本-6

接着,删除连字符并获取新令牌。您稍后将在脚本中使用该令牌。在本案例中,令牌就是 6405A45D0773DC4C。

现在,我们可以更新目标机器的配置文件:

  • Config-cutover.yml:对于切换环境,您需要更新 machinecountmachineNamesubnetIDssecuritygroupIDsinstanceTypeiamRole(可选,如未要求,则保留“无”)和tags
  • Config-test.yml:对于切换环境,您需要更新 machinecountmachineNamesubnetIDssecuritygroupIDsinstanceTypeiamRole(可选,如未要求,则保留“无”)和tags
  • Config-projects.yml:对于复制设置,您需要更新复制服务器的 encryptionkeysubnetIDs 和 securitygroupIDs 属性。

请注意,“machinecount”是此配置文件中的机器数量。如果要迁移五台机器,请将数量从 2 更改为 5。另外,“count”是目标机器的标签数。默认值为 3。如果添加 10 个标签,则需要将计数从 3 更改为 10。

步骤 2:在测试环境中启动机器

在此步骤中,我们将使用在步骤 1 中准备的配置文件在测试环境中启动机器。首先,我们将根据需要更新 CloudEndure 项目复制服务器设置。然后,我们将通过空转验证 YAML 语法,最后在测试环境中启动机器。

此为可选步骤,但您可以使用默认的 CloudEndure 复制服务器设置。不过,如果您要更改它们,请运行以下命令以更新项目设置。请用步骤 1 中准备的令牌替换 <APIToken>,并用您的 CloudEndure 项目名称替换 <project name>。

Python CloudEndure.py –userapitoken <APIToken> –projectname <project name> –configfile config-project.yml –updateproject yes

接着,运行以下命令,验证 YAML 文件语法:

Python CloudEndure.py –userapitoken <APIToken> –projectname <project name> –configfile config-test.yml –launchtype test –dryrun

您的每台服务器都将收到如下消息:

CloudEndure 脚本-7

图 6 – 空转结果

现在,运行以下命令,以在 CloudEndure 测试环境中启动机器:

Python CloudEndure.py –userapitoken <APIToken> –projectname <project name> –configfile config-test.yml –launchtype test

CloudEndure 脚本-8

图 7 – 迁移测试作业

在执行第三条命令后,您将看到如图 8 所示的输出。单击作业进度按钮,随即您应能在此配置文件中看到所有机器的作业。每个作业将需要 10-15 分钟才能完成。另一种检查作业状态的方法是运行以下命令:

Python CloudEndure.py –userapitoken <APIToken> –projectname <project name> –configfile config-test.yml –launchtype test –statuscheck Yes

作业完成后,您应可看到“XYZ 已被迁移到测试环境”。

CloudEndure 脚本-9

图 8 – 迁移测试状态

完成测试后,我们可继续将服务器迁移到生产环境。

步骤 3:在生产环境中启动机器

完成测试后,我们可以使用类似的方法将服务器迁移到生产环境。在以下示例中,您唯一需要更改的是 –launchtype 和 –configfile 名称,因为启动类型现为切换模式,且配置文件也应为切换配置文件。您将获得与步骤 2 类似的输出,因此在此步骤中,我不会添加更多屏幕截图。

首先,运行以下命令,验证 YAML 文件语法:

Python CloudEndure.py –userapitoken <APIToken> –projectname <project name> –configfile config-cutover.yml –launchtype test –dryrun

接着,在完成验证后,运行以下命令,以在 AWS 生产环境中启动机器:

Python CloudEndure.py –userapitoken <APIToken> –projectname <project name> –configfile config-cutover.yml –launchtype cutover

再强调一下,完成启动将需要大约 10-15 分钟。您可以运行以下命令来检查迁移状态或在控制台上检查作业进度:

Python CloudEndure.py –userapitoken <APIToken> –projectname <project name> –configfile config-cutover.yml –launchtype cutover –statuscheck Yes

作业完成后,您应可看到“XYZ 已被迁移到生产环境”。

CloudEndure 脚本-10

图 9 – 迁移切换状态

在此阶段,您应让所有服务器都在 AWS 生产环境中运行,而我们可以继续进行服务器级和应用程序级测试。但是,这不是切换的最后一步,因为我们需要从 CloudEndure 中删除不必要的机器,以避免将来混淆。

步骤 4:迁移后清理机器

完成迁移后,运行以下命令,以从 CloudEndure 控制台删除机器。以下命令将仅会从 CloudEndure 控制台清除机器,并不会接触 AWS 中的机器。

Python CloudEndure.py -userapitoken <APIToken> -projectname <project name> –configfile config-cutover.yml -cleanup Yes

作业完成后,您应可看到“XYZ 已从 CloudEndure 中删除”。

CloudEndure 脚本-11

图 10 – 迁移清理结果

小结

在本篇博文中,我演示了使用 Python 脚本自动执行 CloudEndure 迁移的流程。

首先,我列出了使用 CloudEndure 控制台进行迁移时可能会遇到的一些挑战。接着,我阐释了此自动化脚本的主要功能。然后,我演示了从准备 YAML 配置到在测试环境中启动实例以及在生产环境中启动实例这一完整的部署流程。最后,我演示了如何在完成切换后清理 CloudEndure 中的机器。

借助这种自动化方法,您将能够更快地完成迁移并提高整个迁移的成功率。如果您想要了解有关 CloudEndure API 或开发自己的功能的更多信息,请查看 CloudEndure API 文档

校译作者

张巍

AWS APN 合作伙伴解决方案架构师,主要负责 AWS (中国)合作伙伴的方案架构咨询和设计工作,帮助合作伙伴获得AWS技术能力,同时致力于 AWS 云服务在国内的应用及推广。