本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
堆疊失敗選項
在發生佈建失敗時,您可以從失敗點開始,而不復原成功佈建的資源,以反覆開發應用程式。透過指定堆疊失敗選項,您可以疑難排解處於 CREATE_FAILED
或 UPDATE_FAILED
狀態的資源。您可以為所有堆疊部署和變更集操作佈建失敗選項。
-
建立操作集以 Preserve successfully provisioned resources (保留已成功佈建的資源),可保留成功資源的狀態,而失敗的資源會保持失敗狀態,直到執行下一次更新操作為止。
-
更新與變更操作集以 Preserve successfully provisioned resources (保留已成功佈建的資源),可保留成功資源的狀態,同時將失敗的資源復原到上一個已知穩定狀態。失敗的資源將處於 UPDATE_FAILED
狀態。沒有上一個已知穩定狀態的資源將在下一次堆疊操作時遭刪除。
如需有關暫停失敗資源復原的更多詳細資訊,請參閱下列章節:
堆疊失敗選項概觀
從 AWS CloudFormation 主控台、API 或 AWS Command Line Interface (AWS CLI) 發出操作之前,指定佈建資源失敗的行為。然後,繼續進行資源的部署過程,而無需進行任何其他修改。在操作失敗的情況下,CloudFormation 會在每個獨立佈建路徑中的第一次失敗時停止。CloudFormation 可識別資源之間的相依性,以平行化獨立佈建動作。然後,它會繼續在每個獨立佈建路徑上佈建資源,直到遇到失敗為止。一個路徑中的失敗不會影響其他佈建路徑。CloudFormation 將繼續佈建資源,直到完成或在遇到其他失敗時停止。
修復任何問題以繼續部署程序。在早些時候無法成功佈建的資源上重試佈建動作之前,CloudFormation 會先執行必要的更新。您可以透過提交 Retry (重試)、Update (更新) 或 Roll back (復原) 操作來修復問題。例如,如果您要佈建 Amazon EC2 執行個體,且 EC2 執行個體在建立操作期間失敗,您可能需要調查錯誤,而不是立即復原失敗的資源。您可以檢閱系統狀態檢查和執行個體狀態檢查,一旦問題得到解決,選取 Retry (重試) 操作。
當堆疊操作失敗,並且您已經從 Stack failure options (堆疊失敗選項) 選單指定 Preserve successfully provisioned resources (保留已成功佈建的資源) 時,您可以選取下列選項。
-
Retry (重試) – 在失敗的資源上重試佈建操作,並繼續佈建範本,直到成功完成堆疊操作或下一次失敗為止。如果資源因不需要修改範本的問題而無法佈建,請選取此選項,例如 AWS Identity and Access Management (IAM) 許可。
-
Update (更新) – 已佈建的資源會在範本更新時更新。將重試建立或更新失敗的資源。如果資源因範本錯誤而無法佈建,且您已修改範本,請選取此選項。當您更新狀態為 FAILED
的堆疊時,您必須針對 Stack failure options (堆疊失敗選項) 選取 Preserve successfully provisioned resources (保留已成功佈建的資源),以繼續更新您的堆疊。
-
Roll back (復原) – CloudFormation 會將堆疊復原到上一個已知穩定狀態。
暫停堆疊復原的條件
若要暫停堆疊中失敗資源的復原,則必須符合下列條件。
保留已成功佈建的資源 (主控台)
- Create stack
-
在建立堆疊操作期間保留已成功佈建的資源
請登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/cloudformation 的 AWS CloudFormation 主控台。
-
選擇 Create stack (建立堆疊),然後選取 With new resources (standard) (使用新資源 (標準))。
-
在 Specify template (指定範本) 頁面上,使用下列其中一個選項選擇堆疊範本:
接受您的設定並選取 Next (下一步)。
-
在 Specify stack details (指定堆疊詳細資訊) 頁面上,在 Stack name (堆疊名稱) 方塊中輸入堆疊名稱。
-
在 Parameters (參數) 部分中,指定堆疊範本中定義的參數。
您可以用預設值來使用或變更任何參數。
-
當您滿意參數值時,請選擇 Next (下一步)。
-
在 Configure stack options (設定堆疊選項) 頁面上,您可以設定堆疊的其他選項。
-
對於 Stack failure options (堆疊失敗選項),請選取 Preserve successfully provisioned resources (保留已成功佈建的資源)。
-
當您滿意堆疊選項時,請選擇 Next (下一步)。
-
在 Review (檢閱) 頁面上檢閱您的堆疊並選取 Create stack (建立堆疊)。
結果:建立失敗的堆疊會將堆疊狀態轉換為 CREATE_FAILED
,以防止堆疊在堆疊操作遭遇失敗時復原。已成功佈建的資源處於 CREATE_COMPLETE
狀態。您可以在 Stack events (堆疊事件) 索引標籤中監控堆疊。
- Update stack
-
在更新堆疊操作期間保留已成功佈建的資源
請登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/cloudformation 的 AWS CloudFormation 主控台。
-
選取您希望更新的堆疊,然後選擇 Update (更新)。
-
在 Update stack (更新堆疊) 頁面上,使用下列其中一個選項選擇堆疊範本:
-
Use current template (使用目前範本)
-
Replace current template (取代目前範本)
-
Edit template in designer (在設計工具中編輯範本)
接受您的設定並選取 Next (下一步)。
-
在 Specify stack details (指定堆疊詳細資訊) 頁面上,指定堆疊範本中所定義的參數。
您可以用預設值來使用或變更任何參數。
-
當您滿意參數值時,請選擇 Next (下一步)。
-
在 Configure stack options (設定堆疊選項) 頁面上,您可以設定堆疊的其他選項。
-
對於 Behavior on provisioning failure (佈建失敗時的行為),選取 Preserve successfully provisioned resources (保留已成功佈建的資源)。
-
當您滿意堆疊選項時,請選擇 Next (下一步)。
-
在 Review (檢閱) 頁面上檢閱您的堆疊並選取 Update stack (更新堆疊)。
結果:更新失敗的堆疊會將狀態轉換為 UPDATE_FAILED
,並復原到上一個已知穩定狀態。沒有上一個已知穩定狀態的資源將在下一次堆疊操作時由 CloudFormation 刪除。已成功佈建的資源處於 CREATE_COMPLETE
或 UPDATE_COMPLETE
狀態。您可以在 Stack events (堆疊事件) 索引標籤中監控堆疊。
- Change set
-
您可以為狀態為 CREATE_FAILED
或 UPDATE_FAILED
的堆疊啟動變更集,但不適用於狀態 UPDATE_ROLLBACK_FAILED
。
在變更集操作期間保留已成功佈建的資源
請登入 AWS Management Console,開啟位於 https://console.aws.amazon.com/cloudformation 的 AWS CloudFormation 主控台。
-
選取包含您要啟動的變更集的堆疊,然後選擇 Change sets (變更集) 索引標籤。
-
選取變更集,然後選擇 Execute (執行)。
-
對於 Execute change set (執行變更集),選取 Preserve successfully provisioned resources (保留已成功佈建的資源) 選項。
-
選取 Execute change set (執行變更集)。
結果:更新失敗的堆疊會將狀態轉換為 UPDATE_FAILED
,並復原到上一個已知穩定狀態。沒有上一個已知穩定狀態的資源將在下一次堆疊操作時由 CloudFormation 刪除。已成功佈建的資源處於 CREATE_COMPLETE
或 UPDATE_COMPLETE
狀態。您可以在 Stack events (堆疊事件) 索引標籤中監控堆疊。
保留已成功佈建的資源 (AWS CLI)
- Create stack
-
在堆疊建立操作期間保留已成功佈建的資源
指定 create-stack 操作期間的 disable-rollback
選項或 on-failure DO_NOTHING
列舉。
-
使用 disable-rollback
選項向 create-stack
命令提供堆疊名稱和範本。
aws cloudformation create-stack --stack-name myteststack
--template-body file://DOC-EXAMPLE-BUCKET.json
--disable-rollback
命令會傳回下列輸出:
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
使用 describe-stacks
選項描述堆疊的狀態。
aws cloudformation describe-stacks --stack-name myteststack
命令會傳回下列輸出:
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"Description": "AWS CloudFormation Sample Template",
"Tags": [],
"Outputs": [],
"StackStatusReason": “The following resource(s) failed to create: [MyBucket]”,
"CreationTime": "2013-08-23T01:02:15.422Z",
"Capabilities": [],
"StackName": "myteststack",
"StackStatus": "CREATE_FAILED",
"DisableRollback": true
}
]
}
- Update stack
-
在更新堆疊操作期間保留已成功佈建的資源。
-
使用 disable-rollback
選項向 update-stack
命令提供現有堆疊名稱和範本。
aws cloudformation update-stack --stack-name myteststack
--template-url DOC-EXAMPLE-BUCKET.template
--disable-rollback
命令會傳回下列輸出:
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
使用 describe-stacks
或 describe-stack-events
選項描述堆疊的狀態。
aws cloudformation describe-stacks --stack-name myteststack
命令會傳回下列輸出:
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"Description": "AWS CloudFormation Sample Template",
"Tags": [],
"Outputs": [],
"CreationTime": "2013-08-23T01:02:15.422Z",
"Capabilities": [],
"StackName": "myteststack",
"StackStatus": "UPDATE_COMPLETE",
"DisableRollback": true
}
]
}
- Change set
-
您可以為狀態為 CREATE_FAILED
或 UPDATE_FAILED
的堆疊啟動變更集,但不適用於狀態 UPDATE_ROLLBACK_FAILED
。
在變更集操作期間保留已成功佈建的資源
指定 execute-change-set 操作期間的 disable-rollback
選項。
-
使用 disable-rollback
選項向 execute-change-set
命令提供堆疊名稱和範本。
aws cloudformation execute-change-set --stack-name myteststack
--change-set-name my-change-set
--template-body file://template.yaml
命令會傳回下列輸出:
{
"Id": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/my-change-set/bc9555ba-a949-xmpl-bfb8-f41d04ec5784",
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
使用 disable-rollback
選項啟動變更集。
aws cloudformation execute-change-set --stack-name myteststack
--change-set-name my-change-set
-–disable-rollback
-
使用 describe-stacks
或 describe-stack-events
選項判斷堆疊的狀態。
{
"StackEvents": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"EventId": "49c966a0-7b74-11ea-8071-024244bb0672",
"StackName": "myteststack",
"LogicalResourceId": " MyBucket",
"PhysicalResourceId": "MyBucket",
"ResourceType": "AWS::S3::Bucket",
"Timestamp": "2020-04-10T21:43:17.015Z",
"ResourceStatus": "UPDATE_FAILED"
"ResourceStatusReason": "User XYZ is not allowed to perform S3::UpdateBucket on MyBucket"
}
}
-
修正許可錯誤,然後重試操作。
aws cloudformation update-stack --stack-name myteststack
--use-previous-template --disable-rollback
命令會傳回下列輸出:
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
-
使用 describe-stacks
或 describe-stack-events
選項描述堆疊的狀態。
aws cloudformation describe-stacks --stack-name myteststack
命令會傳回下列輸出:
{
"Stacks": [
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
"Description": "AWS CloudFormation Sample Template",
"Tags": [],
"Outputs": [],
"CreationTime": "2013-08-23T01:02:15.422Z",
"Capabilities": [],
"StackName": "myteststack",
"StackStatus": "UPDATE_COMPLETE",
"DisableRollback": true
}
]
}
復原堆疊
將堆疊從 CREATE_FAILED 或 UPDATE_FAILED 堆疊狀態復原
指定 rollback-stack
操作,以將堆疊復原到上一個穩定狀態。
-
使用 rollback-stack
操作啟動復原並指定堆疊名稱。
aws cloudformation rollback-stack --stack-name myteststack
命令會傳回下列輸出:
{
"StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
如果堆疊不包含上一個已知穩定狀態,rollback-stack
操作將刪除堆疊。