疑難排 CloudFormation - AWS CloudFormation

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

疑難排 CloudFormation

使用時 AWS CloudFormation,建立、更新或刪除 CloudFormation 堆疊時可能會遇到問題。下列各節可協助您故障診斷一些您可能會遇到的常見問題。

如需有關的一般問題 CloudFormation,請參閱AWS CloudFormation 常見問題集。您也可以在 AWS CloudFormation 論壇中搜尋解答和張貼問題。

故障診斷指南

如果 AWS CloudFormation 無法建立、更新或刪除堆疊,您可以檢視錯誤訊息或記錄檔,以協助您進一步瞭解問題。下列工作說明疑難排解 CloudFormation 問題的一般方法。如需特定錯誤和解決方案的資訊,請參閱 故障診斷錯誤 一節。

  • 使用CloudFormation 主控台檢視堆疊的狀態。在主控台中,您可以檢視堆疊事件的清單,同時建立、更新或刪除您的堆疊。從這個清單中找到故障的事件,然後檢視該事件的狀態原因。狀態原因可能包含來自特定服務 AWS CloudFormation 或來自特定服務的錯誤訊息,可協助您疑難排解問題。如需如何檢視堆疊事件的詳細資訊,請參閱 檢視 AWS CloudFormation 堆疊資料和資源 AWS Management Console

  • 針對 Amazon EC2 問題,請檢視 cloud-init 和 cfn 日誌。這些日誌發佈於 Amazon EC2 執行個體的 /var/log/ 目錄中。這些記錄會在設定執行個體時 AWS CloudFormation 擷取處理序和命令輸出。針對 Windows,請檢視位於 %ProgramFiles%\Amazon\EC2ConfigService 的 EC2Configure 服務、位於 %ProgramData%\Amazon\EC2-Windows\Launch\Logs 的 EC2 Launch、位於 %ProgramData%\Amazon\EC2Launch\log 的 EC2 Launch v2 和位於 C:\cfn\log 的 cfn 日誌。

    您也可以設定 AWS CloudFormation 範本,以便將日誌發佈到 Amazon CloudWatch,該日誌會在中顯示日誌, AWS Management Console 因此您不必連接到 Amazon EC2 執行個體。如需詳細資訊,請參閱應用程式管理部落格中的主控台檢視 CloudFormation 記錄

故障診斷錯誤

當您在 AWS CloudFormation 堆疊中遇到下列錯誤時,可以使用下列解決方案來協助您找出問題的來源並加以修正。

刪除堆疊失敗

為解決此狀況,請嘗試下列作業:

  • 某些資源在刪除之前必須先清空。例如,您必須刪除 Amazon S3 儲存貯體中的所有物件或移除 Amazon EC2 安全群組中的所有執行個體,才能刪除該儲存貯體或安全群組。

  • 請確保您擁有必要 IAM 許可來刪除堆疊中的資源。除了許 AWS CloudFormation 可之外,您還必須被允許使用基礎服務,例如 Amazon S3 或 Amazon EC2。

  • 當堆疊因 AWS CloudFormation 無法刪除資源而處於DELETE_FAILED狀態時,請使用RetainResources參數重新執行刪除,並指定 AWS CloudFormation 無法刪除的資源。 AWS CloudFormation 刪除堆棧而不刪除保留的資源。如果無法刪除某個資源 (如包含您希望保留之物件的 S3 儲存貯體),但仍需要刪除堆疊,則保留資源很有用。

    刪除堆疊後,您可以使用其關聯的 AWS 服務手動刪除保留的資源。

    或者,您可以考慮將FORCE_DELETE_STACK選項與DeletionMode參數搭配使用。如需強制刪除堆疊的詳細資訊,請參閱DeleteStack

  • 您無法刪除啟用終止保護的堆疊。如果您嘗試刪除啟用終止保護的堆疊,則刪除會失敗,且堆疊及其狀態保持不變。請在堆疊上停用終止保護,然後再次執行刪除操作。

    這包括根堆疊已啟用終止保護的巢狀堆疊。請在根堆疊上停用終止保護,然後再次執行刪除操作。強烈建議您不要直接刪除巢狀堆疊,而只在刪除根堆疊及其所有資源時作為其一部分來刪除。

    如需詳細資訊,請參閱 防止堆疊遭刪除

  • 對於所有其他問題,如果您有 AWS Support,您可以建立 AWS Support 案例。請參閱聯絡支援

相依性錯誤

