常見問答集 - AWS OpsWorks

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

常見問答集

以下常見問答集提供一些常見問題的解答。

我可以遷移哪些 AWS OpsWorks Stacks 版本?

您只能遷移廚師 11.10 和廚師 12,Amazon Linux,Amazon Linux 2,Ubuntu 和紅帽企業 Linux 7 堆棧。

遷移的執行個體可以使用哪些 Chef 版本?

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

注意

不支援 Windows 堆疊移轉。

我可以遷移哪些存放庫類型?

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

我可以繼續使用私人 Git 儲存庫嗎?

是的,您可以繼續使用私有 Git 儲存庫。

如果您使用私人 GitHub 存放庫,則必須為 SSH 建立新的Ed25519主機金鑰。這是因為 GitHub 更改了 SSH 中支持的密鑰,並刪除了未加密的 Git 協議。如需有關Ed25519主機金鑰的詳細資訊,請參閱 < 改善 Git 通訊協定安全性 > 的 GitHub 部落格文章 GitHub。產生新的Ed25519主機金鑰後,請為此安全殼層金鑰建立 Systems Manager SecureString 參數,並使用參數名稱做為--repo-private-key參數的值。若要取得有關如何建立「Systems Manager」參數的更多資訊,請SecureString參閱《AWS Systems Manager 使用指南》中的〈建立 SecureString 參數 (AWS CLI)

對於任何其他 Git 存放庫類型,請為此安全殼層金鑰建立 Systems Manager SecureString 參數,並使用參數名稱做為指令碼--repo-private-key參數的值。

我可以使用哪些安全殼層金鑰存取我的執行個體?

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

為什麼我的執行個體會自動擴展和擴展?

「Auto Scaling」會根據「Auto Scaling」群組的縮放規則來縮放例證。您可以為群組設定「小」、「最大」和「所需的容量」值。「自動調整」(Auto Scaling) 群組會在您更新這些值時自動調整容量的

我可以關閉「Auto Scaling」功能嗎?

您可以將「自動調整比例」群組的「最小」、「最大」和「所需容量」值設定為相同的數字來關閉「Auto Scaling 整比例」。例如,如果您想要永遠擁有十個執行個體,請將「最」、「最大」和「所需容量」值設定為 10。

我可以在啟動的 EC2 實例上執行內核和軟件包更新嗎?

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

  1. 連線至 EC2 執行個體。

  2. 創建以下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
  3. 核心和套件更新後,您可能需要重新啟動 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
  4. 如果在reboot is required訊息中執行reboot_if_required結果,請重新啟動 EC2 執行個體。如果您收到reboot is not required訊息,則不需要重新啟動 EC2 執行個體。

為什麼我的執行個體中的 EBS 磁碟區不包含任何資料?

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

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

  1. 拍攝先前執行個體 EBS 磁碟區的快照。如需有關建立快照的詳細資訊,請參閱 Amazon EC2 使用者指南中的建立 Amazon EBS 快照

  2. 從快照建立磁碟區。如需有關從快照建立磁碟區的詳細資訊,請參閱 Amazon EC2 使用者指南中的從快照建立磁碟區。

  3. 將您建立的磁碟區附加至執行個體。如需有關連接磁碟區的詳細資訊,請參閱 Amazon EC2 使用者指南中的將 Amazon EBS 磁碟區連接到執行個體

為什麼我的啟動範本中描述的 EBS 磁碟區沒有掛載?

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

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

我在哪裡可以找到廚師食譜和安裝 EBS 卷日誌?

OpsWorks 將日誌傳遞到 S3 儲存貯體,您可以透過為--command-logs-bucket參數提供值來指定該儲存貯體。預設 S3 儲存貯體名稱的格式為:aws-opsworks-stacks-application-manager-logs-account-id。廚師食譜日誌存儲在ApplyChefRecipes前綴中。掛載 EBS 磁碟區記錄會儲存在MountEBSVolumes前置詞中。從堆疊遷移的所有層都會將日誌傳遞到相同的 S3 儲存貯體。

注意
  • S3 儲存貯體的生命週期組態包含在 30 天後刪除日誌的規則。如果您想要保留日誌超過 30 天,則必須更新 S3 儲存貯體的生命週期組態中的規則。

  • 目前, OpsWorks 只有日誌廚師setupterminate食譜。

我在哪裡可以找到遷移腳本的調試日誌?

指令碼會將偵錯記錄放置在名為的值區中aws-opsworks-stacks-transition-logs-account-id。您可以在 S3 儲存貯體的資料migration_script夾中,找到與您移轉之層名稱相符的資料夾下的偵錯日誌。

遷移腳本是否支持 CloudFormation 模板版本控制?

此指令碼會產生類型的 Systems Manager 文件, CloudFormation 這些文件會為您要移轉的圖層或堆疊建立取代項目。再次執行腳本,即使使用相同的參數,也會匯出先前匯出的圖層範本的新版本。範本版本與指令碼記錄存放在相同的 S3 儲存貯體中。

