

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# `AWSSupport-MigrateXenToNitroLinux`
<a name="automation-awssupport-migrate-xen-to-nitro"></a>

 **描述** 

 `AWSSupport-MigrateXenToNitroLinux`运行手册将亚马逊弹性计算云 (Amazon EC2) Linux Xen 实例克隆、准备和迁移到 [Nitro 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)。此运行手册为操作类型提供了两个选项：
+ `Clone&Migrate`— 此选项的工作流程包括**初步检查**、**测试**和 **Clone&Migrate**阶段。工作流程使用 `AWSSupport-CloneXenEC2InstanceAndMigrateToNitro` 运行手册运行。
+ `FullMigration` – 此选项运行 `Clone&Migrate` 工作流程，然后执行 **替换 Amazon EBS 根卷**的额外步骤。

**重要**  
使用此运行手册会给您的账户带来亚马逊 EC2实例的运行时间、亚马逊弹性区块存储 (Amazon EBS) 存储卷的创建以及 AMIs。 有关更多详情，请参阅[亚马逊 EC2 定价和亚马](https://aws.amazon.com/ec2/pricing/)[逊 EBS 定价](https://aws.amazon.com/ebs/pricing/)。

 **初步检查** 

在继续迁移之前，自动化会执行以下初步检查。如果任何检查失败，自动化将结束。此阶段只是 `Clone&Migrate` 工作流程的一部分。
+ 检查目标实例是否已经是 Nitro 实例类型。
+ 检查竞价型实例购买选项是否用于目标实例。
+ 检查实例存储卷是否附加到目标实例。
+ 验证目标实例操作系统 (OS) 是否为 Linux。
+  检查目标实例是否是 Amazon A EC2 uto Scaling 组的一部分。如果它是自动扩缩组的一部分，自动化操作将验证该实例是否处于 `standby` 状态。
+ 验证实例是否由管理。 AWS Systems Manager

 **测试** 

自动化会创建一个 Amazon Machine Image (AMI) 从目标实例启动测试实例，并从新创建的实例启动测试实例 AMI。 此阶段只是工作`Clone&Migrate`流程的一部分。

如果测试实例通过了所有状态检查，则自动化将暂停，并通过 Amazon Simple Notification Service (Amazon SNS) 通知请求指定委托人批准。如果提供了批准，则自动化会终止测试实例，停止目标实例，并继续迁移，同时新创建的 AMI 在`Clone&Migrate`工作流程结束时取消注册。

**注意**  
在提供批准之前，我们建议您确认目标实例上运行的所有应用程序均已正常关闭。

 **克隆和迁移** 

自动化创造了另一个 AMI 从目标实例，然后启动一个新实例以更改为 Nitro 实例类型。在继续迁移之前，自动化会完成以下先决条件。如果任何检查失败，自动化将结束。此阶段也只是 `Clone&Migrate` 工作流程的一部分。
+ 开启增强联网 (ENA) 属性。
+ 安装最新版本的 ENA 驱动程序（如果尚未安装），或者将 ENA 驱动程序版本更新至最新版本。为确保最佳网络性能，如果出现以下情况，则需要更新到最新的 ENA 驱动程序版本 Nitro 实例类型是第 6 代。
+  验证 NVMe 模块是否已安装。如果模块安装完毕，自动化将验证该模块是否加载到 `initramfs` 中。
+  使用区块设备名称（`/dev/sd*`或`/dev/xvd*`）分析`/etc/fstab`条目并将其替换为相应的条目 UUIDs。在修改配置之前，自动化会在路径 `/etc/fstab*` 上创建文件的备份。
+  关闭可预测的接口命名，方法是将 `net.ifnames=0` 选项添加到 `/etc/default/grub` 文件（如果存在）中的 `GRUB_CMDLINE_LINUX` 行，或添加到 `/boot/grub/menu.lst` 中的内核。
+  如果 `/etc/udev/rules.d/70-persistent-net.rules` 文件存在，则将其移除。在移除文件之前，自动化会在路径 `/etc/udev/rules.d/` 上创建文件的备份。

验证所有要求后，实例类型更改为 Nitro 您指定的实例类型。自动化会等待新创建的实例在启动后通过所有状态检查 Nitro 实例类型。然后，自动化会等待指定负责人的批准后再创建 AMI 成功推出的 Nitro 实例。如果批准被拒绝，自动化将结束，从而让新创建的实例保持运行状态，目标实例将保持停止状态。

 **替换根 Amazon EBS 卷** 

 如果您选择`FullMigration`作为`OperationType`，则自动化会将目标 Amazon EC2 实例迁移到 Nitro 您指定的实例类型。Automation 会请求指定委托人的批准，以将目标 Amazon EC2 实例的 Amazon EBS 根卷替换为克隆的 EC2 亚马逊实例的根卷。成功迁移后，克隆的 Amazon EC2 实例将终止。如果自动化失败，则原始的 Amazon EBS 根卷将附加到目标亚马逊 EC2 实例。如果连接到目标 Amazon EC2 实例的 Amazon EBS 根卷具有应用`aws:`前缀的标签，则不支持该`FullMigration`操作。

 **开始之前** 

目标实例必须具有出站互联网访问权限。这是为了访问驱动程序和依赖项的存储库，比如 kernel-devel, gcc, patch, rpm-build, wget, dracut, make, linux-headers，以及 unzip。 如果需要，可以使用 Package 管理器。

需要使用 Amazon SNS 主题才能发送批准和更新的通知。有关如何创建 Amazon SNS 主题的更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的[创建 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。

 此运行手册支持以下操作系统：
+ RHEL 7.x-8.5
+ Amazon Linux (2018.03)、Amazon Linux 2
+ Debian 服务器
+ Ubuntu Server 18.04 LTS、20.04 LTS 和 20.10 STR
+ SUSE Linux Enterprise Server (SUSE12SP5, SUSE15SP2)

 [运行此自动化（控制台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-MigrateXenToNitroLinux) 

**文档类型**

自动化

**所有者**

Amazon

**平台**

Linux

**参数**
+ AutomationAssumeRole

  类型：字符串

  描述：（可选）允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称（ARN）。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
+ 确认

  类型：字符串

  描述：（必需）阅读此自动化运行手册所执行操作的完整详细信息，然后输入 **Yes, I understand and acknowledge** 以继续使用运行手册。
+ ApproverIAM

  类型：字符串

  描述：（必填）可以批准自动化的 IAM 角色、用户或用户名。 ARNs 您可以指定最多 10 个 批准者。
+ DeleteResourcesOnFailure

  类型：布尔值

  描述：（可选）确定新创建的实例是否和 AMI 因为如果自动化失败，则会删除迁移。

  有效值：True \$1 False

  默认值：True
+ MinimumRequiredApprovals

  类型：字符串

  描述：（可选）在请求批准时继续运行自动化所需的最低批准数。

  有效值：1-10

  默认值：1
+ NitroInstanceType

  类型：字符串

  描述：（必填） Nitro 您要将实例更改为的实例类型。支持的实例类型包括 M5、M6、C5、C6、R5、R6 和 T3。

  默认：m5.xlarge
+ OperationType

  类型：字符串

   描述：（必需）希望执行的操作。`FullMigration` 选项执行的任务与 `Clone&Migrate` 的相同，还会替换目标实例的根卷。迁移过程结束后，目标实例的根卷将替换为来自新创建实例的根卷。`FullMigration` 操作不支持逻辑卷管理器 (LVM) 定义的根卷。

  有效值：克隆并迁移 \$1 FullMigration
+ SNSTopicArn

  类型：字符串

  说明：（必需）用于批准通知的 Amazon SNS 主题的 ARN。Amazon SNS 主题用于在自动化期间发送所需的批准通知。
+ TargetInstanceId

  类型：字符串

  描述：（必填）要迁移的 Amazon EC2 实例的 ID。

## Clone&Migrate 工作流
<a name="clone-ami"></a>

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `ssm:DescribeAutomationExecutions` 
+  `ssm:StartAutomationExecution` 
+  `ssm:DescribeInstanceInformation` 
+  `ssm:DescribeAutomationStepExecutions` 
+  `ssm:SendCommand` 
+  `ssm:GetAutomationExecution` 
+  `ssm:ListCommands` 
+  `ssm:ListCommandInvocations` 
+  `ec2:DescribeInstances` 
+  `ec2:DescribeInstanceTypeOfferings` 
+  `ec2:DescribeInstanceTypes` 
+  `ec2:DescribeImages` 
+  `ec2:CreateImage` 
+  `ec2:RunInstances` 
+  `ec2:DescribeInstanceStatus` 
+  `ec2:DeregisterImage` 
+  `ec2:DeleteSnapshot` 
+  `ec2:TerminateInstances` 
+  `ec2:StartInstances` 
+  `ec2:DescribeKeyPairs` 
+  `ec2:StopInstances` 
+  `kms:CreateGrant*` 
+  `kms:ReEncrypt` 
+  `ec2:ModifyInstanceAttribute` 
+  `autoscaling:DescribeAutoScalingInstances` 
+  `iam:passRole` 
+  `iam:ListRoles` 

 **文档步骤** 
+  `startOfPreliminaryChecksBranch` - 分支到初步检查工作流程。
+  `getTargetInstanceProperties` - 从目标实例收集详细信息。
+  `checkIfNitroInstanceTypeIsSupportedInAZ`-确定目标的 Amazon EC2 实例类型是否在与目标实例相同的可用区中受支持。
+  `getXenInstanceTypeDetails` - 收集有关源实例类型的详细信息。
+  `checkIfInstanceHypervisorIsNitroAlready`-检查目标实例是否已作为一个实例运行 Nitro 实例类型。
+  `checkIfTargetInstanceLifecycleIsSpot` - 检查目标实例的购买选项是否为 Spot。
+  `checkIfOperatingSystemIsLinux` - 检查目标实例操作系统是否为 Linux。
+  `verifySSMConnectivityForTargetInstance` - 验证目标实例是否由 Systems Manager 管理。
+  `checkIfEphemeralVolumeAreSupported` - 检查目标实例的当前实例类型是否支持实例存储卷。
+  `verifyIfTargetInstanceHasEphemeralVolumesAttached` - 检查目标实例是否包含附加的实例存储卷。
+  `checkIfRootVolumeIsEBS` - 检查目标实例的根卷类型是否为 EBS。
+  `checkIfTargetInstanceIsInASG` - 检查目标实例是否是自动扩缩组的一部分。
+  `endOfPreliminaryChecksBranch` - 初步检查分支结束。
+  `startOfTestBranch` - 分支到测试工作流程。
+  `createTestImage`-创建测试 AMI 目标实例的。
+  `launchTestInstanceInSameSubnet`-从测试中启动测试实例 AMI 使用与目标实例相同的配置。
+  `cleanupTestInstance` - 终止测试实例。
+  `endOfTestBranch` - 测试分支结束。
+  `checkIfTestingBranchSucceeded` - 检查测试分支的状态。
+  `approvalToStopTargetInstance` - 等待指定委托人的批准才能停止目标实例。
+  `stopTargetEC2Instance` - 停止目标实例。
+  `forceStopTargetEC2Instance` - 只有在上一步未能停止目标实例时才强制停止该实例。
+  `startOfCloneAndMigrateBranch`-分支到 Clone&Migrate 工作流程。
+  `createBackupImage`-创建一个 AMI 要用作备份的目标实例。
+  `launchInstanceInSameSubnet`-从备份中启动新实例 AMI 使用与源实例相同的配置。
+  `waitForClonedInstanceToPassStatusChecks` - 等待新创建的实例通过所有状态检查。
+  `verifySSMConnectivityForClonedInstance` - 验证新创建的实例是否由 Systems Manager 管理。
+  `checkAndInstallENADrivers` - 检查新创建的实例上是否安装了 ENA 驱动程序，并在需要时安装驱动程序。
+  `checkAndAddNVMEDrivers`-检查新创建的实例上是否安装了 NVMe 驱动程序，并在需要时安装驱动程序。
+  `checkAndModifyFSTABEntries`-检查中是否使用了设备名称，`/etc/fstab`并在需要时将其替 UUIDs 换为。
+  `stopClonedInstance` - 停止新创建的实例。
+  `forceStopClonedInstance` - 只有在上一步未能停止实例时才强制停止新创建的实例。
+  `checkENAAttributeForClonedInstance` - 检查是否为新创建的实例启用了增强联网属性。
+  `setNitroInstanceTypeForClonedInstance`-将新创建的实例的实例类型更改为 Nitro 您指定的实例类型。
+  `startClonedInstance` - 启动您已更改其实例类型的新创建实例。
+  `approvalForCreatingImageAfterDriversInstallation`-如果实例成功启动为 Nitro 实例类型，自动化将等待所需委托人的批准。如果提供了批准，AMI 是为了用作金牌而创建的 AMI. 
+  `createImageAfterDriversInstallation`-创建一个 AMI 可用作金牌 AMI. 
+  `endOfCloneAndMigrateBranch`-结束 Clone&Migrate 分支。
+  `cleanupTestImage`-注销 AMI 为测试而创建。
+  `failureHandling` - 检查您是否选择在出现故障时终止资源。
+  `onFailureTerminateClonedInstance` - 在自动化失败时终止新创建的实例。
+  `onFailurecleanupTestImage`-注销 AMI 为测试而创建。
+  `onFailureApprovalToStartTargetInstance` - 在自动化失败时等待指定主体的批准以启动目标实例。
+  `onFailureStartTargetInstance` - 在自动化失败时启动目标实例。

## FullMigration 工作流
<a name="full-migration"></a>

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `ssm:DescribeAutomationExecutions` 
+  `ssm:DescribeInstanceInformation` 
+  `ssm:DescribeAutomationStepExecutions` 
+  `ssm:SendCommand` 
+  `ssm:GetAutomationExecution` 
+  `ssm:ListCommands` 
+  `ssm:ListCommandInvocations` 
+  `ec2:DescribeInstances` 
+  `ec2:DescribeInstanceTypeOfferings` 
+  `ec2:DescribeInstanceTypes` 
+  `ec2:DescribeImages` 
+  `ec2:CreateImage` 
+  `ec2:RunInstances` 
+  `ec2:DescribeInstanceStatus` 
+  `ec2:DeregisterImage` 
+  `ec2:DeleteSnapshot` 
+  `ec2:TerminateInstances` 
+  `ec2:StartInstances` 
+  `ec2:DescribeKeyPairs` 
+  `ec2:StopInstances` 
+  `kms:CreateGrant*` 
+  `kms:ReEncrypt` 
+  `ec2:ModifyInstanceAttribute` 
+  `ec2:DetachVolume` 
+  `ec2:AttachVolume` 
+  `ec2:DescribeVolumes` 
+  `autoscaling:DescribeAutoScalingInstances` 
+  `iam:PassRole` 
+  `ec2:CreateTags` 
+  `cloudformation:DescribeStackResources` 

 **文档步骤** 

`FullMigration` 工作流程运行的步骤与 `Clone&Migrate` 工作流运行的相同，另外还执行以下步骤：
+  `checkConcurrency`-验证此运行手册中是否只有一个针对您指定的 Amazon EC2 实例的自动化。如果运行手册发现另一个针对同一实例的自动化正在进行，自动化将结束。
+  `getTargetInstanceProperties` - 从目标实例收集详细信息。
+  `checkRootVolumeTags`-确定目标 Amazon EC2 实例的根卷是否包含任何 AWS 预留标签。
+  `cloneTargetInstanceAndMigrateToNitro` - 使用 `AWS-CloneXenInstanceToNitro` 运行手册启动儿童自动化。
+  `branchOnTheOperationType` - 根据您为 `OperationType` 参数指定的值进行分支。
+  `getClonedInstanceId` - 从子自动化中检索新启动的实例的 ID。
+  `checkIfRootVolumeIsBasedOnLVM` - 确定根分区是否由 LVM 管理。
+  `branchOnTheRootVolumeLVMStatus` - 如果从主体收到了要求的最低限度批准，自动化将继续执行根卷替换。
+  `manualInstructionsInCaseOfLVM` - 如果根卷由 LVM 管理，自动化将发送包含如何手动替换根卷说明的输出。
+  `startOfReplaceRootEBSVolumeBranch` - 启动“替换根 EBS 卷”分支工作流。
+  `checkIfTargetInstanceIsManagedByCFN`-确定目标实例是否由 AWS CloudFormation 堆栈管理。
+  `branchOnCFNStackStatus`-基于CloudFormation 堆栈状态的分支。
+  `approvalForRootVolumesReplacement(WithCFN)`-如果目标实例是由启动的 CloudFormation，则在新启动的实例成功启动后，自动化将等待批准 Nitro 实例类型。获得批准后，目标实例的 Amazon EBS 卷将替换为新启动实例的根卷。
+  `approvalForRootVolumesReplacement`-在新启动的实例成功启动后等待批准 Nitro 实例类型。获得批准后，目标实例的 Amazon EBS 卷将替换为新启动实例的根卷。
+  `assertIfTargetEC2InstanceIsStillStopped` - 在更换根卷之前，验证目标实例是否处于 `stopped` 状态。
+  `stopTargetInstanceForRootVolumeReplacement` - 如果目标实例正在运行，则自动化会在替换根卷之前停止该实例。
+  `forceStopTargetInstanceForRootVolumeReplacement` - 在上一步失败时强制停止目标实例。
+  `stopClonedInstanceForRootVolumeReplacement` - 停止新创建的实例后再替换 Amazon EBS 卷。
+  `forceStopClonedInstanceForRootVolumeReplacement` - 在上一步失败时强制停止新创建的实例。
+  `getBlockDeviceMappings` - 检索目标实例和新创建实例的块设备映射。
+  `replaceRootEbsVolumes` - 将目标实例的根卷替换为新创建实例的根卷。
+  `EndOfReplaceRootEBSVolumeBranch` - 结束“替换根 EBS 卷”分支工作流。
+  `checkENAAttributeForTargetInstance`-检查目标 Amazon EC2 实例的增强联网 (ENA) 属性是否已开启。
+  `enableENAAttributeForTargetInstance`-如果需要，可为目标 Amazon EC2 实例开启 ENA 属性。
+  `setNitroInstanceTypeForTargetInstance`-将目标实例更改为 Nitro 您指定的实例类型。
+  `replicateRootVolumeTags`-从目标亚马逊实例复制根 Amazon EBS 卷上的标签。 EC2 
+  `startTargetInstance`-更改 EC2 实例类型后启动目标 Amazon 实例。
+  `onFailureStopTargetEC2Instance`-如果目标 Amazon EC2 实例启动失败，则将其停止 Nitro 实例类型。
+  `onFailureForceStopTargetEC2Instance`-如果上一步失败，则强制停止目标 Amazon EC2 实例。
+  `OnFailureRevertOriginalInstanceType`-如果目标 EC2实例启动失败，则将目标 Amazon 实例恢复为原始实例类型 Nitro 实例类型。
+  `onFailureRollbackRootVolumeReplacement` - 必要时还原 `replaceRootEbsVolumes` 步骤所做的所有更改。
+  `onFailureApprovalToStartTargetInstance`-在回退之前的更改后，等待指定委托人的批准才能启动目标 Amazon EC2 实例。
+  `onFailureStartTargetInstance`-启动目标 Amazon EC2 实例。
+  `terminateClonedEC2Instance`-更换根 Amazon EBS 卷后，终止克隆的 Amazon EC2 实例。