本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
疑難排 CloudFormation
使用時 AWS CloudFormation,建立、更新或刪除 CloudFormation 堆疊時可能會遇到問題。下列各節可協助您故障診斷一些您可能會遇到的常見問題。
如需有關的一般問題 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_PROGRESS
、UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS
或 UPDATE_ROLLBACK_IN_PROGRESS
巢狀堆疊無法復原。由於嵌套堆棧之間的潛在資源依賴關係, AWS CloudFormation 直到所有嵌套堆棧都已更新或回滾後才開始清理嵌套堆棧資源。當巢狀堆疊無法復原時,會 AWS CloudFormation 取消所有作業,不論其他巢狀堆疊處於何種狀態。嵌套堆棧完成更新或回滾,但沒有收 AWS CloudFormation 到信號開始清理,因為另一個嵌套無法回滾處於UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
或UPDATE_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::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
資源具有 SourceSecurityGroupName
和 SourceSecurityGroupId
屬性。針對 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 參考中 ContinueUpdateRollback
API 作業的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\EC2ConfigService
和C:\cfn\log
中收集 EC2Configure 服務和 cfn 日誌。
您也可以在 AWS CloudFormation 論壇