我可以移轉多個圖層嗎?

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

屬於相同 OpsWorks 堆疊一部分的圖層會列在「應用程式管理員」中的相同應用程式下。

  1. 開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/

  2. 在功能窗格中,選擇 [應用程式管理員]。

  3. 應用程式區段中,選擇自訂應用程式

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

  5. 從 app 開始的頂層元素,顯示與您的 OpsWorks 堆棧相對應的所有組件。這包括與 OpsWorks 圖層相對應的元件。

  6. 選擇與層次對應的元件,以檢視層次的資源。表示 OpsWorks 圖層的元件也可從「自訂應用程式」區段中看到,做為個別應用程式。

如何建立SecureString參數?

您可以使用「Systems Manager」建立SecureString參數。若要取得有關如何建立「Systems Manager」SecureString 參數的更多資訊,請 SecureString 參閱《AWS Systems Manager 使用指南》中的建立參數 (AWS CLI) 或建立 Systems Manager 參數 (主控台)

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

如何保護新 Auto Scaling 群組中的執行個體不受終止事件影響?

您可以將--enable-instance-protection參數設定為,TRUE並在要保護的每個 EC2 執行個體中新增一個protected_instance標籤金鑰,以保護執行個體。當您將--enable-instance-protection參數設定為TRUE並新增protected_instance標記金鑰時,指令碼會將自訂終止原則新增至新的 Auto Scaling 群組並暫停ReplaceUnhealthy程序。具有protected_instance標籤金鑰的執行個體受到保護,不受下列終止事件影響:

  • 事件中的規模

  • 執行個體重新整理

  • 重新平衡

  • 執行個體存留期

  • 允許列出實例終止

  • 終止和替換狀態不良的執行個體

注意

您必須在要保護的執行個體上設定protected_instance標籤金鑰。標籤鍵區分大小寫。無論標籤值為何,具有該標籤鍵的任何執行個體都會受到保護。

若要縮短自訂終止政策的執行時間,您可以透過更新函數程式碼變數的值,增加 Lambda 函數用來篩選受保護執行個體的預設執行個體數量。default_sample_size預設值為 15。如果增加default_sample_size,您可能需要增加分配給 Lambda 函數的記憶體,這會增加 Lambda 函數的成本。如需 AWS Lambda 定價的資訊,請參閱 AWS Lambda 定價

遷移指令碼提供哪些負載平衡器?

此指令碼提供三個負載平衡器選項。

  • (建議使用) 建立新的 Application Load Balancer。依預設,指令碼會建立新的 Application Load Balancer。您也可以將--lb-type參數設定為ALB。如需應用程式負載平衡器的相關資訊,請參閱什麼是應用程式負載平衡器? 在 E lastic Load Balancing 用戶指南中。

  • 如果應用程式負載平衡器不是選項,請將--lb-type參數設定為來建立「Classic Load Balancer」Classic。如果選取此選項,則連接至 OpsWorks層的現有 Classic Load Balancer 會與應用程式分開保持不同。如需應用程式負載平衡器的相關資訊,請參閱什麼是 Classic Load Balancer? 在 E lastic Load Balancing:傳統負載平衡器使用者指南中。

  • 您可以將--lb-type參數設定為,以連接現有的負載平衡器None

    重要

    我們建議您為 AWS OpsWorks Stack 層建立新的 Elastic Load Balancing 負載平衡器。如果您選擇使用現有的 Elastic Load Balancing 負載平衡器,您應該先確認該平衡器未用於其他用途,也沒有連接的執行個體。將負載平衡器連接到層後, OpsWorks 移除所有現有的執行個體,並設定負載平衡器僅處理層的執行個體。雖然在技術上可以使用 Elastic Load Balancing 控制台或 API 在將負載平衡器附加到層後修改負載平衡器的配置,但是您不應該這樣做;這些更改將不是永久性的。

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

  1. --lb-type參數設定為的情況下執行移轉指令碼None。當值設定為時None,指令碼不會複製或建立負載平衡器。

  2. 指令碼部署 CloudFormation 堆疊後,請更新 Auto Scaling 群組MinMaxDesired capacity值,然後測試您的應用程式。

  3. 選擇腳本輸出中Link to the template顯示的。如果您關閉終端機,請執行以下步驟來存取範本。

    1. 開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/

    2. 在功能窗格中,選擇 [應用程式管理員]。

    3. 選擇「CloudFormation 堆疊」,然後選擇「範本庫」。

    4. 選擇「我擁有」並找到您的範本。

  4. 從 CloudFormation 範本中,從「作」功能表選擇 「編輯」。

  5. 更新LabelBalancerNames CloudFormation範本資ApplicationAsg源區段內的屬性。

    ApplicationAsg: DependsOn: CustomTerminationLambdaPermission Properties: #(other properties in ApplicationAsg to remain unchanged) LoadBalancerNames: - load-balancer-name HealthCheckType: ELB
  6. 如果您希望 Auto Scaling 群組執行個體健康狀態檢查也使用負載平衡器的健康狀態檢查,請移除以下區段HealthCheckType並輸入ELB。如果您只需要 EC2 運作狀態檢查,則不需要變更範本。

  7. 儲存您的變更。儲存會建立範本的新預設版本。如果這是您第一次為圖層運行腳本,並且第一次在控制台中保存更改,則較新的版本是 2。

  8. 動作中選擇佈建堆疊

  9. 確認您要使用範本的預設版本。確定已選取「選取現有堆疊」,然後選擇要更新的 CloudFormation 堆疊。

  10. 為後續每個頁面選擇「下一步」,直到您看到「複查和啟動設定」頁面為止。在 [檢閱和佈建] 頁面上,選擇 [我確認可 AWS CloudFormation 能會使用自訂名稱建立 IAM 資源],並且我瞭解所選範本中的變更可能會導 AWS CloudFormation 致更新或移除現有 AWS 資源。

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

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

  1. 選擇動作,然後選擇佈建堆疊

  2. 選擇 [挑選其中一個現有版本],然後選擇先前的範本版本。

  3. 選擇 [選取現有堆疊],然後選擇要更新的 CloudFormation 堆疊。