若要解決相依性錯誤,請將 DependsOn 屬性新增至依賴於您範本中其他資源的資源。在某些情況下,您必須明確宣告相依性,才 AWS CloudFormation 能以正確的順序建立或刪除資源。例如,如果您使用網際網路閘道在相同的堆疊中建立彈性 IP 和 VPC,則該彈性 IP 必須依賴於網際網路閘道附件。如需其他資訊,請參閱 DependsOn 屬性

傳遞清單時剖析參數出現錯誤

當您使用 AWS Command Line Interface 或傳 AWS CloudFormation 入清單時,請在每個逗號之前加入逸出字元 (\)。下列範例說明如何在使用 AWS CLI時指定輸入參數。

ParameterKey=CIDR,ParameterValue='10.10.0.0/16\,10.10.0.0/24\,10.10.1.0/24'

IAM 許可不足

當您使用 AWS CloudFormation 堆疊時,您不僅需要使用權限 AWS CloudFormation,還必須擁有使用範本中描述的基礎服務的權限。例如,如果您建立 Amazon S3 儲存貯體或啟動 Amazon EC2 執行個體,您需要 Amazon S3 或 Amazon EC2 的許可。在使用 AWS CloudFormation 堆疊之前,請檢閱 IAM 政策並確認您擁有必要的許可。若要取得更多資訊,請參閱控制存取 AWS Identity and Access Management

無效的值或不支援的資源屬性

當您建立或更新堆疊時, AWS CloudFormation 堆疊可能會因為無效的輸入參數、不支援的資源屬性名稱或不支援的資源屬性值而失敗。針對輸入參數,請驗證資源是否存在。例如,當您指定 Amazon EC2 金鑰對或 VPC ID 時,資源必須存在於您建立或更新堆疊的帳戶和區域中。您可以使用 AWS特定的參數類型以確保您使用有效的值。

針對資源屬性名稱和值,請更新您的範本,以使用有效的名稱和值。如需所有資源及其屬性名稱的清單,請參閱 AWS 資源和屬性類型參考

超過配額

確認您未達到資源配額。例如,您可以啟動的 Amazon EC2 隨需執行個體預設數目上限為 5。如果嘗試建立的 Amazon EC2 隨需執行個體數量超出帳戶配額,則執行個體建立會失敗,且您會收到錯誤 Status=start_failed。若要依服務檢視預設的 AWS 配額,請參閱 AWS 一般參考 中的 AWS 服務配額

如需 AWS CloudFormation 配額和調整策略的相關資訊,請參閱瞭解 CloudFormation 配額

此外,在更新期間,如果資源被替換,則在刪除舊資源之前 AWS CloudFormation 創建新資源。此替換可能會讓您的帳戶超過資源配額,而導致您的更新失敗。您可以刪除多餘的資源,或請求提高配額

巢狀堆疊停滯於 UPDATE_COMPLETE_CLEANUP_IN_PROGRESSUPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESSUPDATE_ROLLBACK_IN_PROGRESS

巢狀堆疊無法復原。由於嵌套堆棧之間的潛在資源依賴關係, AWS CloudFormation 直到所有嵌套堆棧都已更新或回滾後才開始清理嵌套堆棧資源。當巢狀堆疊無法復原時,會 AWS CloudFormation 取消所有作業,不論其他巢狀堆疊處於何種狀態。嵌套堆棧完成更新或回滾,但沒有收 AWS CloudFormation 到信號開始清理,因為另一個嵌套無法回滾處於UPDATE_COMPLETE_CLEANUP_IN_PROGRESSUPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS狀態。更新失敗的巢狀堆疊未收到開始復原訊號,會處於 UPDATE_ROLLBACK_IN_PROGRESS 狀態。

當堆疊範本無法準確反映堆疊狀態時 AWS CloudFormation,巢狀堆疊可能會因為外部所做的變更而無法回復。如果巢狀堆疊中的 Auto Scaling 群組在建立或更新時沒有足夠資源訊號逾時期間,則該巢狀堆疊也可能無法復原。

若要修正堆疊,請聯絡 AWS Support

無需執行更新

若要更新 AWS CloudFormation 堆疊,您必須將範本或參數值變更提交至 AWS CloudFormation。但是, AWS CloudFormation 不會將某些範本變更識別為更新,例如刪除原則、更新原則、條件宣告或輸出宣告的變更。如果您需要做此類變更但無需其他變更,您可以新增或修改任何資源的中繼資料屬性。

如需在更新期間修改範本的詳細資訊,請參閱 修改堆疊範本

