

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

# 常見問答集
<a name="migrating-to-systems-manager-faqs"></a>

下列FAQs提供一些常見問題的答案。

**Topics**
+ [我可以遷移哪些 AWS OpsWorks Stacks 版本？](#w2ab1c14c43c19b7)
+ [我的遷移執行個體可以使用哪些 Chef 版本？](#w2ab1c14c43c19b9)
+ [我可以遷移哪些儲存庫類型？](#w2ab1c14c43c19c11)
+ [我可以繼續使用私有 Git 儲存庫嗎？](#w2ab1c14c43c19c13)
+ [我可以使用哪些 SSH 金鑰來存取執行個體？](#w2ab1c14c43c19c15)
+ [為什麼我的執行個體會自動向內和向外擴展？](#w2ab1c14c43c19c17)
+ [我可以關閉 Auto Scaling 嗎？](#w2ab1c14c43c19c19)
+ [我可以在啟動的 EC2 執行個體上執行核心和套件更新嗎？](#w2ab1c14c43c19c21)
+ [為什麼我的執行個體中的 EBS 磁碟區不包含任何資料？](#w2ab1c14c43c19c23)
+ [為什麼我的啟動範本中未掛載 EBS 磁碟區？](#w2ab1c14c43c19c25)
+ [哪裡可以找到 Chef 配方和掛載 EBS 磁碟區日誌？](#w2ab1c14c43c19c27)
+ [哪裡可以找到遷移指令碼的偵錯日誌？](#w2ab1c14c43c19c29)
+ [遷移指令碼是否支援 CloudFormation 範本版本控制？](#w2ab1c14c43c19c31)
+ [我可以遷移多個層嗎？](#w2ab1c14c43c19c33)
+ [如何建立`SecureString`參數？](#w2ab1c14c43c19c35)
+ [如何保護新 Auto Scaling 群組中的執行個體免於終止事件？](#w2ab1c14c43c19c37)
+ [遷移指令碼可使用哪些負載平衡器？](#w2ab1c14c43c19c39)
+ [自訂技術指南設定配方是否已遷移？](#w2ab1c14c43c19c41)
+ [我可以在新建立的執行個體上執行部署和取消部署配方嗎？](#w2ab1c14c43c19c43)
+ [我可以變更 Auto Scaling 群組跨越哪些子網路嗎？](#w2ab1c14c43c19c45)

## 我可以遷移哪些 AWS OpsWorks Stacks 版本？
<a name="w2ab1c14c43c19b7"></a>

 您只能遷移 Chef 11.10 和 Chef 12、Amazon Linux、Amazon Linux 2、Ubuntu 和 Red Hat Enterprise Linux 7 堆疊。

## 我的遷移執行個體可以使用哪些 Chef 版本？
<a name="w2ab1c14c43c19b9"></a>

 遷移的執行個體可以使用 Chef 版本 11 到 14。

**注意**  
不支援 Windows 堆疊遷移。

## 我可以遷移哪些儲存庫類型？
<a name="w2ab1c14c43c19c11"></a>

 您可以遷移 S3、Git 和 HTTP 儲存庫類型。

## 我可以繼續使用私有 Git 儲存庫嗎？
<a name="w2ab1c14c43c19c13"></a>

可以，您可以繼續使用私有 Git 儲存庫。

如果您使用私有 GitHub 儲存庫，則必須為 SSH 建立新的`Ed25519`主機金鑰。這是因為 GitHub 變更了 SSH 中支援的金鑰，並移除了未加密的 Git 通訊協定。如需`Ed25519`主機金鑰的詳細資訊，請參閱 GitHub 部落格文章[改善 Git GitHub 通訊協定安全性](https://github.blog/2021-09-01-improving-git-protocol-security-github/)。產生新的`Ed25519`主機金鑰後，請為此 SSH 金鑰建立 Systems Manager `SecureString` 參數，並使用 參數名稱做為 `--repo-private-key` 參數的值。如需如何建立 Systems Manager `SecureString` 參數的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[建立 SecureString 參數 (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html#param-create-cli-securestring)。

對於任何其他 Git 儲存庫類型，請為此 SSH 金鑰建立 Systems Manager `SecureString` 參數，並使用 參數名稱做為指令碼`--repo-private-key`參數的值。

## 我可以使用哪些 SSH 金鑰來存取執行個體？
<a name="w2ab1c14c43c19c15"></a>

當您執行指令碼時，指令碼會遷移堆疊中設定的 SSH 金鑰和執行個體。您可以使用 SSH 金鑰來存取執行個體。如果為堆疊和執行個體提供 SSH 金鑰，則指令碼會使用來自堆疊的金鑰。如果您不確定要使用哪些 SSH 金鑰，請在 EC2 主控台 ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)：//) 中檢視執行個體。EC2 主控台中**的詳細資訊**頁面會顯示執行個體的 SSH 金鑰。

## 為什麼我的執行個體會自動向內和向外擴展？
<a name="w2ab1c14c43c19c17"></a>

Auto Scaling 會根據 Auto Scaling 群組的擴展規則來擴展執行個體。您可以設定群組的**最小**、**最大**和**所需容量**值。當您更新這些值時，Auto Scaling 群組會自動相應地擴展您的容量。

## 我可以關閉 Auto Scaling 嗎？
<a name="w2ab1c14c43c19c19"></a>

您可以將 Auto Scaling 群組的**最小**、**最大**和**所需容量**值設定為相同的數字，以關閉 Auto Scaling。例如，如果您想要一律有 10 個執行個體，請將**最小**、**最大**和**所需容量**值設定為 10。

## 我可以在啟動的 EC2 執行個體上執行核心和套件更新嗎？
<a name="w2ab1c14c43c19c21"></a>

 根據預設，核心和套件會在 EC2 執行個體開機時更新。使用下列步驟，在啟動的 EC2 執行個體上執行核心或套件更新。例如，您可能想要在執行部署或設定配方後套用更新。

1.  連線至 EC2 執行個體。

1.  建立下列`perform_upgrade`函數，並在您的執行個體上執行。

   ```
   perform_upgrade() {
       #!/bin/bash
       if [ -e '/etc/system-release' ] || [ -e '/etc/redhat-release' ]; then
        sudo yum -y update
       elif [ -e '/etc/debian_version' ]; then
        sudo apt-get update
        sudo apt-get dist-upgrade -y
       fi
   }
   perform_upgrade
   ```

1.  在核心和套件更新之後，您可能需要重新啟動 EC2 執行個體。若要檢查是否需要重新啟動，請建立下列`reboot_if_required`函數，並在 EC2 執行個體上執行。

   ```
   reboot_if_required () {
    #!/bin/bash
    if [ -e '/etc/debian_version' ]; then
      if [ -f /var/run/reboot-required ]; then
        echo "reboot is required"
      else
        echo "reboot is not required"
      fi
    elif [ -e '/etc/system-release' ] || [ -e '/etc/redhat-release' ]; then
     export LC_CTYPE=en_US.UTF-8
     export LC_ALL=en_US.UTF-8
     LATEST_INSTALLED_KERNEL=`rpm -q --last kernel | perl -X -pe 's/^kernel-(\S+).*/$1/' | head -1`
     CURRENTLY_USED_KERNEL=`uname -r`
     if [ "${LATEST_INSTALLED_KERNEL}" != "${CURRENTLY_USED_KERNEL}" ];then
        echo "reboot is required"
     else
        echo "reboot is not required"
     fi
    fi
   }
   reboot_if_required
   ```

1.  如果執行 `reboot_if_required`會產生`reboot is required`訊息，請重新啟動 EC2 執行個體。如果您收到`reboot is not required`訊息，則不需要重新啟動 EC2 執行個體。

## 為什麼我的執行個體中的 EBS 磁碟區不包含任何資料？
<a name="w2ab1c14c43c19c23"></a>

當您執行指令碼時，指令碼會遷移 EBS 磁碟區的組態，為 OpsWorks 堆疊和層建立替代架構。指令碼不會遷移實際執行個體或執行個體中包含的資料。指令碼只會遷移層層級的 EBS 磁碟區組態，並將空的 EBS 磁碟區連接至啟動的 EC2 執行個體。

執行下列步驟，從先前執行個體的 EBS 磁碟區提取資料。

1. 拍攝先前執行個體 EBS 磁碟區的快照。如需建立快照的詳細資訊，請參閱[《Amazon EC2 使用者指南》中的建立 Amazon EBS 快照](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-snapshot.html)。 *Amazon EC2 *

1. 從快照建立磁碟區。如需從快照建立磁碟區的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[從快照建立磁碟區](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html#ebs-create-volume-from-snapshot)。

1. 將您建立的磁碟區連接到執行個體。如需連接磁碟區的詳細資訊，請參閱《[Amazon EC2 使用者指南》中的將 Amazon EBS 磁碟區連接至執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html)。 *Amazon EC2 *

## 為什麼我的啟動範本中未掛載 EBS 磁碟區？
<a name="w2ab1c14c43c19c25"></a>

 如果您為具有 EBS 磁碟區的 `--launch-template` 參數提供啟動範本 ID，指令碼會連接 EBS 磁碟區，但不會掛載磁碟區。您可以執行為啟動的 EC2 執行個體建立的 `MountEBSVolumes` RunCommand 文件，來掛載連接的 EBS 磁碟區。

 如果您未設定`--launch-template`參數，指令碼會建立範本，當 Auto Scaling 群組啟動新的 EC2 執行個體時，Auto Scaling 群組會自動連接 EBS 磁碟區，然後執行 `SetupAutomation`命令，將連接的磁碟區掛載至 layer 設定中設定的掛載點。

## 哪裡可以找到 Chef 配方和掛載 EBS 磁碟區日誌？
<a name="w2ab1c14c43c19c27"></a>

OpsWorks 會將日誌交付至 S3 儲存貯體，您可以透過提供 `--command-logs-bucket` 參數的值來指定該儲存貯體。預設 S3 儲存貯體名稱的格式為：`aws-opsworks-stacks-application-manager-logs-account-id`。Chef 配方日誌存放在 `ApplyChefRecipes` 字首中。掛載 EBS 磁碟區日誌存放在 `MountEBSVolumes` 字首中。從堆疊遷移的所有層都會將日誌交付至相同的 S3 儲存貯體。

**注意**  
S3 儲存貯體的生命週期組態包含 30 天後刪除日誌的規則。如果您想要保留日誌超過 30 天，您必須在 S3 儲存貯體的生命週期組態中更新規則。
目前，OpsWorks 只會記錄 Chef `setup`和`terminate`配方。

## 哪裡可以找到遷移指令碼的偵錯日誌？
<a name="w2ab1c14c43c19c29"></a>

指令碼會將偵錯日誌放在名為 的儲存貯體中`aws-opsworks-stacks-transition-logs-account-id`。您可以在 S3 儲存貯體的 `migration_script` 資料夾中找到偵錯日誌，這些日誌位於與您遷移層名稱相符的資料夾下。

## 遷移指令碼是否支援 CloudFormation 範本版本控制？
<a name="w2ab1c14c43c19c31"></a>

指令碼會產生 CloudFormation 類型的 Systems Manager 文件，為您要遷移的層或堆疊建立替代項目。即使具有相同的參數， 仍會再次執行指令碼，匯出先前匯出的層範本的新版本。範本版本存放在與指令碼日誌相同的 S3 儲存貯體中。

## 我可以遷移多個層嗎？
<a name="w2ab1c14c43c19c33"></a>

指令碼的 `--layer-id` 參數會在單一 layer 中傳遞。若要遷移多個層，請重新執行指令碼並傳入不同的 `--layer-id`。

屬於相同 OpsWorks 堆疊的圖層會列在 Application Manager 中的相同應用程式下。

1.  在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Application Manager**。

1.  在**應用程式**區段中，選擇**自訂應用程式**。

1.  選擇您的應用程式。應用程式名稱以 開頭`app-stack-name-first-six-characters-stack-id`。

1.  從應用程式開始的最上層元素會顯示對應至 OpsWorks 堆疊的所有元件。這包括對應至 OpsWorks layer 的元件。

1.  選擇與 layer 對應的元件，以檢視 layer 的資源。代表 OpsWorks 層的元件也會在**自訂應用程式**區段中顯示為個別應用程式。

## 如何建立`SecureString`參數？
<a name="w2ab1c14c43c19c35"></a>

您可以使用 Systems Manager 來建立`SecureString`參數。如需如何建立 Systems Manager `SecureString` 參數的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[建立 SecureString 參數 (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html#param-create-cli-securestring) 或[建立 Systems Manager 參數 （主控台）](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)。

您必須提供 `SecureString` 參數做為 `--http-username`、 `--http-password`或 `--repo-private-key` 參數的值。

## 如何保護新 Auto Scaling 群組中的執行個體免於終止事件？
<a name="w2ab1c14c43c19c37"></a>

您可以將 `--enable-instance-protection` 參數設定為 ，`TRUE`並將`protected_instance`標籤金鑰新增至要保護免於終止事件的每個 EC2 執行個體，以保護執行個體。當您將 `--enable-instance-protection` 參數設定為 `TRUE`並新增`protected_instance`標籤金鑰時，指令碼會將自訂終止政策新增至新的 Auto Scaling 群組，並暫停`ReplaceUnhealthy`程序。具有`protected_instance`標籤索引鍵的執行個體會受到保護，免於發生下列終止事件：
+ 在事件中擴展
+ 執行個體重新整理
+ 重新平衡
+ 執行個體生命週期上限
+ 允許列出執行個體終止
+ 終止和取代運作狀態不佳的執行個體

**注意**  
您必須在要保護的執行個體上設定`protected_instance`標籤金鑰。標籤索引鍵區分大小寫。任何具有該標籤索引鍵的執行個體都會受到保護，無論標籤值為何。  
 若要減少自訂終止政策的執行時間，您可以更新`default_sample_size`函數程式碼變數的值，以增加 Lambda 函數用來篩選受保護執行個體的預設執行個體數量。預設值為 15。如果您增加 `default_sample_size`，您可能需要增加配置給 Lambda 函數的記憶體，這會增加 Lambda 函數的成本。如需 AWS Lambda 定價的資訊，請參閱 [AWS Lambda 定價](https://aws.amazon.com/)。

## 遷移指令碼可使用哪些負載平衡器？
<a name="w2ab1c14c43c19c39"></a>

指令碼提供三個負載平衡器選項。
+  （建議） 建立新的 Application Load Balancer。根據預設，指令碼會建立新的 Application Load Balancer。您也可以將 `--lb-type` 參數設定為 `ALB`。如需 Application Load Balancer 的詳細資訊，請參閱 *Elastic Load Balancing 使用者指南*中的[什麼是 Application Load Balancer？](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)。
+  如果 Application Load Balancer 不是 選項，請將 `--lb-type` 參數設定為 來建立 Classic Load Balancer`Classic`。如果您選取此選項，連接至 OpsWorks layer 的現有 Classic Load Balancer 會與您的應用程式分開。如需 Application Load Balancer 的詳細資訊，請參閱 Elastic [ Load Balancer Balancing：Classic Load Balancer 使用者指南中的什麼是](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) Classic Load Balancer？。 *Elastic Load Balancing* 
+  您可以將 `--lb-type` 參數設定為 ，以連接現有的負載平衡器`None`。
**重要**  
 建議您為 AWS OpsWorks Stacks 層建立新的 Elastic Load Balancing 負載平衡器。如果您選擇使用現有的 Elastic Load Balancing 負載平衡器，您應該先確認它未用於其他用途，也沒有連接的執行個體。在負載平衡器連接到 layer 之後，OpsWorks 會移除任何現有的執行個體，並設定負載平衡器，使其僅處理 layer 的執行個體。雖然在技術上可以使用 Elastic Load Balancing 主控台或 API 在將負載平衡器連接到 layer 之後修改負載平衡器的組態，但您不應該這麼做；變更不會永久存在。

**將現有的 OpsWorks layer 負載平衡器連接至 Auto Scaling 群組**

1. 執行遷移指令碼，並將 `--lb-type` 參數設定為 `None`。當值設為 時`None`，指令碼不會複製或建立負載平衡器。

1. 在指令碼部署 CloudFormation 堆疊之後，更新 Auto Scaling 群組`Min``Max`和`Desired capacity`值，然後測試您的應用程式。

1. 選擇`Link to the template`顯示在指令碼的輸出中。如果您關閉終端機，請採取這些步驟來存取範本。

   1.  在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

   1. 在導覽窗格中，選擇 **Application Manager**。

   1. 選擇 **CloudFormation 堆疊**，然後選擇**範本程式庫**。

   1. 選擇**由我擁有**，並找到您的範本。

1. 從 CloudFormation 範本中，從**動作**功能表中選擇**編輯**。

1. 更新 CloudFormation 範本`ApplicationAsg`資源區段中的 `LabelBalancerNames` 屬性。

   ```
   ApplicationAsg:
      DependsOn: CustomTerminationLambdaPermission
      Properties:
      #(other properties in ApplicationAsg to remain unchanged)
         LoadBalancerNames:
           - load-balancer-name 
         HealthCheckType: ELB
   ```

1. 如果您希望 Auto Scaling 群組執行個體的運作狀態檢查也使用負載平衡器的運作狀態檢查，請移除以下區段`HealthCheckType`並輸入 `ELB`。如果您只需要 EC2 運作狀態檢查，則不需要變更範本。

1. 儲存您的變更。儲存會建立新的範本預設版本。如果這是您第一次執行 layer 的指令碼，以及第一次在主控台中儲存變更，則較新版本為 2。

1. 從**動作 **中，選擇**佈建堆疊**。

1. 確認您想要使用範本的預設版本。請務必選取**選取現有的堆疊**，然後選擇要更新的 CloudFormation 堆疊。

1. 針對每個後續頁面選擇**下一步**，直到您看到**檢閱和佈建**頁面為止。在**檢閱和佈建**頁面上，選擇**我確認 AWS CloudFormation 可能會使用自訂名稱建立 IAM 資源****，而且我了解所選範本中的變更可能會導致 AWS CloudFormation 更新或移除現有 AWS 資源。**

1. 選擇 **Provision stack** (佈建堆疊)。

如果您需要復原更新，請執行下列步驟。

1. 選擇**動作**，然後選擇**佈建堆疊**。

1. 選擇**挑選其中一個現有版本**，然後選擇先前的範本版本。

1. 選擇**選取現有堆疊**，然後選擇要更新的 CloudFormation 堆疊。

## 自訂技術指南設定配方是否已遷移？
<a name="w2ab1c14c43c19c41"></a>

設定自訂技術指南不支援在設定事件期間執行。指令碼會遷移自訂技術指南設定配方，並為您建立 Systems Manager Automation Runbook。不過，您必須手動執行配方。

執行下列步驟來執行您的設定配方。

1.  在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Application Manager**。

1.  在**應用程式**區段中，選擇**自訂應用程式**。

1.  選擇您的應用程式。應用程式名稱開頭為 `app-stack-name`。

1.  選擇**資源**，然後選擇設定 Runbook。****

1. 選擇**執行自動化**。

1.  選擇您要執行設定配方的執行個體 IDs，然後選擇**執行**。

## 我可以在新建立的執行個體上執行部署和取消部署配方嗎？
<a name="w2ab1c14c43c19c43"></a>

指令碼可以根據您 layer 的組態建立三個可能的 Automation Runbook。
+  設定 
+  設定 
+  終止 

指令碼也可以建立下列 Systems Manager 參數，其中包含`AWS-ApplyChefRecipes Run Command`文件的輸入值。
+  設定 
+  部署 
+  設定 
+  Undeploy (解除部署) 
+  終止 

發生橫向擴展事件時，安裝 Automation Runbook 會自動執行。這包括從原始 OpsWorks 層設定和部署自訂技術指南配方。發生縮減事件時，終止 Automation Runbook 會自動執行。終止 Automation Runbook 包含來自原始 OpsWorks layer 的關機配方。

如果您想要手動執行取消部署或設定配方，請執行下列步驟。

1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Application Manager**。

1.  在**應用程式**區段中，選擇**自訂應用程式**。

1.  選擇您的應用程式。應用程式名稱以 開頭`app-stack-name-first-six-characters-stack-id`。Application Manager 會開啟**概觀**索引標籤。

1.  選擇**資源**，然後選擇設定 Automation Runbook。

1. 選擇**執行自動化**。

1.  如需 `applyChefRecipesPropertiesParameter` Automation Runbook 輸入參數，請參閱正確的 Systems Manager 參數。Systems Manager 參數名稱遵循格式 `/ApplyChefRecipes-Preset/OpsWorks-stack-name-OpsWorks-layer-name-first-six-characters-stack-id/event` ，其中*事件*的值為 `Configure`、 或 `Deploy`，`Undeploy`取決於您要執行的配方。

1. 選擇您要執行配方的執行個體 IDs，然後選擇**執行**。

## 我可以變更 Auto Scaling 群組跨越哪些子網路嗎？
<a name="w2ab1c14c43c19c45"></a>

根據預設，Auto Scaling 群組會跨越 OpsWorks 堆疊 VPC 中的所有子網路。若要更新要跨越哪些子網路，請執行下列步驟。

1. 選擇`Link to the template`顯示在指令碼的輸出中。如果您關閉終端機，請採取這些步驟來存取範本。

   1.  在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 Systems Manager 主控台。

   1. 在導覽窗格中，選擇 **Application Manager**。

   1. 選擇 **CloudFormation 堆疊**，然後選擇**範本程式庫**。

   1. 選擇**由我擁有**，並找到您的範本。

1.  在**動作**中，選擇**佈建堆疊**。

1.  確認您想要使用預設範本。選擇**選取現有堆疊**，然後選擇要更新的 CloudFormation 堆疊。
**注意**  
 如果您在 `--provision-application` 參數設定為 的情況下執行指令碼`FALSE`，則必須建立新的 CloudFormation 堆疊。

1.  針對 `SubnetIDs` 參數，提供您希望 Auto Scaling 群組跨越IDs 的逗號分隔清單。

1.  選擇**下一步**，直到您看到**檢閱和佈建**頁面為止。

1.  在**檢閱和佈建**頁面上，選擇**我確認 CloudFormation 可能會使用自訂名稱建立 IAM 資源****，而且我了解所選範本中的變更可能會導致 CloudFormation 更新或移除現有 AWS 資源**。

1.  選擇 **Provision stack** (佈建堆疊)。