本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWSSupport-MigrateXenToNitroLinux
描述
AWSSupport-MigrateXenToNitroLinux
运行手册将克隆、准备一个 Amazon Elastic Compute Cloud (Amazon EC2) Linux Xen 实例并将其迁移到 Nitro实例类型。此运行手册为操作类型提供了两个选项:
-
Clone&Migrate
– 此选项的工作流程包括初步检查、测试和Clone&Migrate阶段。工作流程使用AWSSupport-CloneXenEC2InstanceAndMigrateToNitro
运行手册运行。 -
FullMigration
– 此选项运行Clone&Migrate
工作流程,然后执行 替换 Amazon EBS 根卷的额外步骤。
重要
使用此运行手册会让您的账户产生运行 Amazon EC2 实例、创建 Amazon Elastic Block Store (Amazon EBS) 卷和 AMIs 的费用。有关更多信息,请参见Amazon EC2 定价
初步检查
在继续迁移之前,自动化会执行以下初步检查。如果任何检查失败,自动化将结束。此阶段只是 Clone&Migrate
工作流程的一部分。
-
检查目标实例是否已经是 Nitro 实例类型。
-
检查竞价型实例购买选项是否用于目标实例。
-
检查实例存储卷是否附加到目标实例。
-
验证目标实例操作系统 (OS) 是否为 Linux。
-
检查目标实例是否是 Amazon EC2 Auto 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 驱动程序版本更新至最新版本。为确保最大联网性能,如果 Nitro 实例类型为第 6 代,则需要更新到最新的 ENA 驱动程序版本。
-
验证是否已安装 NVMe 模块。如果模块安装完毕,自动化将验证该模块是否加载到
initramfs
中。 -
分析
/etc/fstab
并将带有区块设备名称(/dev/sd*
或/dev/xvd*
)的条目替换为相应的 UUID。在修改配置之前,自动化会在路径/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 实例类型启动后,自动化会等待新创建的实例通过所有状态检查。然后,自动化将等待指定主体的批准以创建成功启动 Nitro 的实例的 AMI。如果批准被拒绝,自动化将结束,从而让新创建的实例保持运行状态,目标实例将保持停止状态。
替换根 Amazon EBS 卷
如果您选择 FullMigration
作为 OperationType
,则自动化会将目标 Amazon EC2 实例迁移到您指定的 Nitro 实例类型。自动化会请求获得指定主体的批准,以将目标 Amazon EC2 实例的 Amazon EBS 根卷替换为克隆的 Amazon EC2 实例的根卷。成功迁移后,克隆的 Amazon EC2 实例将终止。如果自动化失败,初始 Amazon EBS 根卷将附加到目标 Amazon EC2 实例。如果附加到目标 Amazon EC2 实例的 Amazon EBS 根卷具有应用了 aws:
前缀的标签,则不支持 FullMigration
操作。
开始前的准备工作
目标实例必须具有出站互联网访问权限。这是为了访问存储库以获取驱动程序和依赖项,例如kernel-devel、gcc、patch、rpm-build、wget、dracut、make、linux-headers 和 unzip。如果需要,可以使用程序包管理器。
需要使用 Amazon SNS 主题才能发送批准和更新的通知。有关如何创建 Amazon SNS 主题的更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的创建 Amazon SNS 主题。
此运行手册支持以下操作系统:
-
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)
文档类型
自动化
所有者
Amazon
平台
Linux
参数
-
AutomationAssumeRole
类型:字符串
描述:(可选)允许 Systems Manager Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称(ARN)。如果未指定任何角色,则 Systems Manager Automation 使用启动此运行手册的用户的权限。
-
确认
类型:字符串
描述:(必需)阅读此自动化运行手册所执行操作的完整详细信息,然后输入
Yes, I understand and acknowledge
以继续使用运行手册。 -
ApproverIAM
类型:字符串
描述:(必需)可以批准自动化的 IAM 角色、用户或用户名的 ARN。您可以指定最多 10 个 批准者。
-
DeleteResourcesOnFailure
类型:布尔值
描述:(可选)确定在自动化失败时是否删除新创建的实例和迁移的 AMI。
有效值:True | False
默认值:True
-
MinimumRequiredApprovals
类型:字符串
描述:(可选)在请求批准时继续运行自动化所需的最低批准数。
有效值:1-10
默认值:1
-
NitroInstanceType
类型:字符串
描述:(必需)您要将Nitro实例更改为的实例类型。支持的实例类型包括 M5、M6、C5、C6、R5、R6 和 T3。
默认:m5.xlarge
-
OperationType
类型:字符串
描述:(必需)希望执行的操作。
FullMigration
选项执行的任务与Clone&Migrate
的相同,还会替换目标实例的根卷。迁移过程结束后,目标实例的根卷将替换为来自新创建实例的根卷。FullMigration
操作不支持逻辑卷管理器 (LVM) 定义的根卷。有效值:Clone&Migrate | FullMigration
-
SNSTopicArn
类型:字符串
说明:(必需)用于批准通知的 Amazon SNS 主题的 ARN。Amazon SNS 主题用于在自动化期间发送所需的批准通知。
-
TargetInstanceId
类型:字符串
说明:(必需)要迁移的 Amazon EC2 实例的 ID。
所需的 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
并在需要时将其替换为 UUID。 -
stopClonedInstance
- 停止新创建的实例。 -
forceStopClonedInstance
- 只有在上一步未能停止实例时才强制停止新创建的实例。 -
checkENAAttributeForClonedInstance
- 检查是否为新创建的实例启用了增强联网属性。 -
setNitroInstanceTypeForClonedInstance
- 将新创建实例的实例类型更改为您指定的 Nitro 实例类型。 -
startClonedInstance
- 启动您已更改其实例类型的新创建实例。 -
approvalForCreatingImageAfterDriversInstallation
- 如果实例作为 Nitro 实例类型成功启动,自动化将等待所需主体的批准。如果获得批准,将会创建用作 Golden AMI 的 AMI。 -
createImageAfterDriversInstallation
- 创建一个AMI用作金币AMI。 -
endOfCloneAndMigrateBranch
- Clone&Migrate 分支结束。 -
cleanupTestImage
- 取消注册为测试而创建的 AMI。 -
failureHandling
- 检查您是否选择在出现故障时终止资源。 -
onFailureTerminateClonedInstance
- 在自动化失败时终止新创建的实例。 -
onFailurecleanupTestImage
- 取消注册为测试而创建的 AMI。 -
onFailureApprovalToStartTargetInstance
- 在自动化失败时等待指定主体的批准以启动目标实例。 -
onFailureStartTargetInstance
- 在自动化失败时启动目标实例。
所需的 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 EC2 实例复制根 Amazon EBS 卷上的标签。 -
startTargetInstance
- 更改实例类型后启动目标 Amazon EC2 实例。 -
onFailureStopTargetEC2Instance
- 在目标 Amazon EC2 实例未能作为 Nitro 实例类型启动时将其停止。 -
onFailureForceStopTargetEC2Instance
- 在上一步失败时强制停止目标 Amazon EC2 实例。 -
OnFailureRevertOriginalInstanceType
- 在目标实例未能作为 Nitro 实例类型启动时将目标 Amazon EC2 实例恢复为初始实例类型。 -
onFailureRollbackRootVolumeReplacement
- 必要时还原replaceRootEbsVolumes
步骤所做的所有更改。 -
onFailureApprovalToStartTargetInstance
- 在回滚之前的更改后,等待指定主体的批准以启动目标 Amazon EC2 实例。 -
onFailureStartTargetInstance
- 启动目标 Amazon EC2 实例。 -
terminateClonedEC2Instance
- 在替换根 Amazon EBS 卷后,终止克隆的 Amazon EC2 实例。