StackSets 概念
當您使用 StackSets 時,您需使用 StackSets、堆疊執行個體和堆疊。
主題
管理員和目標帳戶
管理員帳戶是您用來建立 StackSets 的 AWS 帳戶。對於具有服務受管許可的 StackSets,管理員帳戶是組織的 管理帳戶 或委派管理員帳戶。您可以登入建立 StackSet 的 AWS 管理員帳戶,以管理 StackSet。
「目標帳戶」是您建立、更新或刪除 StackSet 中一或多個堆疊的帳戶。先要設定管理員和目標帳戶之間的信任關係,才可以使用 StackSet 在目標帳戶中建立堆疊。
CloudFormation StackSets
StackSet 可做為跨指定 AWS 帳戶 和區域部署之多個堆疊的容器。每個堆疊都基於相同的 CloudFormation 範本,但您可以使用參數自訂個別堆疊。
定義 StackSet 之後,就可以在您指定的目標帳戶和 AWS 區域 中建立、更新或刪除堆疊。當您建立、更新或刪除堆疊時,您也可以指定操作偏好設定。例如,包括您要執行操作的區域順序、堆疊操作停止前的失敗容錯閾值,以及同時執行堆疊操作的帳戶數目。
StackSet 是區域性資源。如果您在一個 AWS 區域 中建立 StackSet,您只能在檢視該區域時看到或變更它。
StackSets 的許可模型
您可以使用自我管理許可或服務受管許可來建立 StackSets。
透過自我管理許可,您可以建立跨帳戶和區域部署時 StackSets 所需的 IAM 角色。需要這些角色,才能在您用來管理 StackSet 的帳戶與堆疊執行個體部署目的地帳戶之間建立信任關係。使用此許可模型時,StackSets 可以部署到您有許可建立 IAM 角色的任何 AWS 帳戶。
透過服務受管許可,您可以將堆疊執行個體部署到 AWS Organizations 所管理的帳戶。使用此許可模型時,您不必建立需要的 IAM 角色;StackSets 會代表您建立 IAM 角色。使用此模型時,您也可以自動部署到未來您新增至組織的帳戶。
AWS Organizations 與 CloudFormation 整合,並協助您在擴充和擴展 AWS 資源的同時集中管理和控管您的環境。
-
管理帳戶 – 您用於建立組織的帳戶。如需詳細資訊,請參閱 AWS Organizations 的術語與概念。
-
委派管理員 – 相容的 AWS 服務可以將組織中的 AWS 成員帳戶註冊為該服務中組織帳戶的管理員。如需詳細資訊,請參閱可與 AWS Organizations 搭配使用的 AWS 服務。
如需使用服務受管許可建立和管理 StackSets 的詳細資訊,請參閱下列主題:
堆疊執行個體
「堆疊執行個體」是針對區域內某個目標帳戶中的堆疊所做的參考。堆疊執行個體可以在沒有堆疊的情況下存在。例如,如果因為某種原因而無法建立堆疊,則堆疊執行個體會顯示堆疊建立失敗的原因。堆疊執行個體僅與一個 StackSet 相關聯。
下圖顯示 StackSets、堆疊操作和堆疊之間的邏輯關係。當您更新 StackSet 時,所有帳戶和區域中所有相關聯的堆疊執行個體都會更新。
StackSet 操作
您可以對 StackSets 執行下列操作。
- 建立 StackSet
-
建立新的 StackSet 包括:指定建立堆疊所使用的 CloudFormation 範本、指定建立堆疊的目標帳戶,以及識別在您目標帳戶中堆疊部署所在的 AWS 區域。StackSet 可確保在您選擇區域內的所有指定目標帳戶,相同的堆疊資源皆有一致的部署及相同的設定。
- 更新 StackSet
-
當您更新 StackSet 時,是將變更推送到 StackSet 中的堆疊。您可使用下列其中一種方法來更新 StackSet。您的範本更新一律影響所有堆疊;您無法選擇性更新 StackSet 中某些堆疊的範本,讓其他範本不受影響。
-
變更範本中的現有設定或新增新的資源,例如更新特定服務的參數設定,或者新增新的 Amazon EC2 執行個體。
-
使用不同的範本來取代範本。
-
跨現有或其他的區域,在現有或其他目標帳戶中新增堆疊。
-
- 刪除堆疊
-
當您刪除堆疊時,是從您指定區域內的指定目標帳戶,移除堆疊及其所有相關聯的資源。您可採用下列方式來刪除堆疊。
-
從某些目標帳戶刪除堆疊,同時讓其他目標帳戶中的其他堆疊繼續執行。
-
從某些區域刪除堆疊,同時讓其他區域中的堆疊繼續執行。
-
從您的 StackSet 刪除堆疊,但選擇保留堆疊選項,將其儲存,以繼續獨立執行您的 StackSet。隨後您可在 CloudFormation 中、StackSet 外,管理保留的堆疊。
-
刪除您 StackSet 中所有堆疊,準備刪除您的整個 StackSet。
-
- 刪除 StackSet
-
只有當 StackSet 中沒有任何堆疊執行個體時才可以刪除它。
StackSet 操作選項
本節所述的這些選項,有助於控制為成功執行 StackSet 操作所允許的故障時間和次數,並可防止您遺失堆疊資源。
- 同時帳戶上限
-
可用於建立、更新和刪除工作流程的此項設定,能讓您指定目標帳戶一次可執行之操作的數目或百分比上限。較低的數目或百分比,表示一次在較少的目標帳戶中執行某項操作。操作依 Deployment order (部署順序) 方塊中指定的順序,一次在一個區域中執行。例如,如果您要將堆疊部署到兩個區域內的 10 個目標帳戶,則 Maximum concurrent accounts (同時帳戶上限) 設定為 50 和 By percentage (依百分比) 就會將堆疊部署到第一個區域中的前五個帳戶,接著是第一個區域中的後五個帳戶,然後才會移至下一個區域並開始部署到前五個目標帳戶。
當您選擇 By percentage (依百分比) 時,如果指定的百分比不能代表您指定的帳戶整數,CloudFormation 會無條件捨去。例如,如果您要將堆疊部署到 10 個目標帳戶,而您將 Maximum concurrent accounts (同時帳戶上限) 設為 25 及 By percentage (依百分比),CloudFormation 就會將同時部署 2.5 個堆疊 (這不可能) 無條件捨去為同時部署兩個堆疊。
請注意,此設定可讓您指定操作的「上限」。針對大型的部署,因為服務調節之故,在某些情況下實際同時執行的帳戶數目會略低。
根據並行模式,並行帳戶上限取決於容錯能力的值。若您的並行模式設定為嚴格容錯能力,則並行帳戶上限最多可比容錯能力設定多一個。
- 並行模式
-
此設定可用於建立、更新和刪除工作流程,讓您能夠選擇 StackSet 操作期間並行層級的運作方式。如需更多詳細資訊,請參閱 選擇 CloudFormation StackSets 的並行模式。
- 容錯能力
-
可用於建立、更新和刪除工作流程的此項設定,能讓您指定每區域可發生之堆疊操作故障的數目或百分比上限,超過此值,CloudFormation 就會自動停止操作。較低的數目或百分比表示此操作在較少的堆疊上執行,但您能夠更快開始對失敗的操作進行疑難排解。例如,如果您要更新三個區域內 10 個目標帳戶中的 10 個堆疊,將容錯能力設定為 20 和依百分比,表示操作若要繼續,一個區域最多只能有兩個堆疊更新失敗。如果同一區域中發生第三個堆疊失敗,CloudFormation 就會停止操作。如果第一個區域中的堆疊無法更新,則該區域會繼續更新操作,然後移至下一個區域。如果第二個區域有兩個堆疊無法更新,即達到 20% 的容錯能力;如果該區域發生第三個堆疊更新失敗,CloudFormation 就會停止更新操作,不會推進到後續的區域。
當您選擇 By percentage (依百分比) 時,如果指定的百分比不能代表各個區域內您的堆疊整數,CloudFormation 會無條件捨去。例如,如果您要將堆疊部署到三個區域中的 10 個目標帳戶,而且您將容錯能力值設定為 25 和依百分比,CloudFormation 會將 2.5 個堆疊的容錯能力 (這不可能) 無條件捨去到每區域兩個堆疊的容錯能力。
- 保留堆疊
-
可用於刪除堆疊工作流程的此項設定,讓堆疊及其資源即使從 StackSet 移除後,仍能繼續執行。當您保留堆疊時,CloudFormation 會將堆疊留存在個別帳戶和區域中,保持不變。堆疊與 StackSet 會取消關聯,但堆疊及其資源仍儲存。完成刪除堆疊操作後,您可以在建立堆疊的目標帳戶 (非管理員帳戶) 中使用 CloudFormation 管理保留的堆疊。
- 區域並行
-
可用於建立、更新和刪除工作流程的此項設定,能讓您選擇如何將 StackSets 部署到區域內。
循序 – 只要一個區域的部署故障不超過指定的容錯能力,就可以依區域部署順序方塊中指定的,一次在一個區域中部署 StackSets 操作。順序部署是預設選項。
平行 – 只要一個區域的部署故障不超過指定的容錯能力,就可以平行在所有指定區域同步部署 StackSets 操作。
標籤
您可以在 StackSet 的建立和更新操作期間,透過指定金鑰值對來新增標籤。標籤有助於排序和篩選 StackSet 資源,處理帳單和成本分配。如需 AWS 中如何使用標籤的詳細資訊,請參閱《AWS 帳單與成本管理 使用者指南》中的使用 AWS 成本配置標籤組織及追蹤成本。在您指定索引鍵/值組之後,請選擇 + 以儲存標籤。您可以選擇標籤右邊的紅色 X 來刪除您不再適用的標籤。
您套用至 StackSets 的標籤會套用至所有堆疊及您堆疊建立的資源。您還可以在 CloudFormation 中在僅限堆疊的層級新增標籤,但這些標籤可能不會出現在 StackSets 中。
雖然 StackSets 不會新增任何系統定義的標籤,但任何標籤的金鑰名稱都不應該以字串 aws: 開頭。
StackSets 狀態碼
CloudFormation StackSets 會產生 StackSets 操作的狀態碼。
下表說明 StackSet 操作狀態碼。
RUNNING-
操作正在進行中。
SUCCEEDED-
操作已完成,未超過操作的容錯能力。
FAILED-
操作無法完成的堆疊數目已超出使用者定義的容錯能力。在堆疊建立和更新操作期間,您設定的操作容錯能力適用於每個區域。如果某個區域內失敗的堆疊數目超過容錯能力,則區域中的操作狀態會變更為
FAILED。操作的整體狀態也會設為FAILED,CloudFormation 會取消任何剩餘區域的操作。 QUEUED-
[
Service-managed permissions] 對於需要一系列操作的自動部署,操作會進入佇列中等待執行。例如:-
將帳戶從一個組織單位 (OU)
OU1移至另一個組織單位OU2會觸發自動部署。StackSets 會執行刪除操作,以從目標區域中的目標OU1帳戶刪除堆疊執行個體,並將建立操作排入佇列,以將堆疊執行個體新增至目標區域中的目標OU2帳戶。 -
將帳戶
AccountA新增至 OU 會觸發自動部署。StackSets 會執行建立操作,以將堆疊執行個體新增至目標區域中的AccountA。如果您在此建立操作執行時將另一個帳戶AccountB新增至 OU,StackSets 會將第二個建立操作排入佇列。當第一個建立操作完成時,StackSets 會執行第二個建立操作,以將堆疊執行個體新增至目標區域中的AccountB。
-
STOPPING-
應使用者請求,正在停止操作。
STOPPED-
應使用者請求,已停止操作。
堆疊執行個體狀態碼
CloudFormation StackSets 會產生堆疊執行個體的狀態碼。
下表說明 StackSets 內堆疊執行個體的狀態碼。
CURRENT-
StackSet 的堆疊現為最新。
OUTDATED-
因為下列其中一個原因,StackSet 的堆疊不是最新。
-
相關聯堆疊上的 CreateStackSet 或 UpdateStackSet 操作失敗。
-
屬於 CreateStackSet 或 UpdateStackSet 操作的堆疊,在堆疊建立或更新前即已失敗或停止。
-
INOPERABLE-
DeleteStackInstances 操作失敗,且堆疊的狀態不穩定。後續的 UpdateStackSet 操作會排除此狀態的堆疊。您可能需要將
RetainStacks設定為true來執行 DeleteStackInstances 操作,以刪除堆疊執行個體,然後手動刪除堆疊。 CANCELLED-
指定帳戶和區域中的操作已被取消。這可能是因為使用者已停止 StackSet 操作,或是因為 StackSet 操作超過了容錯能力。
FAILED-
指定帳戶和區域中的操作失敗。如果區域內足夠多帳戶中的 StackSet 操作失敗,則可能會超過 StackSet 操作整體的容錯能力。
FAILED_IMPORT-
在指定帳戶和區域匯入堆疊執行個體失敗,並使堆疊處於不穩定狀態。一旦修正造成失敗的問題,可重試匯入操作。如果區域內足夠多帳戶中的足夠 StackSet 操作失敗,則可能會超過 StackSet 操作整體的容錯能力。
PENDING-
指定帳戶和區域中的操作尚未開始。
RUNNING-
指定帳戶和區域中的操作目前正在進行中。
SKIPPED_SUSPENDED_ACCOUNT-
已跳過指定帳戶和區域中的操作,因為帳戶在操作時被暫停。
SUCCEEDED-
指定帳戶和區域中的操作已順利完成。