在建立、更新或刪除堆疊操作期間,資源無法穩定

資源沒有回應,因為作業超過 AWS CloudFormation 逾時期間或 AWS 服務中斷。如果是服務中斷,請檢查相關 AWS 服務是否正在執行,然後重試堆疊作業。

如果 AWS 服務已成功執行,請檢查您的堆疊是否包含下列資源之一:

  • AWS::AutoScaling::AutoScalingGroup 用於建立、更新和刪除操作

  • AWS::CertificateManager::Certificate 用於建立操作

  • AWS::CloudFormation::Stack 用於建立、更新和刪除操作

  • AWS::ElasticSearch::Domain 用於更新操作

  • AWS::RDS::DBCluster 用於建立和更新操作

  • AWS::RDS::DBInstance 用於建立、更新和刪除操作

  • AWS::Redshift::Cluster 用於更新操作

這些資源的操作時間可能會超過預設逾時期間。逾時期間取決於您使用的資源和憑證。若要延長逾時期間,請在執行堆疊操作時指定服務角色。如果您已使用服務角色,或您的堆疊包含未列出的資源,請聯絡 AWS Support

如果您的堆疊處於 UPDATE_ROLLBACK_FAILED 狀態,請參閱更新復原失敗

安全群組不存在於 VPC

請確認您指定的 VPC 中存在安全群組。如果安全群組存在,請確認您指定安全群組 ID,而不是安全群組名稱。例如,AWS::EC2::SecurityGroupIngress 資源具有 SourceSecurityGroupNameSourceSecurityGroupId 屬性。針對 VPC 安全群組,您必須使用 SourceSecurityGroupId 屬性,並指定安全群組 ID。

更新復原失敗

依存資源無法返回其原始狀態,導致復原失敗 (UPDATE_ROLLBACK_FAILED 狀態)。例如,您可能會有一個正在復原到已在 AWS CloudFormation之外刪除之舊資料庫執行個體的堆疊。因為 AWS CloudFormation 不知道資料庫已刪除,它會假設資料庫執行個體仍然存在,並嘗試復原至該執行個體,導致更新復原失敗。

根據失敗的原因,您可以手動修正錯誤並繼續進行復原。透過繼續執行復原,您便可以讓您的堆疊回到運作狀態 (UPDATE_ROLLBACK_COMPLETE 狀態),然後再次嘗試更新堆疊。針對造成更新復原失敗常見的錯誤,下列清單說明解決方案:

  • 無法接收所需數目的訊號

    使用 signal-resource 命令對等待訊號的資源手動傳送所需數目的成功訊號,然後繼續復原更新。例如,在更新復原期間,Auto Scaling 群組中的執行個體可能無法在指定逾時期間內成功發出訊號。請手動傳送成功訊號到 Auto Scaling 群組。當您繼續更新復原時,會 AWS CloudFormation 看到您的訊號並繼續進行復原。

  • 對資源的變更是在 AWS CloudFormation

    請手動同步資源,使其符合原始堆疊的範本,然後繼續復原更新。例如,如果您手動刪除了嘗試復原至的資源,則必須以原始堆疊中相同的名稱和屬性手動建立該資源。 AWS CloudFormation

  • 許可不足

    確認您有足夠的 IAM 許可來修改資源,然後繼續更新復原。例如,您的 IAM 政策可能可讓您建立 S3 儲存貯體,但不能修改該儲存貯體。將修改動作新增至您的政策。

  • 無效的安全權杖

    AWS CloudFormation 需要一組新的認證。無需做出任何變更。繼續復原更新,這會重新整理憑證。

  • 限制錯誤

    刪除您不需要的資源,或請求提高配額,然後繼續復原更新。例如,如果您帳戶的 EC2 隨需執行個體數目配額為 5,而更新復原超過該配額,則復原將會失敗。

  • 資源不穩定

    資源沒有回應,因為作業可能已超過 AWS CloudFormation 逾時期間,或 AWS 服務可能已中斷。無需做出任何變更。資源作業完成或 AWS 服務恢復作業之後,請繼續復原更新。

若要繼續復原更新,您可以使用主 AWS CloudFormation 控台或 AWS 命令列介面 (AWS CLI)。如需詳細資訊,請參閱 繼續復原更新