自訂食譜配置食譜是否已遷移?

設定自訂食譜不支援在安裝事件期間執行。該腳本遷移自定義食譜配置方法,並為您創建一個 Systems Manager 自動化手冊。但是,您必須手動運行配方。

採取下列步驟來執行您的設定配置方法。

  1. 開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/

  2. 在功能窗格中,選擇 [應用程式管理員]。

  3. 應用程式區段中,選擇自訂應用程式

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

  5. 選擇資源,然後選擇配置 Runbook。

  6. 選擇執行自動化

  7. 選擇您要執行設定方法的執行個體 ID,然後選擇 [執行]。

我可以在新建立的執行個體上執行部署和取消部署方法嗎?

該腳本可以創建三個可能的自動化手冊,具體取決於您的層的配置。

  • 設定

  • 設定

  • 終止

此指令碼也可以建立下列包含AWS-ApplyChefRecipes Run Command文件輸入值的 Systems Manager 參數。

  • 設定

  • 部署

  • 設定

  • Undeploy (解除部署)

  • 終止

當擴充事件發生時,安裝程式自動執行手冊會自動執行。這包括從原始 OpsWorks 圖層設置和部署自定義食譜食譜。當縮放事件發生時,終止自動化 Runbook 會自動執行。終止自動化手冊包含來自原始 OpsWorks 圖層的關機配方。

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

  1. 開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/

  2. 在功能窗格中,選擇 [應用程式管理員]。

  3. 應用程式區段中,選擇自訂應用程式

  4. 選擇您的應用程式。應用程式名稱開頭為app-stack-name-first-six-characters-stack-id。「應用程式管理員」會開啟「概觀

  5. 選擇資源,然後選擇配置自動化手冊。

  6. 選擇執行自動化

  7. 對於applyChefRecipesPropertiesParameter自動化執行手冊輸入參數,請參考正確的 Systems Manager 參數。「Systems Manager」參數名稱遵循格式/ApplyChefRecipes-Preset/OpsWorks-stack-name-OpsWorks-layer-name-first-six-characters-stack-id/event,其中事件的值為ConfigureDeploy、或Undeploy視您要執行的方法而定。

  8. 選擇您要執行配方的執行個體 ID,然後選擇 [執行]。

我可以變更 Auto Scaling 群組跨越哪些子網路?

依預設,「Auto Scaling」群組會橫跨 OpsWorks 堆疊 VPC 中的所有子網路。若要更新要跨越的子網路,請執行下列步驟。

  1. 選擇腳本輸出中Link to the template顯示的。如果您關閉終端機,請執行以下步驟來存取範本。

    1. 開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/

    2. 在功能窗格中,選擇 [應用程式管理員]。

    3. 選擇「CloudFormation 堆疊」,然後選擇「範本庫」。

    4. 選擇「我擁有」並找到您的範本。

  2. 動作中選擇佈建堆疊

  3. 確認您要使用預設樣板。選擇 [選取現有堆疊],然後選擇要更新的 CloudFormation 堆疊。

    注意

    如果您在--provision-application參數設定為的情況下執行指令碼FALSE,則必須建立新 CloudFormation 堆疊。

  4. 針對SubnetIDs參數,請提供您希望 Auto Scaling 群組跨越之子網路 ID 的逗號分隔清單。

  5. 選擇「下一步」,直到看到「檢閱及啟動設定」頁面

  6. 在 [檢閱和佈建] 頁面上,選擇 [我確認可 AWS CloudFormation 能會使用自訂名稱建立 IAM 資源],我瞭解所選範本中的變更可能會導 AWS CloudFormation 致更新或移除現有 AWS 資源

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