故障診斷 CloudFormation - AWS CloudFormation

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

故障診斷 CloudFormation

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

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

故障診斷指南

如果 CloudFormation 無法建立、更新或刪除堆疊,您可以檢視錯誤訊息或日誌,以協助您進一步了解問題。下列任務說明故障診斷 CloudFormation 問題的一般方法。如需特定錯誤和解決方案的資訊,請參閱 故障診斷錯誤 一節。

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

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

    您也可以設定 CloudFormation 範本,以便將日誌發佈至 Amazon CloudWatch,其會在 中顯示日誌 AWS Management Console ,因此您不需要連線至 Amazon EC2執行個體。如需詳細資訊,請參閱 Application Management 部落格中的在 主控台中檢視 CloudFormation 日誌

故障診斷錯誤

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

刪除堆疊失敗

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

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

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

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

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

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

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

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

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

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

相依性錯誤

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

AWS Config 和 AWS Systems Manager 衝突

AWS Config 和 AWS Systems Manager 可以自動化基礎設施管理任務,這可能會導致與 CloudFormation 堆疊的部署衝突。請執行下列動作,以避免任何潛在的衝突:

  • 檢閱相關聯 AWS 帳戶 AWS Config 和 中 和 Systems Manager 的組態 AWS 區域。

  • 檢查 CloudFormation 部署期間可能觸發的作用中規則或自動化文件。這些可能會導致衝突或資源相依性與您的部署衝突。

  • 檢查您的 CloudFormation 範本是否有由 AWS Config 和 Systems Manager 管理的任何資源。檢查是否有潛在的重疊或相互依存性,並考慮調整範本或自動化組態以避免衝突。

  • 在 CloudFormation 部署期間暫時停用或暫停任何相關的 AWS Config 規則或 Systems Manager 自動化。請記得在成功部署後還原原始組態,以維持所需的自動化和合規層級。

  • 檢閱 CloudFormation 日誌和錯誤訊息,了解 和 Systems Manager 相關問題的任何參考 AWS Config ,以協助找出衝突的來源。

如需 AWS Config 規則的詳細資訊,請參閱使用 評估資源 AWS Config 規則

如需 Systems Manager 自動化的詳細資訊,請參閱AWS Systems Manager 自動化

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

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

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

IAM 許可不足

使用 CloudFormation 堆疊時,您不僅需要許可才能使用 CloudFormation,還必須擁有許可才能使用範本中所述的基礎服務。例如,如果您要建立 Amazon S3 儲存貯體或啟動 Amazon EC2執行個體,則需要 Amazon S3 或 Amazon 的許可EC2。先檢閱您的 IAM 政策並驗證您擁有必要的許可,再使用 CloudFormation 堆疊。如需詳細資訊,請參閱 使用 控制 CloudFormation 存取 AWS Identity and Access Management

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

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

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

超過配額

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

如需 CloudFormation 配額和調校策略,請參閱 瞭解 CloudFormation 配額

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

巢狀堆疊停滯於 UPDATE_COMPLETE_CLEANUP_IN_PROGRESSUPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESSUPDATE_ROLLBACK_IN_PROGRESS

巢狀堆疊無法復原。由於巢狀堆疊之間的潛在資源相依性, CloudFormation 因此在更新或復原所有巢狀堆疊之前,不會開始清除巢狀堆疊資源。當巢狀堆疊無法復原時, CloudFormation 會取消所有操作,無論其他巢狀堆疊處於何種狀態。巢狀堆疊已完成更新或復原,但由於另一個巢狀無法復原處於 UPDATE_COMPLETE_CLEANUP_IN_PROGRESSUPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS 狀態,因此未收到來自 的訊號 CloudFormation 以開始清理。更新失敗的巢狀堆疊未收到開始復原訊號,會處於 UPDATE_ROLLBACK_IN_PROGRESS 狀態。

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

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

無需執行更新

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

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

資源未回應,因為操作超過 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 狀態)。例如,您可能會有一個正在復原到已在 CloudFormation 之外刪除之舊資料庫執行個體的堆疊。因為 CloudFormation 不知道資料庫已刪除,所以會假設資料庫執行個體仍然存在,並嘗試復原至資料庫,導致更新復原失敗。

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

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

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

  • 資源的變更是在 之外進行 CloudFormation

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

  • 許可不足

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

  • 無效的安全權杖

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

  • 限制錯誤

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

  • 資源不穩定

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

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

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

等待條件未收到來自 Amazon EC2執行個體的必要訊號數量

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

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

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

  • 請確認該執行個體已連線到網際網路。如果執行個體位於 中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。您可以在 主控台的 CloudFormation Overview (概觀) 標籤上找到堆疊 ID。如需詳細資訊,請參閱從 CloudFormation 主控台檢視堆疊資訊

    重要

    請勿在 外部變更堆疊 CloudFormation。在 外部變更堆疊 CloudFormation 可能會使您的堆疊處於無法復原的狀態。

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

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

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