如果這些解決方案都不起作用,則可以跳過無法成功回滾的資源。 AWS CloudFormation 如需詳細資訊,請ResourcesToSkip參閱 API 參ContinueUpdateRollbackAPI 作業的AWS CloudFormation 參數。 AWS CloudFormation 設置指定資源的狀態,UPDATE_COMPLETE並繼續回滾堆棧。在復原完成後,跳過資源的狀態會和堆疊範本中資源的狀態不一致。在您執行下一次堆疊更新前,您必須修改資源或更新堆疊,使其和彼此保持一致。若您未這麼做,後續的堆疊更新可能會失敗,使堆疊無法復原。

等待條件未收到來自 Amazon EC2 執行個體所需數目的訊號

為解決此狀況,請嘗試下列作業:

  • 確定您使用的 AMI 已安裝 AWS CloudFormation 協助程式指令碼。如果 AMI 不包含協助程式指令碼,您也可以將指令碼下載到您的執行個體。如需詳細資訊,請參閱 CloudFormation 輔助腳本參考

  • 請確認已成功在執行個體上執行 cfn-signal 命令。您可以檢視日誌,例如 /var/log/cloud-init.log/var/log/cfn-init.log,以協助您除錯執行個體啟動。您可以透過登入執行個體來擷取記錄,但是您必須在失敗時停用復原功能,否則 AWS CloudFormation 會在堆疊建立失敗後刪除執行個體。您也可以將日誌發佈到 Amazon CloudWatch。針對 Windows,您可以檢視 C:\cfn\log 中的 cfn 日誌和 %ProgramFiles%\Amazon\EC2ConfigService 中的 EC2Config 服務日誌。

  • 請確認該執行個體已連線到網際網路。如果執行個體位於 VPC,則執行個體可以透過 NAT 裝置 (在私有子網路中時) 或透過網際網路閘道 (在公有子網路中時) 連線到網際網路。若要測試執行個體的網際網路連線,請嘗試存取公有網頁,例如 http://aws.amazon.com。例如,您可以在執行個體上執行下列命令。它應會傳回 HTTP 200 狀態碼。

    curl -I https://aws.amazon.com

    如需有關設定 NAT 裝置的資訊,請參閱《Amazon VPC 使用者指南》中的 NAT

從堆疊中移除但未刪除的資源

在堆棧更新期間, CloudFormation 已從堆棧中刪除資源,但沒有刪除該資源。資源仍然存在,但無法再透過 CloudFormation. 這可能會發生在堆疊更新期間,其中:

  • CloudFormation 需要替換現有資源,因此它首先創建一個新資源,然後嘗試刪除舊資源。

  • 您已從堆疊範本中移除資源,因此 CloudFormation嘗試從堆疊中刪除資源。

但是,在某些情況下, CloudFormation 可能無法刪除資源。例如,如果使用者沒有刪除指定類型資源的許可。

CloudFormation 嘗試刪除舊資源三次。如果 CloudFormation 無法刪除舊資源,它會從堆棧中刪除舊資源並繼續更新堆棧。當堆疊更新完成時,會 CloudFormation 發出UPDATE_COMPLETE堆疊事件,但包StatusReason含指出無法刪除一或多個資源的資源。 CloudFormation 還會針對特定資源發出DELETE_FAILED事件,並StatusReason提供有關刪除資源 CloudFormation 失敗的原因的更多詳細資訊。

若要解決此情況,請直接使用主控台或基礎服務的 API 來刪除資源。

聯絡支援

如果您有 AWS Support,您可以在 https://console.aws.amazon.com/support/home#/ 建立技術支援案例。在您聯絡支援人員前,請收集下列資訊:

  • 堆疊 ID。您可以在 主控台的AWS CloudFormation Overview (概觀) 標籤上找到堆疊 ID。如需詳細資訊,請參閱 檢視 AWS CloudFormation 堆疊資料和資源 AWS Management Console

    重要

    不要對外面的堆棧進行更改 AWS CloudFormation。在之外對堆棧進行更改 AWS CloudFormation 可能會使堆棧處於無法恢復的狀態。

  • 任何堆疊錯誤訊息。如需檢視堆疊錯誤訊息的資訊,請參閱 故障診斷指南 一節。

  • 針對 Amazon EC2 問題,請收集 cloud-init 和 cfn 日誌。這些日誌發佈於 Amazon EC2 執行個體的 /var/log/ 目錄中。這些日誌會在設定您的執行個體時擷取程序和命令輸出。針對 Windows,請在 %ProgramFiles%\Amazon\EC2ConfigServiceC:\cfn\log 中收集 EC2Configure 服務和 cfn 日誌。

您也可以在 AWS CloudFormation 論壇中搜尋解答和張貼問題。