StackSets 概念 - AWS CloudFormation

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 資源的同時集中管理和控管您的環境。

如需使用服務受管許可建立和管理 StackSets 的詳細資訊,請參閱下列主題:

堆疊執行個體

「堆疊執行個體」是針對區域內某個目標帳戶中的堆疊所做的參考。堆疊執行個體可以在沒有堆疊的情況下存在。例如,如果因為某種原因而無法建立堆疊,則堆疊執行個體會顯示堆疊建立失敗的原因。堆疊執行個體僅與一個 StackSet 相關聯。

下圖顯示 StackSets、堆疊操作和堆疊之間的邏輯關係。當您更新 StackSet 時,所有帳戶和區域中所有相關聯的堆疊執行個體都會更新。

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 (同時帳戶上限) 設定為 50By percentage (依百分比) 就會將堆疊部署到第一個區域中的前五個帳戶,接著是第一個區域中的後五個帳戶,然後才會移至下一個區域並開始部署到前五個目標帳戶。

當您選擇 By percentage (依百分比) 時,如果指定的百分比不能代表您指定的帳戶整數,CloudFormation 會無條件捨去。例如,如果您要將堆疊部署到 10 個目標帳戶,而您將 Maximum concurrent accounts (同時帳戶上限) 設為 25By 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 的堆疊不是最新。

INOPERABLE

DeleteStackInstances 操作失敗,且堆疊的狀態不穩定。後續的 UpdateStackSet 操作會排除此狀態的堆疊。您可能需要將 RetainStacks 設定為 true 來執行 DeleteStackInstances 操作,以刪除堆疊執行個體,然後手動刪除堆疊。

CANCELLED

指定帳戶和區域中的操作已被取消。這可能是因為使用者已停止 StackSet 操作,或是因為 StackSet 操作超過了容錯能力。

FAILED

指定帳戶和區域中的操作失敗。如果區域內足夠多帳戶中的 StackSet 操作失敗,則可能會超過 StackSet 操作整體的容錯能力。

FAILED_IMPORT

在指定帳戶和區域匯入堆疊執行個體失敗,並使堆疊處於不穩定狀態。一旦修正造成失敗的問題,可重試匯入操作。如果區域內足夠多帳戶中的足夠 StackSet 操作失敗,則可能會超過 StackSet 操作整體的容錯能力。

PENDING

指定帳戶和區域中的操作尚未開始。

RUNNING

指定帳戶和區域中的操作目前正在進行中。

SKIPPED_SUSPENDED_ACCOUNT

已跳過指定帳戶和區域中的操作,因為帳戶在操作時被暫停。

SUCCEEDED

指定帳戶和區域中的操作已順利完成。