本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
常見問答集
以下常見問答集提供一些常見問題的解答。
主題
- 我可以遷移哪些 AWS OpsWorks Stacks 版本?
- 遷移的執行個體可以使用哪些 Chef 版本?
- 我可以遷移哪些存放庫類型?
- 我可以繼續使用私人 Git 儲存庫嗎?
- 我可以使用哪些安全殼層金鑰存取我的執行個體?
- 為什麼我的執行個體會自動擴展和擴展?
- 我可以關閉「Auto Scaling」功能嗎?
- 我可以在啟動的 EC2 實例上執行內核和軟件包更新嗎?
- 為什麼我的執行個體中的 EBS 磁碟區不包含任何資料?
- 為什麼我的啟動範本中描述的 EBS 磁碟區沒有掛載?
- 我在哪裡可以找到廚師食譜和安裝 EBS 卷日誌?
- 我在哪裡可以找到遷移腳本的調試日誌?
- 遷移腳本是否支持 CloudFormation 模板版本控制?
- 我可以移轉多個圖層嗎?
- 如何建立SecureString參數?
- 如何保護新 Auto Scaling 群組中的執行個體不受終止事件影響?
- 遷移指令碼提供哪些負載平衡器?
- 自訂食譜配置食譜是否已遷移?
- 我可以在新建立的執行個體上執行部署和取消部署方法嗎?
- 我可以變更 Auto Scaling 群組跨越哪些子網路?
我可以遷移哪些 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 通訊協定安全性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/
為什麼我的執行個體會自動擴展和擴展?
「Auto Scaling」會根據「Auto Scaling」群組的縮放規則來縮放例證。您可以為群組設定「最小」、「最大」和「所需的容量」值。「自動調整」(Auto Scaling) 群組會在您更新這些值時自動調整容量的
我可以關閉「Auto Scaling」功能嗎?
您可以將「自動調整比例」群組的「最小」、「最大」和「所需容量」值設定為相同的數字來關閉「Auto Scaling 整比例」。例如,如果您想要永遠擁有十個執行個體,請將「最小」、「最大」和「所需容量」值設定為 10。
我可以在啟動的 EC2 實例上執行內核和軟件包更新嗎?
根據預設,EC2 執行個體啟動時會更新核心和套件。使用下列步驟在已啟動的 EC2 執行個體上執行核心或套件更新。例如,您可能想要在執行部署或設定方法之後套用更新。
-
連線至 EC2 執行個體。
-
創建以下
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
-
核心和套件更新後,您可能需要重新啟動 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
-
如果在
reboot is required
訊息中執行reboot_if_required
結果,請重新啟動 EC2 執行個體。如果您收到reboot is not required
訊息,則不需要重新啟動 EC2 執行個體。
為什麼我的執行個體中的 EBS 磁碟區不包含任何資料?
當您執行指令碼時,指令碼會移轉 EBS 磁碟區的組態,並為您的 OpsWorks 堆疊和層建立取代架構。指令碼不會移轉實際執行個體或執行個體中包含的資料。此指令碼只會在層級遷移 EBS 磁碟區的組態,並將空的 EBS 磁碟區附加至已啟動的 EC2 執行個體。
請執行下列步驟,從先前執行個體的 EBS 磁碟區提取資料。
-
拍攝先前執行個體 EBS 磁碟區的快照。如需有關建立快照的詳細資訊,請參閱 Amazon EC2 使用者指南中的建立 Amazon EBS 快照。
-
從快照建立磁碟區。如需有關從快照建立磁碟區的詳細資訊,請參閱 Amazon EC2 使用者指南中的從快照建立磁碟區。
-
將您建立的磁碟區附加至執行個體。如需有關連接磁碟區的詳細資訊,請參閱 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 只有日誌廚師
setup
和terminate
食譜。
我在哪裡可以找到遷移腳本的調試日誌?
指令碼會將偵錯記錄放置在名為的值區中aws-opsworks-stacks-transition-logs-
。您可以在 S3 儲存貯體的資料account-id
migration_script
夾中,找到與您移轉之層名稱相符的資料夾下的偵錯日誌。
遷移腳本是否支持 CloudFormation 模板版本控制?
此指令碼會產生類型的 Systems Manager 文件, CloudFormation 這些文件會為您要移轉的圖層或堆疊建立取代項目。再次執行腳本,即使使用相同的參數,也會匯出先前匯出的圖層範本的新版本。範本版本與指令碼記錄存放在相同的 S3 儲存貯體中。
我可以移轉多個圖層嗎?
指令碼的--layer-id
參數會在單一圖層中傳遞。若要移轉多個圖層,請重新執行指令碼並傳入不同--layer-id
的指令碼。
屬於相同 OpsWorks 堆疊一部分的圖層會列在「應用程式管理員」中的相同應用程式下。
-
開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/
。 -
在功能窗格中,選擇 [應用程式管理員]。
-
在應用程式區段中,選擇自訂應用程式。
-
選擇您的應用程式。應用程式名稱開頭為
app-
。stack-name
-first-six-characters-stack-id
-
從 app 開始的頂層元素,顯示與您的 OpsWorks 堆棧相對應的所有組件。這包括與 OpsWorks 圖層相對應的元件。
-
選擇與層次對應的元件,以檢視層次的資源。表示 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 群組
-
在
--lb-type
參數設定為的情況下執行移轉指令碼None
。當值設定為時None
,指令碼不會複製或建立負載平衡器。 -
指令碼部署 CloudFormation 堆疊後,請更新 Auto Scaling 群組
Min
Max
和Desired capacity
值,然後測試您的應用程式。 -
選擇腳本輸出中
Link to the template
顯示的。如果您關閉終端機,請執行以下步驟來存取範本。-
開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/
。 -
在功能窗格中,選擇 [應用程式管理員]。
-
選擇「CloudFormation 堆疊」,然後選擇「範本庫」。
-
選擇「我擁有」並找到您的範本。
-
-
從 CloudFormation 範本中,從「動作」功能表選擇 「編輯」。
-
更新
LabelBalancerNames
CloudFormation範本資ApplicationAsg
源區段內的屬性。ApplicationAsg: DependsOn: CustomTerminationLambdaPermission Properties: #(other properties in ApplicationAsg to remain unchanged) LoadBalancerNames: -
load-balancer-name
HealthCheckType: ELB -
如果您希望 Auto Scaling 群組執行個體健康狀態檢查也使用負載平衡器的健康狀態檢查,請移除以下區段
HealthCheckType
並輸入ELB
。如果您只需要 EC2 運作狀態檢查,則不需要變更範本。 -
儲存您的變更。儲存會建立範本的新預設版本。如果這是您第一次為圖層運行腳本,並且第一次在控制台中保存更改,則較新的版本是 2。
-
從動作中選擇佈建堆疊。
-
確認您要使用範本的預設版本。確定已選取「選取現有堆疊」,然後選擇要更新的 CloudFormation 堆疊。
-
為後續每個頁面選擇「下一步」,直到您看到「複查和啟動設定」頁面為止。在 [檢閱和佈建] 頁面上,選擇 [我確認可 AWS CloudFormation 能會使用自訂名稱建立 IAM 資源],並且我瞭解所選範本中的變更可能會導 AWS CloudFormation 致更新或移除現有 AWS 資源。
-
選擇 Provision stack (佈建堆疊)。
如果您需要回復更新,請執行下列步驟。
-
選擇動作,然後選擇佈建堆疊。
-
選擇 [挑選其中一個現有版本],然後選擇先前的範本版本。
-
選擇 [選取現有堆疊],然後選擇要更新的 CloudFormation 堆疊。
自訂食譜配置食譜是否已遷移?
設定自訂食譜不支援在安裝事件期間執行。該腳本遷移自定義食譜配置方法,並為您創建一個 Systems Manager 自動化手冊。但是,您必須手動運行配方。
採取下列步驟來執行您的設定配置方法。
-
開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/
。 -
在功能窗格中,選擇 [應用程式管理員]。
-
在應用程式區段中,選擇自訂應用程式。
-
選擇您的應用程式。應用程式名稱開頭為
app-
。stack-name
-
選擇資源,然後選擇配置 Runbook。
-
選擇執行自動化。
-
選擇您要執行設定方法的執行個體 ID,然後選擇 [執行]。
我可以在新建立的執行個體上執行部署和取消部署方法嗎?
該腳本可以創建三個可能的自動化手冊,具體取決於您的層的配置。
-
設定
-
設定
-
終止
此指令碼也可以建立下列包含AWS-ApplyChefRecipes Run Command
文件輸入值的 Systems Manager 參數。
-
設定
-
部署
-
設定
-
Undeploy (解除部署)
-
終止
當擴充事件發生時,安裝程式自動執行手冊會自動執行。這包括從原始 OpsWorks 圖層設置和部署自定義食譜食譜。當縮放事件發生時,終止自動化 Runbook 會自動執行。終止自動化手冊包含來自原始 OpsWorks 圖層的關機配方。
如果您想要手動執行取消部署或設定方法,請執行下列步驟。
-
開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/
。 -
在功能窗格中,選擇 [應用程式管理員]。
-
在應用程式區段中,選擇自訂應用程式。
-
選擇您的應用程式。應用程式名稱開頭為
app-
。「應用程式管理員」會開啟「概觀stack-name
-first-six-characters-stack-id
-
選擇資源,然後選擇配置自動化手冊。
-
選擇執行自動化。
-
對於
applyChefRecipesPropertiesParameter
自動化執行手冊輸入參數,請參考正確的 Systems Manager 參數。「Systems Manager」參數名稱遵循格式/ApplyChefRecipes-Preset/
,其中OpsWorks-stack-name
-OpsWorks-layer-name
-first-six-characters-stack-id
/event
事件
的值為Configure
Deploy
、或Undeploy
視您要執行的方法而定。 -
選擇您要執行配方的執行個體 ID,然後選擇 [執行]。
我可以變更 Auto Scaling 群組跨越哪些子網路?
依預設,「Auto Scaling」群組會橫跨 OpsWorks 堆疊 VPC 中的所有子網路。若要更新要跨越的子網路,請執行下列步驟。
-
選擇腳本輸出中
Link to the template
顯示的。如果您關閉終端機,請執行以下步驟來存取範本。-
開啟 Systems Manager 主控台,網址為 https://console.aws.amazon.com/systems-manager/
。 -
在功能窗格中,選擇 [應用程式管理員]。
-
選擇「CloudFormation 堆疊」,然後選擇「範本庫」。
-
選擇「我擁有」並找到您的範本。
-
-
從動作中選擇佈建堆疊。
-
確認您要使用預設樣板。選擇 [選取現有堆疊],然後選擇要更新的 CloudFormation 堆疊。
注意
如果您在
--provision-application
參數設定為的情況下執行指令碼FALSE
,則必須建立新 CloudFormation 堆疊。 -
針對
SubnetIDs
參數,請提供您希望 Auto Scaling 群組跨越之子網路 ID 的逗號分隔清單。 -
選擇「下一步」,直到看到「檢閱及啟動設定」頁面
-
在 [檢閱和佈建] 頁面上,選擇 [我確認可 AWS CloudFormation 能會使用自訂名稱建立 IAM 資源],我瞭解所選範本中的變更可能會導 AWS CloudFormation 致更新或移除現有 AWS 資源。
-
選擇 Provision stack (佈建堆疊)。