

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

 **Description** 

 `AWSSupport-MigrateXenToNitroLinux` Runbook 會將 Amazon Elastic Compute Cloud (Amazon EC2) Linux Xen 執行個體複製、準備和遷移至[Nitro執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)。此 Runbook 提供兩種操作類型的選項：
+ `Clone&Migrate` – 此選項的工作流程包含**初步檢查**、**測試**和**Clone&Migrate**階段。使用 `AWSSupport-CloneXenEC2InstanceAndMigrateToNitro` Runbook 執行工作流程。
+ `FullMigration` – 此選項會執行`Clone&Migrate`工作流程，然後執行**取代根 Amazon EBS 磁碟區**的額外步驟。

**重要**  
使用此 Runbook 會在 Amazon EC2 執行個體的執行時間、建立 Amazon Elastic Block Store (Amazon EBS) 磁碟區，以及 產生您的帳戶成本AMIs。如需詳細資訊，請參閱 [ Amazon EC2 定價](https://aws.amazon.com/ec2/pricing/)和 [Amazon EBS 定價](https://aws.amazon.com/ebs/pricing/)。

 **初步檢查** 

自動化會在繼續遷移之前執行下列初步檢查。如果任何檢查失敗，自動化就會結束。此階段只是`Clone&Migrate`工作流程的一部分。
+ 檢查目標執行個體是否已是Nitro執行個體類型。
+ 檢查 Spot 執行個體購買選項是否用於目標執行個體。
+ 檢查執行個體存放區磁碟區是否連接到目標執行個體。
+ 驗證目標執行個體作業系統 (OS) 是 Linux。
+  檢查目標執行個體是否為 Amazon EC2 Auto Scaling 群組的一部分。如果它是 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`
+  使用區塊型裝置名稱 (`/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執行個體類型。自動化會請求指定主體的核准，以複製的 Amazon EC2 執行個體根磁碟區取代目標 Amazon EC2 執行個體的根 Amazon EBS 磁碟區。遷移成功後，複製的 Amazon EC2 執行個體會終止。如果自動化失敗，原始 Amazon EBS 根磁碟區會連接至目標 Amazon EC2 執行個體。如果連接至目標 Amazon EC2 執行個體的根 Amazon EBS 磁碟區具有套用`aws:`字首的標籤，則不支援 `FullMigration`操作。

 **開始之前** 

目標執行個體必須具有傳出網際網路存取。這是為了存取驅動程式和相依性的儲存庫，例如 kernel-devel、gcc、patch、rpm-build、wget、dracut、 makelinux-headers和 unzip。視需要使用套件管理員。

需要 Amazon SNS 主題才能傳送核准和更新的通知。如需建立 Amazon SNS 主題的詳細資訊，請參閱《Amazon *Simple Notification Service *[開發人員指南》中的建立 Amazon SNS 主題](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。

 此 Runbook 支援下列作業系統：
+ RHEL 7.x - 8.5
+ Amazon Linux (2018.03)、Amazon Linux 2
+ Debian Server
+ 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 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 的使用者許可。
+ 確認

  類型：字串

  描述：（必要） 讀取此自動化 Runbook 所執行動作的完整詳細資訊，然後輸入 **Yes, I understand and acknowledge** 以繼續使用 Runbook。
+ 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) 定義的根磁碟區。

  有效值：Clone&Migrate \$1 FullMigration
+ SNSTopicArn

  類型：字串

  描述：（必要） 用於核准通知的 Amazon SNS 主題 ARN。Amazon SNS 主題用於在自動化期間傳送必要的核准通知。
+ TargetInstanceId

  類型：字串

  描述：（必要） 要遷移的 Amazon EC2 執行個體 ID。

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

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `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` - 檢查目標執行個體是否為 Auto Scaling 群組的一部分。
+  `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則會建立 以用作 Golden AMI。
+  `createImageAfterDriversInstallation` - 建立AMI要用作黃金 的 AMI。
+  `endOfCloneAndMigrateBranch` - Clone&Migrate分支結束。
+  `cleanupTestImage` - 取消註冊為測試AMI而建立的 。
+  `failureHandling` - 檢查您是否選擇在失敗時終止資源。
+  `onFailureTerminateClonedInstance` - 在自動化失敗時終止新建立的執行個體。
+  `onFailurecleanupTestImage` - 取消註冊為測試AMI而建立的 。
+  `onFailureApprovalToStartTargetInstance` - 如果自動化失敗， 會等待指定主體的核准，以啟動目標執行個體。
+  `onFailureStartTargetInstance` - 如果自動化失敗， 會啟動目標執行個體。

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

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `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` - 驗證此 Runbook 只有一個自動化，目標為您指定的 Amazon EC2 執行個體。如果 Runbook 找到另一個以相同執行個體為目標的進行中自動化，則自動化會結束。
+  `getTargetInstanceProperties` - 從目標執行個體收集詳細資訊。
+  `checkRootVolumeTags` - 判斷目標 Amazon EC2 執行個體的根磁碟區是否包含任何 AWS 預留標籤。
+  `cloneTargetInstanceAndMigrateToNitro` - 使用 `AWS-CloneXenInstanceToNitro` Runbook 啟動子自動化。
+  `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` - 如果目標執行個體無法啟動為執行個體類型，則將目標 Amazon EC2 執行個體還原為原始Nitro執行個體類型。
+  `onFailureRollbackRootVolumeReplacement` - 視需要還原`replaceRootEbsVolumes`步驟所做的所有變更。
+  `onFailureApprovalToStartTargetInstance` - 等待指定的委託人核准在復原先前的變更後啟動目標 Amazon EC2 執行個體。
+  `onFailureStartTargetInstance` - 啟動目標 Amazon EC2 執行個體。
+  `terminateClonedEC2Instance` - 在取代根 Amazon EBS 磁碟區後終止複製的 Amazon EC2 執行個體。