

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

# 透過 StackSets 跨帳戶和區域管理堆疊
<a name="what-is-cfnstacksets"></a>

CloudFormation StackSets 可讓您跨多個帳戶建立、更新或刪除堆疊， AWS 區域 並使用單一操作來擴展堆疊的功能。您使用管理員帳戶定義與管理 CloudFormation 範本，並使用該範本做為基礎，將堆疊佈建至指定 AWS 區域中選定的目標帳戶。

![\[StackSet 是範本中一組資源的集合，會跨多個帳戶和區域部署。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/stack_set_conceptual_sv.png)


本節會協助您開始使用 StackSets，解答有關如何使用和疑難排解 StackSet 建立、更新和刪除等常見問題。

**Topics**
+ [StackSets 概念](stacksets-concepts.md)
+ [使用 CloudFormation StackSets 的先決條件](stacksets-prereqs.md)
+ [使用範例範本開始使用 StackSets](stacksets-getting-started.md)
+ [具有自我管理許可的 Create CloudFormation StackSets](stacksets-getting-started-create-self-managed.md)
+ [具有服務受管許可的 Create CloudFormation StackSets](stacksets-orgs-associate-stackset-with-org.md)
+ [在 中啟用或停用 StackSets 的自動部署 AWS Organizations](stacksets-orgs-manage-auto-deployment.md)
+ [Update CloudFormation StackSets](stacksets-update.md)
+ [將堆疊新增至 CloudFormation StackSets](stackinstances-create.md)
+ [覆寫 CloudFormation StackSet 中堆疊的參數值](stackinstances-override.md)
+ [從 CloudFormation StackSets 刪除堆疊](stackinstances-delete.md)
+ [Delete CloudFormation StackSets](stacksets-delete.md)
+ [使用目標帳戶閘道來防止失敗的 StackSets 部署](stacksets-account-gating.md)
+ [選擇 CloudFormation StackSets 的並行模式](concurrency-mode.md)
+ [在 CloudFormation StackSets 上執行漂移偵測](stacksets-drift.md)
+ [將堆疊匯入 CloudFormation StackSets](stacksets-import.md)
+ [使用 CloudFormation StackSets 的最佳實務](stacksets-bestpractices.md)
+ [CloudFormation StackSets 範本範例](stacksets-sampletemplates.md)
+ [疑難排解 CloudFormation StackSets](stacksets-troubleshooting.md)

# StackSets 概念
<a name="stacksets-concepts"></a>

下列術語和概念是您了解和使用 StackSets 的核心。

**Topics**
+ [管理員和目標帳戶](#stacksets-concepts-accts)
+ [CloudFormation StackSets](#stacksets-concepts-stackset)
+ [StackSets 的許可模型](#stacksets-concepts-stackset-permission-models)
+ [堆疊執行個體](#stacksets-concepts-stackinstances)
+ [StackSet 操作](#stacksets-concepts-ops)
+ [StackSet 操作選項](#stackset-ops-options)
+ [Tags (標籤)](#stackset-concepts-tags)
+ [StackSets 狀態碼](#stackset-status-codes)
+ [堆疊執行個體狀態碼](#stack-instance-status-codes)

## 管理員和目標帳戶
<a name="stacksets-concepts-accts"></a>

*管理員帳戶*是您 AWS 帳戶 建立 StackSets 的 。對於具有服務受管許可的 StackSets，管理員帳戶是組織的 管理帳戶 或委派管理員帳戶。您可以登入建立 StackSet 的 AWS 管理員帳戶來管理 StackSet。

「目標帳戶」**是您建立、更新或刪除 StackSet 中一或多個堆疊的帳戶。先要設定管理員和目標帳戶之間的信任關係，才可以使用 StackSet 在目標帳戶中建立堆疊。

## CloudFormation StackSets
<a name="stacksets-concepts-stackset"></a>

*StackSet* 可做為跨指定 AWS 帳戶 和 區域部署之多個堆疊的容器。每個堆疊都基於相同的 CloudFormation 範本，但您可以使用參數自訂個別堆疊。

定義 StackSet 之後，您可以在目標帳戶中建立、更新或刪除堆疊 AWS 區域 並指定堆疊。當您建立、更新或刪除堆疊時，您也可以指定操作偏好設定。例如，包括您要執行操作的區域順序、堆疊操作停止前的失敗容錯閾值，以及同時執行堆疊操作的帳戶數目。

StackSet 是區域性資源。如果您在其中建立 StackSet AWS 區域，您只能在檢視該區域時查看或變更它。

## StackSets 的許可模型
<a name="stacksets-concepts-stackset-permission-models"></a>

您可以使用*自我管理*許可或*服務受管*許可來建立 StackSets。

透過*自我管理*許可，您可以建立跨帳戶和區域部署時 StackSets 所需的 IAM 角色。需要這些角色，才能在您用來管理 StackSet 的帳戶與堆疊執行個體部署目的地帳戶之間建立信任關係。使用此許可模型，StackSets 可以部署到 AWS 帳戶 您擁有建立 IAM 角色許可的任何 。

透過*服務受管*許可，您可以將堆疊執行個體部署到 AWS Organizations所管理的帳戶。使用此許可模型時，您不必建立需要的 IAM 角色；StackSets 會代表您建立 IAM 角色。使用此模型時，您也可以自動部署到未來您新增至組織的帳戶。

AWS Organizations 與 CloudFormation 整合，可協助您在擴展和擴展 AWS 資源時集中管理和控管您的環境。
+ 管理帳戶 – 您用於建立組織的帳戶。如需詳細資訊，請參閱 [AWS Organizations的術語與概念](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)。
+ 委派管理員 – 相容 AWS 服務可以將組織中的成員帳戶註冊 AWS 為該服務中組織帳戶的管理員。如需詳細資訊，請參閱[AWS 可與 搭配使用的 服務 AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html)。

如需使用服務受管許可建立和管理 StackSets 的詳細資訊，請參閱下列主題：
+ [使用 啟用 StackSets 的受信任存取 AWS Organizations](stacksets-orgs-activate-trusted-access.md)
+ [註冊委派管理員會員帳戶](stacksets-orgs-delegated-admin.md)
+ [具有服務受管許可的 Create CloudFormation StackSets](stacksets-orgs-associate-stackset-with-org.md)

## 堆疊執行個體
<a name="stacksets-concepts-stackinstances"></a>

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

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

![\[StackSet 可以跨多個帳戶和區域建立、更新或刪除堆疊執行個體和堆疊。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/stack_sets_operations_stacks_sv.png)


## StackSet 操作
<a name="stacksets-concepts-ops"></a>

您可以對 StackSets 執行下列操作。

建立 StackSet  
建立新的 StackSet 包括指定您要用來建立堆疊的 CloudFormation 範本、指定您要在其中建立堆疊的目標帳戶，以及識別您要在目標帳戶中部署堆疊 AWS 區域 的 。StackSet 可確保在您選擇區域內的所有指定目標帳戶，相同的堆疊資源皆有一致的部署及相同的設定。

更新 StackSet  
當您更新 StackSet 時，是將變更推送到 StackSet 中的堆疊。您可使用下列其中一種方法來更新 StackSet。您的範本更新一律影響所有堆疊；您無法選擇性更新 StackSet 中某些堆疊的範本，讓其他範本不受影響。  
+ 變更範本中的現有設定或新增新的資源，例如更新特定服務的參數設定，或者新增新的 Amazon EC2 執行個體。
+ 使用不同的範本來取代範本。
+ 跨現有或其他的區域，在現有或其他目標帳戶中新增堆疊。

刪除堆疊  
當您刪除堆疊時，是從您指定區域內的指定目標帳戶，移除堆疊及其所有相關聯的資源。您可採用下列方式來刪除堆疊。  
+ 從某些目標帳戶刪除堆疊，同時讓其他目標帳戶中的其他堆疊繼續執行。
+ 從某些區域刪除堆疊，同時讓其他區域中的堆疊繼續執行。
+ 從您的 StackSet 刪除堆疊，但選擇**保留堆疊**選項，將其儲存，以繼續獨立執行您的 StackSet。隨後您可在 CloudFormation 中、StackSet 外，管理保留的堆疊。
+ 刪除您 StackSet 中所有堆疊，準備刪除您的整個 StackSet。

刪除 StackSet  
只有當 StackSet 中沒有任何堆疊執行個體時才可以刪除它。

## StackSet 操作選項
<a name="stackset-ops-options"></a>

本節所述的這些選項，有助於控制為成功執行 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 的並行模式](concurrency-mode.md)。

容錯能力  
可用於建立、更新和刪除工作流程的此項設定，能讓您指定每區域可發生之堆疊操作故障的數目或百分比上限，超過此值，CloudFormation 就會自動停止操作。較低的數目或百分比表示此操作在較少的堆疊上執行，但您能夠更快開始對失敗的操作進行疑難排解。例如，如果您要更新三個區域內 10 個目標帳戶中的 10 個堆疊，將**容錯能力**設定為 **20** 和**依百分比**，表示操作若要繼續，一個區域最多只能有兩個堆疊更新失敗。如果同一區域中發生第三個堆疊失敗，CloudFormation 就會停止操作。如果第一個區域中的堆疊無法更新，則該區域會繼續更新操作，然後移至下一個區域。如果第二個區域有兩個堆疊無法更新，即達到 20% 的容錯能力；如果該區域發生第三個堆疊更新失敗，CloudFormation 就會停止更新操作，不會推進到後續的區域。  
當您選擇 **By percentage (依百分比)** 時，如果指定的百分比不能代表各個區域內您的堆疊整數，CloudFormation 會無條件捨去。例如，如果您要將堆疊部署到三個區域中的 10 個目標帳戶，而且您將**容錯能力**值設定為 **25** 和**依百分比**，CloudFormation 會將 2.5 個堆疊的容錯能力 (這不可能) 無條件捨去到每區域兩個堆疊的容錯能力。

保留堆疊  
可用於刪除堆疊工作流程的此項設定，讓堆疊及其資源即使從 StackSet 移除後，仍能繼續執行。當您保留堆疊時， CloudFormation 會將堆疊留存在個別帳戶和區域中，保持不變。堆疊與 StackSet 會取消關聯，但堆疊及其資源仍儲存。完成刪除堆疊操作後，您可以在建立堆疊的目標帳戶 (非管理員帳戶) 中使用 CloudFormation 管理保留的堆疊。

區域並行  
可用於建立、更新和刪除工作流程的此項設定，能讓您選擇如何將 StackSets 部署到區域內。  
*循序* – 只要一個區域的部署故障不超過指定的容錯能力，就可以依區域**部署順序**方塊中指定的，一次在一個區域中部署 StackSets 操作。順序部署是預設選項。  
*平行* – 只要一個區域的部署故障不超過指定的容錯能力，就可以平行在所有指定區域同步部署 StackSets 操作。

## Tags (標籤)
<a name="stackset-concepts-tags"></a>

您可以在 StackSet 的建立和更新操作期間，透過指定金鑰值對來新增標籤。標籤有助於排序和篩選 StackSet 資源，處理帳單和成本分配。如需如何在 中使用標籤的詳細資訊 AWS，請參閱*AWS 帳單與成本管理 《 使用者指南*》中的[使用成本分配標籤組織和追蹤 AWS 成本](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。在您指定索引鍵/值組之後，請選擇 **\$1** 以儲存標籤。您可以選擇標籤右邊的紅色 **X** 來刪除您不再適用的標籤。

您套用至 StackSets 的標籤會套用至所有堆疊及您堆疊建立的資源。您還可以在 CloudFormation 中在僅限堆疊的層級新增標籤，但這些標籤可能不會出現在 StackSets 中。

雖然 StackSets 不會新增任何系統定義的標籤，但任何標籤的金鑰名稱都不應該以字串 `aws:` 開頭。

## StackSets 狀態碼
<a name="stackset-status-codes"></a>

CloudFormation StackSets 會產生 StackSet 操作的狀態碼。

下表說明 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`  
應使用者請求，已停止操作。

## 堆疊執行個體狀態碼
<a name="stack-instance-status-codes"></a>

CloudFormation StackSets 會產生堆疊執行個體的狀態碼。

下表說明 StackSets 內堆疊執行個體的狀態碼。

`CURRENT`  
StackSet 的堆疊現為最新。

`OUTDATED`  
因為下列其中一個原因，StackSet 的堆疊不是最新。  
+ 相關聯堆疊上的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html) 或 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) 操作失敗。
+ 屬於 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html) 或 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) 操作的堆疊，在堆疊建立或更新前即已失敗或停止。

`INOPERABLE`  
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html) 操作失敗，且堆疊的狀態不穩定。後續的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) 操作會排除此狀態的堆疊。您可能需要將 `RetainStacks` 設定為 `true` 來執行 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html) 操作，以刪除堆疊執行個體，然後手動刪除堆疊。

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

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

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

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

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

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

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

# 使用 CloudFormation StackSets 的先決條件
<a name="stacksets-prereqs"></a>

StackSets 擴充了堆疊功能，讓您可以跨多個帳戶和區域使用單次操作建立、更新或刪除堆疊。

由於 StackSets 跨多個帳戶執行堆疊操作，您需要有 AWS 帳戶中定義的必要許可，才能建立您的第一個 StackSet。

您可以使用*自我管理*或*服務受管*許可來管理 StackSets。
+ 對於*自我管理的* StackSets，必須在每個目標帳戶與 AWS 區域中建立並管理 IAM 角色。如需詳細資訊，請參閱[授與自我管理許可](stacksets-prereqs-self-managed.md)。
+ 對於*服務管理的* StackSets，您不需要在每個帳戶中手動建立和管理 IAM 角色；為您 AWS 處理角色建立和許可。如需詳細資訊，請參閱[啟用受信任存取](stacksets-orgs-activate-trusted-access.md)。

**Topics**
+ [準備在預設停用 AWS 區域 的 中執行 StackSet 操作](stacksets-opt-in-regions.md)
+ [授與自我管理許可](stacksets-prereqs-self-managed.md)
+ [使用 啟用 StackSets 的受信任存取 AWS Organizations](stacksets-orgs-activate-trusted-access.md)

# 準備在預設停用 AWS 區域 的 中執行 StackSet 操作
<a name="stacksets-opt-in-regions"></a>

AWS 區域 亞太區域 （香港） 等 2019 年 3 月 20 日之後推出的 預設為停用。您必須為您的帳戶啟用這些區域，才能加以使用。如需詳細資訊，請參閱《AWS 帳戶管理 參考指南》**中的[在帳戶中啟用或停用 AWS 區域](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)。

若要從 StackSet 的管理員帳戶 (如果使用自我管理許可) 或組織的管理帳戶 (如果使用服務受管的許可) 建立 StackSet，則必須先針對管理員或管理帳戶啟用該區域。

若要 CloudFormation 讓 成功建立或更新堆疊執行個體：
+ 目標帳戶必須位於目前已針對該目標帳戶啟用的區域中。
+ StackSet 的管理員帳戶或組織的管理帳戶必須啟用與目標帳戶相同的區域。

**重要**  
請注意，在 StackSet 操作期間，管理員和目標帳戶會交換與帳戶本身相關的中繼資料，以及所涉及的 StackSet 和 StackSet 執行個體。  
此外，如果您停用包含 StackSet 執行個體所在帳戶的區域，您必須視需要負責刪除任何此類執行個體或資源。此外，請注意，關於停用區域中目標帳戶的中繼資料將會保留在管理員帳戶中。

# 授與自我管理許可
<a name="stacksets-prereqs-self-managed"></a>

本主題說明如何建立 StackSets 所需的 IAM 服務角色，以跨帳戶部署，並 AWS 區域 具有*自我管理*許可。需要這些角色，才能在您用來管理 StackSet 的帳戶與堆疊執行個體部署目的地帳戶之間建立信任關係。使用此許可模型，StackSets 可以部署到 AWS 帳戶 您擁有建立 IAM 角色許可的任何 。

若要使用*服務受管*許可，請改為參閱 [啟用受信任存取](stacksets-orgs-activate-trusted-access.md)。

**Topics**
+ [自我管理許可概觀](#prereqs-self-managed-permissions)
+ [為管理員帳戶的所有使用者提供可以在所有目標帳戶中管理堆疊的許可](#stacksets-prereqs-accountsetup)
+ [設定 StackSet 操作的進階許可](#stacksets-prereqs-advanced-perms)
+ [設定全域索引鍵以減輕混淆代理人問題](#confused-deputy-mitigation)

## 自我管理許可概觀
<a name="prereqs-self-managed-permissions"></a>

建立具有自我管理許可的 StackSet 之前，必須在每個帳戶中建立 IAM 服務角色。

基本步驟為：

1. 決定哪個 AWS 帳戶 是*管理員帳戶*。

   StackSets 是在此管理員帳戶中建立。您在*目標帳戶*中建立屬於 StackSet 的個別堆疊。

1. 決定您要如何建構 StackSet 的許可。

   最簡單 (也是最寬鬆) 的許可組態，是賦予管理員帳戶中*所有*使用者和群組建立和更新由該帳戶管理之*所有* StackSets 的能力。如果您需要更精確的控制，可以設定許可來指定：
   + 哪些使用者和群組可以在哪些目標帳戶中執行 StackSet 操作。
   + 哪些資源使用者和群組可以包含在他們的 StackSets 中。
   + 哪些特定 StackSet 操作的使用者和群組可以執行。

1. 在您的管理員和目標帳戶中建立必要的 IAM 服務角色以定義您要的許可。

   具體而言，這兩個必要角色為：
   + **AWSCloudFormationStackSetAdministrationRole** – 此角色已部署至管理員帳戶。
   + **AWSCloudFormationStackSetExecutionRole** – 此角色已部署至您建立堆疊執行個體的所有帳戶。

## 為管理員帳戶的所有使用者提供可以在所有目標帳戶中管理堆疊的許可
<a name="stacksets-prereqs-accountsetup"></a>

本節展示如何為管理員帳戶的所有使用者和群組設定可在所有目標帳戶中執行 StackSet 操作的許可。它會引導您在管理員和目標帳戶中建立所需 IAM 服務角色。管理員帳戶中的任何人則可以在任何目標帳戶中建立、更新或刪除任何堆疊。

若以此方式建構許可，使用者在建立或更新 StackSet 時，將不會傳遞管理員角色。

![\[然後，管理員帳戶中的任何使用者均可在設定信任關係後，在目標帳戶中建立任何 StackSet。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/stacksets_perms_master_target.png)


------
#### [ Administrator account ]

在管理員帳戶中，建立名為 **AWSCloudFormationStackSetAdministrationRole** 的 IAM 角色。

您可以從 CloudFormation 範本建立堆疊以執行此作業，此範本位於 [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetAdministrationRole.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetAdministrationRole.yml)。

**Example 範例許可政策**  
上述範本建立的管理角色包含了下列許可政策。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole"
      ],
      "Effect": "Allow"
    }
  ]
}
```

**Example 範例信任政策 1**  
上述範本也包含了下列信任政策，授予使用管理角色的服務許可，以及連接至角色的許可。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**Example 範例信任政策 2**  
若要將堆疊執行個體部署到位於預設為停用之區域的目標帳戶中，您也必須包含該區域的區域服務主體。每個預設停用的區域都會有自己的區域服務主體。  
下列範例信任政策授予服務許可，以使用亞太區域 (香港) 區域 (`ap-east-1`) 中的管理角色，該區域預設為停用。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
            "cloudformation.amazonaws.com",
            "cloudformation.ap-east-1.amazonaws.com"
         ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```
如需詳細資訊，請參閱[準備在預設停用 AWS 區域 的 中執行 StackSet 操作](stacksets-opt-in-regions.md)。如需區域代碼清單，請參閱《*AWS 一般參考 指南*》中的[區域端點](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)。

------
#### [ Target accounts ]

在每個目標帳戶中，建立信任管理員帳戶且名為 **AWSCloudFormationStackSetExecutionRole** 的服務角色。此角色必須具有此確切名稱。您可以從下列 CloudFormation 範本建立堆疊以執行此作業，此範本位於 [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetExecutionRole.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AWSCloudFormationStackSetExecutionRole.yml)。當您使用此範本時，系統會提示您提供管理員帳戶的帳戶 ID，而且您的目標帳戶必須擁有與此管理員帳戶的信任關係。

**重要**  
請注意，此範本會授予管理員存取。在您使用此範本建立目標帳戶執行角色之後，您必須在政策陳述式中，將許可的範圍限制在您使用 StackSets 所建立的資源類型。

目標帳戶服務角色需要許可，以執行您 CloudFormation 範本中指定的任何操作。例如，如果您的範本是建立 S3 儲存貯體，則您需要為 S3 建立新物件的許可。您的目標帳戶一律需要完整的 CloudFormation 許可，包括用於建立、更新、刪除及描述堆疊的許可。

**Example 範例許可政策 1**  
此範本建立的角色可在目標帳戶中啟用以下政策。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}
```

**Example 範例許可政策 2**  
以下範例顯示的政策陳述式提供 StackSets 運作時所需的*最低*許可。若要在目標帳戶中建立使用 CloudFormation 以外服務資源的堆疊，您必須將這些服務動作和資源新增至每個目標帳戶的 **AWSCloudFormationStackSetExecutionRole** 政策陳述式。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "cloudformation:*"
      ],
      "Resource": "*"
    }
  ]
}
```

**Example 範例信任政策**  
以下信任關係是由範本所建立的。管理員帳戶的 ID 會顯示為 * admin\$1account\$1id*。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```
您可以設定現有目標帳戶執行角色的信任關係，以信任管理員帳戶中的特定角色。如果您刪除管理員帳戶中的該角色，並建立一個新角色來取代它，您必須設定您的目標帳戶與新管理員帳戶角色 (在前述範例中以 *admin\$1account\$1id* 表示) 的信任關係。

------

## 設定 StackSet 操作的進階許可
<a name="stacksets-prereqs-advanced-perms"></a>

如果您需要對使用者和群組透過單一系統管理員帳戶建立的 StackSets 進行更精細的控制，您可以使用 IAM 角色來指定：
+ 哪些使用者和群組可以在哪些目標帳戶中執行 StackSet 操作。
+ 哪些資源使用者和群組可以包含在他們的 StackSets 中。
+ 哪些特定 StackSet 操作的使用者和群組可以執行。

### 控制哪些使用者可在特定目標帳戶中執行 StackSet 操作
<a name="stacksets-prereqs-multiadmin"></a>

使用自訂的管理員角色，以控制哪些使用者和群組可執行哪些目標帳戶中的 StackSet 操作。您可能會想要控制管理員帳戶的哪些使用者可執行哪些目標帳戶中的 StackSet 操作。若要這樣做，您要在每個目標帳戶與特定自訂的管理角色之間建立信任關係，而非在管理員帳戶本身建立 **AWSCloudFormationStackSetAdministrationRole** 服務角色。然後，您讓特定使用者和群組在執行特定目標帳戶中的 StackSet 操作時，使用適當的自訂管理角色。

例如，您可以在管理員帳戶中建立角色 A 和角色 B。您可以提供角色 A 透過帳戶 8 以存取目標帳戶 1 的許可。您可以提供角色 B 透過帳戶 16 以存取目標帳戶 9 的許可。

![\[讓使用者能建立 StackSet 的自訂管理員角色與目標帳戶之間的信任關係。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/stacksets_perms_admin_target.png)


設定與定義自訂管理員角色相關的必要許可，為目標帳戶建立服務角色，並授予使用者許可，以便在執行 StackSet 操作時傳遞自訂管理員的角色。

一般而言，一旦有了必要的許可，其運作方式為：在建立 StackSet 時，使用者必須指定自訂管理角色。使用者必須具有將該角色傳遞至 CloudFormation 的許可。此外，自訂管理員角色必須擁有與為 StackSet 指定之目標帳戶的信任關係。CloudFormation 建立 StackSet，並建立其與自訂管理員角色的關聯。更新 StackSet 時，使用者必須明確指定自訂管理員角色，即使先前對此 StackSet 使用相同的自訂管理角色也是一樣。CloudFormation 將依據上述要求，使用該角色來更新堆疊。

------
#### [ Administrator account ]

**Example 範例許可政策**  
對於每個 StackSet，建立自訂管理角色以及擔任目標帳戶中執行角色的許可。  
每個目標帳戶中目標帳戶執行角色的名稱必須相同。若角色名稱為 **AWSCloudFormationStackSetExecutionRole**，則 StackSets 會在建立 StackSet 時自動使用該名稱。若您指定自訂角色名稱，使用者在建立 StackSet 時必須提供執行角色名稱。  
使用下列許可政策，以自訂名稱建立 [IAM 服務角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。下列範例中，*Custom\$1execution\$1role* 是指目標帳戶中的執行角色。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/custom_execution_role"
            ],
            "Effect": "Allow"
        }
    ]
}
```
若要在單一陳述式中指定多個帳戶，請用逗號分隔。  

```
"Resource": [
  "arn:aws:iam::target_account_id_1:role/custom_execution_role", 
  "arn:aws:iam::target_account_id_2:role/custom_execution_role"
]
```
您可使用萬用字元 (\$1) 而不是帳戶 ID 來指定所有目標帳戶。  

```
"Resource": [
  "arn:aws:iam::*:role/custom_execution_role"
]
```

**Example 範例信任政策 1**  
您必須為服務角色提供信任政策，以定義哪些 IAM 主體可擔任該角色。    
****  

```
{ 
  "Version":"2012-10-17",		 	 	  
  "Statement": [ 
    { 
      "Effect": "Allow", 
      "Principal": { 
        "Service": "cloudformation.amazonaws.com" 
      }, 
      "Action": "sts:AssumeRole" 
    } 
  ] 
}
```

**Example 範例信任政策 2**  
若要將堆疊執行個體部署到位於預設為停用之區域的目標帳戶中，您也必須包含該區域的區域服務主體。每個預設停用的區域都會有自己的區域服務主體。  
下列範例信任政策授予服務許可，以使用亞太區域 (香港) 區域 (`ap-east-1`) 中的管理角色，該區域預設為停用。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
            "cloudformation.amazonaws.com",
            "cloudformation.ap-east-1.amazonaws.com"
         ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```
如需詳細資訊，請參閱[準備在預設停用 AWS 區域 的 中執行 StackSet 操作](stacksets-opt-in-regions.md)。如需區域代碼清單，請參閱《*AWS 一般參考指南*》中的[區域端點](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)。

**Example 傳遞角色政策範例**  
您也需要為您的 IAM 使用者制定 IAM 許可政策，以允許使用者在執行 StackSet 操作時傳遞自訂管理角色。如需詳細資訊，請參閱[授予使用者將角色傳遞至 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。  
在以下範例中，*customized\$1admin\$1role* 是指使用者必須傳遞的管理員角色。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:GetRole",
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::*:role/customized_admin_role"
    }
  ]
}
```

------
#### [ Target accounts ]

在每個目標帳戶中，建立信任您要在此帳戶使用之自訂管理角色的服務角色。

目標帳戶服務角色需要許可，以執行您 CloudFormation 範本中指定的任何操作。例如，如果您的範本是建立 S3 儲存貯體，則您需要在 S3 中建立新物件的許可。您的目標帳戶一律需要完整的 CloudFormation 許可，包括用於建立、更新、刪除及描述堆疊的許可。

每個目標帳戶中目標帳戶角色的名稱必須相同。若角色名稱為 **AWSCloudFormationStackSetExecutionRole**，則 StackSets 會在建立 StackSet 時自動使用該名稱。若您指定自訂角色名稱，使用者在建立 StackSet 時必須提供執行角色名稱。

**Example 範例許可政策**  
以下範例顯示的政策陳述式提供 StackSets 運作時所需的*最低*許可。若要在目標帳戶中建立使用 CloudFormation 以外服務資源的堆疊，您必須將這些服務動作和資源新增至許可政策。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:*"
      ],
      "Resource": "*"
    }
  ]
}
```

**Example 範例信任政策**  
當您建立角色以定義信任關係時，必須提供以下信任政策。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/customized_admin_role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

### 控制使用者可以在特定 StackSets 中包含的資源
<a name="stacksets-prereqs-executionrole"></a>

使用自訂的執行角色來控制哪些資源堆疊使用者和群組可以包含在其 StackSets 中。例如，您可能想要設定一個群組，只包含他們建立的 StackSets 中與 Amazon S3 相關的資源，而另一個團隊只要包含 DynamoDB 資源。若要這樣做，您要在每個群組的自訂管理員角色與每個資源集的自訂執行角色之間建立信任關係。自訂的執行角色定義了 StackSets 中可以包含哪些堆疊資源。自訂的管理員的角色位於管理員帳戶中，而自訂的執行角色位於每個目標帳戶中 (您要在目標帳戶中使用定義的資源建立 StackSets)。然後，您啟用特定使用者和群組，以便在執行 StackSets 操作時使用適當的自訂管理角色。

例如，您可以在管理員帳戶中建立自訂的管理員角色 A、B、C。具有角色 A 使用許可的使用者和群組，可以建立包含自訂執行角色 X 中具體列出的堆疊資源的 StackSets，但不包含角色 Y 或 Z 的堆疊資源或任何執行角色不包含的資源。

![\[讓使用者能建立 StackSet 的自訂管理員角色與目標帳戶中自訂執行角色之間的信任關係。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/stacksets_perms_admin_execution.png)


更新 StackSet 時，使用者必須明確指定自訂管理員角色，即使先前對此 StackSet 使用相同的自訂管理角色也是一樣。CloudFormation 會使用指定的自訂管理員角色來執行更新，只要使用者具有在該 StackSet 上執行操作的許可。

同樣地，使用者也可以指定自訂的執行角色。如果指定自訂執行角色，CloudFormation 將依據上述要求，使用該角色更新堆疊。如果使用者未指定自訂執行角色，CloudFormation 將使用之前與 StackSet 關聯之自訂執行角色執行更新，只要該使用者擁有在該 StackSet 上執行操作的許可。

------
#### [ Administrator account ]

在您的管理員帳戶中建立自訂的管理角色，如 [控制哪些使用者可在特定目標帳戶中執行 StackSet 操作](#stacksets-prereqs-multiadmin) 中所述。加入您要使用的自訂管理角色與自訂執行角色之間的信任關係。

**Example 範例許可政策**  
以下範例會是許可政策，用於您為目標帳戶定義的 **AWSCloudFormationStackSetExecutionRole** 以及自訂的執行角色。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
   "Statement": [
    {
      "Sid": "Stmt1487980684000",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole" 
      ],
      "Resource": [ 
        "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole",
        "arn:aws:iam::*:role/custom_execution_role" 
      ]
    } 
  ]
}
```

------
#### [ Target accounts ]

在您要建立 StackSets 的目標帳戶中，建立自訂執行角色，用來將許可授予您想讓使用者和群組可以包含在 StackSets 中的服務和資源。

**Example 範例許可政策**  
以下範例提供最低許可給 StackSets，以及建立 Amazon DynamoDB 資料表的許可。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "dynamoDb:createTable"
      ],
      "Resource": "*"
    }
  ]
}
```

**Example 範例信任政策**  
當您建立角色以定義信任關係時，必須提供以下信任政策。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/customized_admin_role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

### 設定特定 StackSet 操作的許可
<a name="stacksets-prereqs-iam-actions"></a>

此外，您可以設定許可來控制哪些使用者和群組可以執行特定 StackSets 操作，例如建立、更新或刪除 StackSets 或堆疊執行個體。如需詳細資訊，請參閱*服務授權參考*中的 [CloudFormation 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)。

## 設定全域索引鍵以減輕混淆代理人問題
<a name="confused-deputy-mitigation"></a>

混淆代理人問題屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。為了防止這種情況， AWS 提供工具，協助您保護所有 服務的資料，讓 服務主體能夠存取您帳戶中的資源。

我們建議在資源政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件內容索引鍵，以限制 CloudFormation StackSets 為資源提供其他服務的許可。如果同時使用全域條件內容金鑰，則在相同政策陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的帳戶時，必須使用相同的帳戶 ID。

防範混淆代理人問題最有效的方法，是使用 `aws:SourceArn` 全域條件內容金鑰，以及資源的完整 ARN。如果不知道資源的完整 ARN，或者如果您指定了多個資源，請使用 `aws:SourceArn` 全域條件內容金鑰，同時使用萬用字元 (`*`) 表示 ARN 的未知部分。例如 `arn:aws:cloudformation::123456789012:*`。盡可能使用 `aws:SourceArn`，這更為具體。僅當您無法判斷正確的 ARN 或 ARN 模式時才使用 `aws:SourceAccount`。

當 StackSets 在您的**管理員**帳戶中擔任**管理**角色時，StackSets 會填入您的**管理員**帳戶 ID 和 StackSets Amazon Resource Name (ARN)。因此，您可以定義信任關係中的[全域索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) `aws:SourceAccount` 和 `aws:SourceArn`，以防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。下列範例示範如何使用 StackSets 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件內容索引鍵，以預防混淆代理人問題。

------
#### [ Administrator account ]

**Example `aws:SourceAccount` 和 `aws:SourceArn` 全域索引鍵**  
當使用 StackSets 時，在您的 **AWSCloudFormationStackSetAdministrationRole** 信任政策中定義 `aws:SourceAccount` 和 `aws:SourceArn` 全域索引鍵，以防止混淆代理人問題。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:*:111122223333:stackset/*"
        }
      }
    }
  ]
}
```

**Example StackSets ARN**  
指定關聯的 StackSets ARN 以進行更精細的控制。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudformation.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": [
                        "arn:aws:cloudformation:STACKSETS-REGION:111122223333:stackset/STACK-SET-ID-1",
                        "arn:aws:cloudformation:STACKSETS-REGION:111122223333:stackset/STACK-SET-ID-2"
                    ]
                }
            }
        }
    ]
}
```

------

# 使用 啟用 StackSets 的受信任存取 AWS Organizations
<a name="stacksets-orgs-activate-trusted-access"></a>

本主題提供如何使用 啟用受信任存取的指示 AWS Organizations，這是 StackSets 跨帳戶部署及使用 AWS 區域 *服務受管*許可所必需。要使用*自我管理*許可，請改為參閱 [授與自我管理許可](stacksets-prereqs-self-managed.md)。

建立具有服務受管許可的 StackSet 之前，您必須先完成下列任務：
+ [啟用 中的所有功能](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) AWS Organizations。如果只啟用合併帳單功能，則無法建立具有服務受管許可的 StackSet。
+ 使用 啟用受信任存取 AWS Organizations。透過此動作，可讓 CloudFormation 在管理帳戶中建立服務連結角色。啟用受信任存取後，當您建立具有服務受管許可的 StackSet 時，CloudFormation 會在目標 (會員) 帳戶中建立必要的服務連結角色和名為 `stacksets-exec-*` 的服務角色。

  啟用受信任存取後，管理帳戶和委派管理員帳戶可以為其組織建立和管理服務受管的 StackSets。

要啟用受信任存取，您必須是管理帳戶中的管理員使用者。*管理員使用者*是對您的 AWS 帳戶具有完整許可的使用者。如需詳細資訊，請參閱《AWS 帳戶管理 參考指南》**中的[建立管理員使用者](https://docs.aws.amazon.com/accounts/latest/reference/getting-started-step4.html)。如需保護管理帳戶安全的建議，請參閱《AWS Organizations 使用者指南**》中的[管理帳戶的最佳實務](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html)。

**啟用受信任存取**

1. 以管理帳戶的管理員 AWS 身分登入 ，並在 開啟 CloudFormation 主控台[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation)。

1. 從導覽窗格選擇 **StackSets**。如果停用受信任存取，則會顯示橫幅來提示您啟用受信任存取。  
![\[啟用受信任存取橫幅。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/console-stacksets-enable-trusted-access-from-stacksets-list-new.png)

1. 選擇**啟用受信任存取**。

   出現下列橫幅時，表示已成功啟用受信任存取。  
![\[已成功啟用受信任存取橫幅。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/console-stackset-trusted-access-enabled-banner-new.png)
**注意**  
「啟動 Organizations 存取」與「啟用 Organizations 存取」相同，「停用 Organizations 存取」與「禁用 Organizations 存取」相同。這些條款已根據行銷指導方針更新。

**停用受信任存取**  
請參閱《*AWS Organizations 使用者指南*》中的 [CloudFormation StackSets 和 AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-cloudformation.html)。

您必須先取消註冊所有委派管理員 AWS Organizations，才能使用 停用受信任的存取。如需詳細資訊，請參閱[註冊委派管理員](stacksets-orgs-delegated-admin.md)。

**注意**  
如需有關使用 API 操作而非主控台來啟用或停用受信任存取的資訊，請參閱：  
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateOrganizationsAccess.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateOrganizationsAccess.html)
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeactivateOrganizationsAccess.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeactivateOrganizationsAccess.html)
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeOrganizationsAccess.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeOrganizationsAccess.html)

## 服務連結角色
<a name="stacksets-orgs-service-linked-roles"></a>

管理帳戶使用 **AWSServiceRoleForCloudFormationStackSetsOrgAdmin** 服務連結角色。只有在停用 AWS Organizations 的受信任存取時，才能修改或刪除此角色。

每個目標帳戶會使用 **AWSServiceRoleForCloudFormationStackSetsOrgMember** 服務連結角色。您只能在兩個條件下修改或刪除此角色：如果 AWS Organizations 已停用 的受信任存取，或者如果帳戶已從目標組織或組織單位 (OU) 中移除。

如需詳細資訊，請參閱 *AWS Organizations 使用者指南*中的 [CloudFormation StackSets 和 AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-cloudformation.html)。

# 註冊委派管理員會員帳戶
<a name="stacksets-orgs-delegated-admin"></a>

除了組織的管理帳戶外，具有委派管理員許可的會員帳戶還可以建立和管理具有組織服務受管許可的 StackSets。具有服務受管許可的 StackSets 會建立在管理帳戶中，包括由委派管理員建立的 StackSets。若要註冊為組織的委派管理員，您的成員帳戶必須在組織中。如需加入組織的詳細資訊，請參閱[邀請 AWS 帳戶 加入您的組織](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_invites.html)。

您的組織一次最多可以有五個註冊的委派管理員。委派管理員可以選擇部署至組織或特定 OU 中的所有帳戶。 AWS Organizations 必須先啟用 的受信任存取，委派管理員才能部署到 Organizations 管理的帳戶。如需詳細資訊，請參閱[使用 啟用 StackSets 的受信任存取 AWS Organizations](stacksets-orgs-activate-trusted-access.md)。

**重要**  
請注意以下事項：  
委派管理員具有部署至組織中帳戶的完整許可。管理帳戶無法限制部署至特定 OU 或執行特定 StackSet 操作的委派管理員許可。
請確定您的委派管理員具有 `organizations:ListDelegatedAdministrators` 許可以避免任何潛在錯誤。

您可以在下列區域中為您的組織註冊委派管理員：美國東部 （俄亥俄）、美國東部 （維吉尼亞北部）、美國西部 （加利佛尼亞北部）、美國西部 （奧勒岡）、亞太區域 （孟買）、亞太區域 （首爾）、亞太區域 （新加坡）、亞太區域 （雪梨）、亞太區域 （東京）、加拿大 （中部）、歐洲 （法蘭克福）、歐洲 （愛爾蘭）、歐洲 （倫敦）、歐洲 （巴黎）、歐洲 （斯德哥爾摩）、以色列 （特拉維夫）、南美洲 （聖保羅）、 AWS GovCloud （美國東部） 和 AWS GovCloud （美國西部）。

您可以使用 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)、[AWS CLI](https://aws.amazon.com/cli/) 或 [AWS 開發套件](https://aws.amazon.com/developer/tools/)註冊和取消註冊委派管理員。

## 註冊委派管理員 (主控台)
<a name="stacksets-orgs-register-delegated-admin-console"></a>

1. 以管理帳戶的管理員 AWS 身分登入 ，並在 開啟 CloudFormation 主控台[https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/)。

1. 從導覽窗格選擇 **StackSets**。

1. 在 **Delegated administrators** (委派管理員) 下，選擇 **Register delegated administrator** (註冊委派管理員)。

1. 在 **Register delegated administrator** (註冊委派管理員) 對話方塊中，選擇 **Register delegated administrator** (註冊委派管理員)。

   成功訊息表示成員帳戶已成功註冊為委派管理員。

## 取消註冊委派管理員 (主控台)
<a name="stacksets-orgs-deregister-delegated-admin-console"></a>

1. 以管理帳戶的管理員 AWS 身分登入 ，並在 開啟 CloudFormation 主控台[https://console.aws.amazon.com/](https://console.aws.amazon.com/)。

1. 從導覽窗格選擇 **StackSets**。

1. 在 **Delegated administrators** (委派管理員) 下，選取您要取消註冊的帳戶，然後選擇 **Deregister** (取消註冊)。

   成功訊息表示成員帳戶已成功取消註冊為委派系統管理員。

   您可以隨時重新註冊此帳戶。

## 註冊委派管理員 (AWS CLI)
<a name="stacksets-orgs-register-delegated-admin-cli"></a>

1. 開啟 AWS CLI。

1. 執行 `register-delegated-administrator` 命令。

   ```
   $ aws organizations register-delegated-administrator \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com \
     --account-id="memberAccountId"
   ```

1. 執行 `list-delegated-administrators` 命令以確認指定的成員帳戶已成功註冊為委派管理員。

   ```
   $ aws organizations list-delegated-administrators \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com
   ```

## 取消註冊委派管理員 (AWS CLI)
<a name="stacksets-orgs-deregister-delegated-admin-cli"></a>

1. 開啟 AWS CLI。

1. 執行 `deregister-delegated-administrator` 命令。

   ```
   $ aws organizations deregister-delegated-administrator \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com \
     --account-id="memberAccountId"
   ```

1. 執行 `list-delegated-administrators` 命令以確認指定的成員帳戶已成功取消註冊為委派管理員。

   ```
   $ aws organizations list-delegated-administrators \
     --service-principal=member.org.stacksets.cloudformation.amazonaws.com
   ```

   您可以隨時重新註冊此帳戶。

# 使用範例範本開始使用 StackSets
<a name="stacksets-getting-started"></a>

本教學課程將協助您開始使用 StackSets AWS 管理主控台。它會引導您使用範例範本來建立 StackSet。您將了解如何跨多個區域部署堆疊、監控 StackSet 操作以及檢視結果。

在本教學課程中，您將建立 StackSet，在美國西部 （奧勒岡） 區域 (`us-west-2`) 和美國東部 （維吉尼亞北部） 區域 () AWS 帳戶 的 AWS Config 中啟用 `us-east-1`。使用 StackSets，您可透過單一操作跨多個帳戶和區域建立、更新或刪除堆疊，使其成為大規模管理基礎設施的理想解決方案。儘管本教學課程為了簡單起見而使用單一帳戶，但它有效地示範了 StackSets 的多區域功能。

範例範本位於以下 S3 儲存貯體：[https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml)。

**注意**  
StackSets 是免費的，但您需要支付使用它建立 AWS 的資源的費用，例如在本教學 AWS Config 課程中。如需詳細資訊，請參閱 [AWS Config 定價](https://aws.amazon.com/config/pricing/)。

**Topics**
+ [先決條件](#stacksets-tutorial-prerequisites)
+ [從主控台使用範例範本建立 StackSet](#stacksets-tutorial-create-stackset)
+ [監控 StackSet 建立](#stacksets-tutorial-monitor-creation)
+ [檢視 StackSet 結果](#stacksets-tutorial-view-results)
+ [更新您的 StackSet](#stacksets-tutorial-update-stackset)
+ [將堆疊新增至 StackSet](#stacksets-tutorial-add-stacks)
+ [清除](#stacksets-tutorial-clean-up)
+ [後續步驟](#stacksets-tutorial-next-steps)

## 先決條件
<a name="stacksets-tutorial-prerequisites"></a>

在開始教學課程前，請確定您已完成以下先決條件：
+ 您必須已設定自我管理許可所需的 IAM 角色。若要在單一帳戶中建立 StackSet 和部署堆疊，需要帳戶中的下列角色：
  + `AWSCloudFormationStackSetAdministrationRole`
  + `AWSCloudFormationStackSetExecutionRole`

  如需設定這些角色的詳細說明，請參閱 [授與自我管理許可](stacksets-prereqs-self-managed.md)。

## 從主控台使用範例範本建立 StackSet
<a name="stacksets-tutorial-create-stackset"></a>

**建立可啟用 的 StackSet AWS Config**

1. 開啟 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)。

1. 在畫面頂端的導覽列上，選擇您要從 AWS 區域 中管理 StackSet 的 。

   您可以選擇支援 StackSets 的任何區域。您選取的區域不會影響您可使用 StackSet 部署到哪些區域。

1. 從導覽窗格選擇 **StackSets**。

1. 從 **StackSets** 頁面上方選擇**建立 StackSet**。

1. 在**許可**下，選擇**自助服務許可**，然後選擇您在先決條件中建立的 IAM 角色。
   + 對於 IAM 管理員角色，選擇 **AWSCloudFormationStackSetAdministrationRole**。
   + 對於 IAM 執行角色名稱，選擇 **AWSCloudFormationStackSetExecutionRole**。

1. 選擇 **Prerequisite - Prepare template (事前準備 - 準備範本)** 下的 **Use a sample template (使用範例範本)**。

1. 在**選擇範例範本**下，選擇**啟用 AWS Config** 範本。然後選擇**下一步**。

   此範本會建立必要的資源，以在您的帳戶 AWS Config 中啟用 ，包括組態記錄器和交付管道。

1. 在**指定堆疊詳細資訊**頁面上，對於 **StackSet 名稱**，輸入 **my-awsconfig-stackset**。

1. 對於 **StackSet 說明**，輸入 **A StackSet that enables Config across multiple Regions**。

1. 在**參數**下， AWS Config 設定設定如下：

   1. 對於**支援所有資源類型**，請保留預設值 **true**，以記錄所有支援的資源類型。

   1. 對於**包含全域資源類型**，請保留預設值 **false**，以排除全域資源，如 IAM 角色。

   1. 將**若未支援所有資源類型，請提供資源類型清單**，保留設定為 **<All>**。

   1. 對於**包含 Config 服務連結角色資源的區域**，請以 **us-west-2** 取代 **<DeployToAnyRegion>**。

      這表示只有在堆疊部署到美國西部 (奧勒岡) 區域時，才會建立名為 `AWSServiceRoleForConfig` 的服務連結角色。您將在此程序稍後選擇部署區域。

   1. 對於**組態記錄器記錄頻率**，選擇 **DAILY** 記錄。

1. 選擇 **Next** (下一步) 繼續。

1. 在**設定 StackSet 選項**頁面中，選擇**新增標籤**並透過指定鍵和值對來新增標籤。

   1. 在 **Key** (索引鍵) 欄位，輸入 **Stage**。

   1. 針對**數值**，輸入 **Test**。

   您套用至 StackSets 的標籤將套用至您的堆疊建立的資源。

1. 對於**執行組態**，選擇**作用中**，以啟用 CloudFormation 的最佳化操作處理：
   + 非衝突操作會同時執行，以便加快部署時間。
   + 衝突操作會根據請求的順序，自動排入佇列和處理。

   在有執行中或排入佇列的操作時，CloudFormation 會將所有傳入操作排入佇列，即使這些操作沒有衝突也一樣。在此期間，您無法變更執行設定。

1. 選擇**下一步**。

1. 在**設定部署選項**頁面上，對於**將堆疊新增至 StackSet**，選擇**部署新堆疊**。

1. 針對 **Accounts (帳戶)**，選擇 **Deploy stacks in accounts (在帳戶中部署堆疊)**。

1. 在文字方塊中，輸入您的 AWS 帳戶 ID。

1. 對於**指定區域**，依此順序選取下列區域：

   1. 美國西部 (奧勒岡) 區域 (`us-west-2`)

   1. 美國東部 (維吉尼亞北部) 區域 (`us-east-1`)

   如有需要，使用美國西部 (奧勒岡) 區域旁邊的向上箭頭，將它上移成清單中的第一個項目。區域順序決定其部署順序。

1. 對於**部署選項**，設定下列設定：

   1. 對於 **Maximum concurrent accounts** (同時使用的帳戶上限)，保留 **Number** (數值) 和 **1** 的預設值。

      對於多帳戶部署，該設定表示 CloudFormation 一次只能在一個帳戶中部署堆疊。

   1. 針對 **Failure tolerance (容錯能力)**，保留預設值 **Number (數字)** 和 **0**。

      這表示在您指定的其中一個區域中，堆疊部署的最大失敗次數為零，否則 CloudFormation 會停止目前區域中的部署，並取消在剩餘區域中的部署。

   1. 針對**區域並行**，選擇**循序** (預設)。

      此設定可確保 CloudFormation 在移至下一個區域之前，先完成某個區域的部署。

   1. 對於**並行模式**，保留**嚴格容錯能力**的預設值。

      對於多帳戶部署，這能減少發生故障時的帳戶並行層級，保持在**容錯能力** \$11 內。

1. 選擇**下一步**。

1. 在 **Review (檢閱)** 頁面上，檢視您的選擇。選擇**編輯**以對相關區段進行變更。

1. 當您準備好建立 StackSet 時，請選擇**提交**。

## 監控 StackSet 建立
<a name="stacksets-tutorial-monitor-creation"></a>

選擇**提交**後，CloudFormation 會開始建立 StackSet，並將堆疊部署到您帳戶中的指定區域。StackSet 詳細資訊頁面會自動開啟，您可在其中監控操作的進度。

**監控 StackSet 建立**

1. 在 StackSet 詳細資訊頁面上，預設顯示**操作**索引標籤，顯示目前進行中的操作。

1. 操作狀態一開始應是 `RUNNING`。CloudFormation 會根據您設定的部署選項，在指定的區域中建立堆疊。

1. 要查看操作的詳細資訊，請在清單中選取操作 ID。

1. 在操作詳細資訊頁面上，您可檢視在每個區域中建立的堆疊執行個體狀態。

1. 等待操作狀態變更為 `SUCCEEDED`，這表示已成功建立 StackSet 及其所有堆疊執行個體。

## 檢視 StackSet 結果
<a name="stacksets-tutorial-view-results"></a>

StackSet 建立完成後，您可以檢視已部署的堆疊執行個體，並確認 AWS Config 已在您的帳戶中跨指定區域啟用。

**檢視 StackSet 結果**

1. 在 StackSet 詳細資訊頁面上，選擇**堆疊執行個體**索引標籤。

1. 您應會看到在帳戶中跨指定區域建立的堆疊執行個體清單。每個堆疊執行個體的狀態應為 `SUCCEEDED`，表示已成功部署。

1. 若要驗證您的帳戶是否已啟用 AWS Config ，您可以檢查每個部署區域中的 AWS Config 主控台。

## 更新您的 StackSet
<a name="stacksets-tutorial-update-stackset"></a>

建立您的 StackSet 之後，您可能想要更新它以修改參數值或新增更多區域。本節說明如何更新 AWS Config 記錄頻率參數。

**更新您的 StackSet**

1. 在 **StackSets** 頁面上，選取 **my-awsconfig-stackset**。

1. 選擇 StackSet 後，從**動作**選單選擇**編輯 StackSet 詳細資訊**。

1. 在**選擇範本**頁面上，針對**先決條件 - 準備範本**，選擇**使用目前範本**。

1. 選擇**下一步**。

1. 在**指定 StackSet 詳細資訊**頁面的**參數**下，尋找**組態記錄器記錄頻率**，並將其從 **DAILY** 變更為 **CONTINUOUS**。

1. 選擇**下一步**。

1. 在**設定 StackSet 選項**頁面上，將設定保留原樣，再選擇**下一步**。

1. 在**設定部署選項**頁面上，指定帳戶 ID 和您在建立 StackSet 時所使用的相同區域。

1. 對於**部署選項**，保留與之前相同的設定。

1. 選擇**下一步**。

1. 在**檢閱**頁面上，檢閱您的選項，然後選擇**提交**。

1. CloudFormation 開始更新您的 StackSet。您可在 StackSet 詳細資訊頁面的**操作**索引標籤上監控進度。

## 將堆疊新增至 StackSet
<a name="stacksets-tutorial-add-stacks"></a>

您可部署到其他區域，將更多堆疊新增至 StackSet。本節顯示如何將堆疊新增至新區域。

**將堆疊新增至 StackSet**

1. 在 **StackSets** 頁面上，選取 **my-awsconfig-stackset**。

1. 選擇 StackSet 後，從**動作**選單選擇**將堆疊新增至 StackSet**。

1. 在**設定部署選項**頁面上，對於**將堆疊新增至 StackSet**，選擇**部署新堆疊**。

1. 針對**帳戶**，選擇**在帳戶中部署堆疊**並輸入帳戶 ID。

1. 針對**指定區域**，選取新區域，例如**歐洲 (愛爾蘭)** (`eu-west-1`)。

1. 對於**部署選項**，保留與之前相同的設定。

1. 選擇**下一步**。

1. 在**指定覆寫**頁面上，依指定保留屬性值並選擇**下一步**。

1. 在 **Review (檢閱)** 頁面上，檢閱您的選項，然後選擇 **Submit (提交)**。

1. CloudFormation 會在指定的區域開始建立新的堆疊。您可在 StackSet 詳細資訊頁面的**操作**索引標籤上監控進度。

## 清除
<a name="stacksets-tutorial-clean-up"></a>

為了避免產生不必要的 AWS Config 資源費用，您應該從 StackSet 刪除堆疊、刪除 StackSet 本身，以及移除您在本教學課程中建立的 IAM 角色來清除 。因所有資源都部署在您的帳戶中，因此清除非常簡單。

**從您的 StackSet 刪除堆疊**

1. 在 **StackSets** 頁面上，選取 **my-awsconfig-stackset**。

1. 選取 StackSet 後，從**動作**選單選擇**從 StackSet 刪除堆疊**。

1. 在**設定部署選項**頁面上，針對**帳戶**，選擇**在帳戶中部署堆疊**，然後輸入您的帳戶 ID。

1. 針對**指定區域**，選取您部署堆疊的所有區域。

1. 對於**部署選項**，保留預設的設定。

1. 確定*未*開啟**保留堆疊**，以便刪除堆疊及其資源。

1. 選擇**下一步**。

1. 在 **Review (檢閱)** 頁面上，檢閱您的選項，然後選擇 **Submit (提交)**。

1. CloudFormation 會開始從 StackSet 刪除堆疊。您可在 StackSet 詳細資訊頁面的**操作**索引標籤上監控進度。

**刪除您的 StackSet**

1. 刪除所有堆疊之後，在 **StackSets** 頁面上選取 **my-awsconfig-stackset**。

1. 選擇 StackSet 後，從**動作**選單選擇**刪除 StackSet**。

1. 出現確認提示時，請選擇**刪除**。

**刪除 IAM 服務角色**

由於您只部署到您的帳戶，因此只需要從此單一帳戶刪除 IAM 角色，使得清除比多帳戶部署更為簡單。

1. 開啟 [IAM 主控台](https://console.aws.amazon.com/iam/)。

1. 從導覽窗格中，選擇 **Roles (角色)**。

1. 在搜尋方塊中，輸入 **AWSCloudFormationStackSet**，以尋找您為此教學課程建立的角色。

1. 選取 **AWSCloudFormationStackSetAdministrationRole** 旁邊的核取方塊。

1. 從頁面頂部，選擇**刪除**。

1. 在確認對話方塊中輸入 **delete**，然後選擇**刪除**。

1. 重複相同的程序，刪除 **AWSCloudFormationStackSetExecutionRole**。

刪除 StackSet 之後， AWS 區域 由於`AWS::S3::Bucket`資源上的 `DeletionPolicy` 屬性，Amazon S3 儲存貯體會保留在每個儲存貯體中。這會保留您的 AWS Config 歷史記錄資料。若您不再需要此資料，可以手動安全地刪除儲存貯體。您必須先清空儲存貯體，才能將其刪除。清空儲存貯體將會刪除其中的所有物件。

**清空和刪除 Amazon S3 儲存貯體**

1. 開啟 [Amazon S3 主控台](https://console.aws.amazon.com/s3/)。

1. 在主控台左側的導覽窗格中，選擇 **Buckets (儲存貯體)**。

1. 在**儲存貯體**清單中，您會在部署的每個區域看到為此 StackSet 建立的儲存貯體。選取為此 StackSet 建立之儲存貯體名稱旁邊的選項，然後選擇**空白**。

1. 在**清空儲存貯體**頁面上的文字欄位中輸入 **permanently delete**，以確認您要清空儲存貯體，然後選擇**清空**。

1. 在 **Empty bucket: Status** (清空儲存貯體：狀態) 頁面上監控儲存貯體清空的進度。

1. 若要返回儲存貯體清單，請選擇 **Exit (結束)**。

1. 選取儲存貯體名稱旁邊的選項，然後選擇**刪除**。

1. 出現確認提示時，請輸入儲存貯體名稱，然後選擇**刪除儲存貯體**。

1. 從**儲存貯體**清單中，監控儲存貯體刪除程序的進度。當 Amazon S3 完成刪除儲存貯體時，它會從清單移除儲存貯體。

1. 針對 StackSet 在不同區域中建立的每個儲存貯體，重複此程序。

## 後續步驟
<a name="stacksets-tutorial-next-steps"></a>

恭喜您！您已成功使用範例範本建立 StackSet，將堆疊部署到帳戶中的多個區域、更新 StackSet、新增更多堆疊，以及清理資源。透過專注於單一帳戶部署，您已簡化清除程序，同時仍學習 StackSets 的核心多區域功能。

若要進一步了解 StackSets，請探索下列主題：
+ [覆寫 CloudFormation StackSet 中堆疊的參數值](stackinstances-override.md) – 了解如何覆寫特定帳戶及區域的參數值。
+ [具有服務受管許可的 Create CloudFormation StackSets](stacksets-orgs-associate-stackset-with-org.md) – 探索使用 AWS Organizations為多帳戶部署建立 StackSets。

# 具有自我管理許可的 Create CloudFormation StackSets
<a name="stacksets-getting-started-create-self-managed"></a>

本主題說明如何建立具有*自我管理*許可的 StackSets，以跨 AWS 帳戶 和區域部署堆疊。

**注意**  
繼續之前，建立 StackSets 所需 IAM 服務角色，才能在您用來管理 StackSet 的帳戶與堆疊部署目的地帳戶之間建立信任關係。如需詳細資訊，請參閱[授與自我管理許可](stacksets-prereqs-self-managed.md)。

**Topics**
+ [建立具有自我管理許可的 StackSet (主控台)](#stacksets-getting-started-create-self-managed-console)
+ [建立具有自我管理許可的 StackSet (AWS CLI)](#stacksets-getting-started-self-managed-cli)

## 建立具有自我管理許可的 StackSet (主控台)
<a name="stacksets-getting-started-create-self-managed-console"></a>

**建立 StackSet**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面頂端的導覽列上，選擇您要從中管理 StackSet 的 AWS 區域 。

1. 從導覽窗格選擇 **StackSets**。

1. 從 **StackSets** 頁面上方選擇**建立 StackSet**。

1. 在**許可**下，選擇**自助服務許可**，然後選擇您建立的 IAM 角色。

1. 在**準備範本**下，請選擇**範本已準備就緒**。

1. 在 **Specify template (指定範本)** 下，選擇指定堆疊範本所在 S3 儲存貯體的 URL，或上傳堆疊範本檔案。然後選擇**下一步**。

1. 在**指定 StackSet 詳細資訊**頁面上，提供 StackSet 的名稱、指定任何參數，然後選擇**下一步**。

1. 選擇 **Next** (下一步) 繼續。

1. 在 **Configure StackSet options (設定 StackSet 選項)** 頁面的 **Tags (標籤)** 下，指定任何標籤以套用至堆疊中的資源。如需如何在 中使用標籤的詳細資訊 AWS，請參閱*AWS 帳單與成本管理 《 使用者指南*》中的[使用成本分配標籤組織和追蹤 AWS 成本](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

1. 對於**執行組態**，選擇**作用中**，以啟用 CloudFormation 的最佳化操作處理：
   + 非衝突操作會同時執行，以便加快部署時間。
   + 衝突操作會根據請求的順序，自動排入佇列和處理。

   在有執行中或排入佇列的操作時，CloudFormation 會將所有傳入操作排入佇列，即使這些操作沒有衝突也一樣。在此期間，您無法變更執行設定。

1. 如果範本包含 IAM 資源，在**功能**中選擇**我知道此範本可建立 IAM 資源**，以指定您要使用此範本中的 IAM 資源。如需詳細資訊，請參閱[認可 CloudFormation 範本中的 IAM 資源](control-access-with-iam.md#using-iam-capabilities)。

1. 選擇**下一步**。

1. 在**設定部署選項**頁面上，對於**將堆疊新增至 StackSet**，選擇**部署新堆疊**。

1. 針對 **Accounts (帳戶)**，選擇 **Deploy stacks in accounts (在帳戶中部署堆疊)**。在文字方塊中貼上您的目標 AWS 帳戶 號碼，以逗號分隔多個號碼。
**注意**  
若想要在該帳戶中部署堆疊，也可包含您的管理員帳戶 ID。

1. 在**指定區域**下，選擇要部署堆疊的區域。

1. 對於**部署選項**，執行下列動作：
   + 針對**並行帳戶數目上限**，指定並行處理的帳戶數量。
   + 針對**容錯能力**，指定每個區域允許的帳戶失敗數目上限。達到此限制後，操作將停止，且不會繼續前往其他區域。
   + 對於**區域並行**，選擇如何處理區域：**循序** (一次處理一個區域) 或**平行** (同時處理多個區域)。
   + 針對**並行模式**，選擇並行在操作執行期間的行為方式。
     + **嚴格容錯能力** – 降低發生故障時的帳戶並行層級，保持在**容錯能力** \$11 的範圍內。
     + **軟性容錯能力** – 無論失敗為何，維持您指定的並行層級 (**最大並行帳戶**的值)。

1. 選擇**下一步**。

1. 在 **Review (檢閱)** 頁面上，檢視您的選擇。選擇**編輯**以對相關區段進行變更。

1. 當您準備好建立 StackSet 時，請選擇**提交**。

   CloudFormation 開始建立 StackSet。在您選擇**提交**時開啟的“StackSet 詳細資訊”頁面中，查看 StackSet 中的堆疊建立進度和狀態。

## 建立具有自我管理許可的 StackSet (AWS CLI)
<a name="stacksets-getting-started-self-managed-cli"></a>

請依照本節中的步驟使用 AWS CLI 來：
+ 建立 StackSet 容器。
+ 部署堆疊執行個體。

**建立 StackSet**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) 命令來建立新的 StackSet，並命名為 `my-stackset`。下列範例使用儲存於 S3 儲存貯體中的範本，並包含一個參數，該參數會將 `KeyPairName` 設定為數值 `TestKey`。

   ```
   aws cloudformation create-stack-set \
     --stack-set-name my-stackset \
     --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \
     --parameters ParameterKey=KeyPairName,ParameterValue=TestKey
   ```

1. 在您的 **create-stack-set** 命令完成後，請執行 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html) 命令以查看已建立的 StackSet。您應該會在結果中看到新 StackSet。

   ```
   aws cloudformation list-stack-sets
   ```

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) 命令在 StackSet 中部署堆疊。下列範例在兩個 AWS 帳戶 (`account_ID_1` 和 `account_ID_2`) 中，跨兩個區域 (`us-west-2` 和 `us-east-1`) 部署堆疊。

   使用 `--operation-preferences` 選項，設定並行帳戶處理和其他部署偏好設定。此範例使用基於數量的設定。請注意，`MaxConcurrentCount` 不得超過 `FailureToleranceCount` \$1 1。對於以百分比為基礎的設定，請使用 `FailureTolerancePercentage` 或 `MaxConcurrentPercentage`。

   ```
   aws cloudformation create-stack-instances \
     --stack-set-name my-stackset \
     --accounts account_ID_1 account_ID_2 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   如需詳細資訊，請參閱《*AWS CloudFormation API 參考*》中的 [CreateStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html)。

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) 命令來確認您的堆疊已成功建立。對於 `--operation-id` 選項，指定作為 **create-stack-instances** 輸出一部分傳回的操作 ID。

   ```
   aws cloudformation describe-stack-set-operation \
     --stack-set-name my-stackset \
     --operation-id operation_ID
   ```

# 具有服務受管許可的 Create CloudFormation StackSets
<a name="stacksets-orgs-associate-stackset-with-org"></a>

透過*服務受管*許可，您可以將堆疊部署到 AWS Organizations 特定區域中由 管理的帳戶。使用此模型，您不需要在每個目標帳戶和 AWS 區域中建立 IAM 角色。CloudFormation 會代表您建立 IAM 角色。如需詳細資訊，請參閱[啟用受信任存取](stacksets-orgs-activate-trusted-access.md)。

**Topics**
+ [考量事項](#stacksets-orgs-considerations)
+ [建立具有服務受管許可的 StackSet (主控台)](#stacksets-orgs-associate-stackset-with-org-console)
+ [建立具有服務受管許可的 StackSet (AWS CLI)](#stacksets-orgs-associate-stackset-with-org-cli)

## 考量事項
<a name="stacksets-orgs-considerations"></a>

建立具有服務受管許可的 StackSet 之前，請考慮下列事項：
+ 具有服務受管許可的 StackSets 可由組織的管理帳戶或委派的管理員帳戶啟動，但所有操作均由管理帳戶執行。
+ CloudFormation 不會將堆疊部署到管理帳戶，即使該帳戶是您的組織的一部分或屬於組織單位。
+ StackSet 可以將整個組織 (包括所有帳戶) 或指定的 OU 設為目標。當 StackSet 以父 OU 為目標時，會自動包含任何子 OU。根據預設，當 StackSet 以特定 OU 為目標時，它會包含這些 OU 中的所有帳戶。不過，您可使用帳戶篩選選項將特定帳戶設為目標。
+ 多個 StackSets 可以將相同的組織或 OU 設為目標。
+ 您無法以組織外部的帳戶為目標。
+ 您部署 StackSet 的權限取決於您用來登入管理帳戶之 IAM 主體實體 (使用者、角色或群組) 的許可。關於授與許可部署至組織的 IAM 政策範例，請參閱[根據區域和資源類型限制堆疊集操作](security_iam_id-based-policy-examples.md#resource-level-permissions-service-managed-stack-set)。
+ 委派管理員具有部署至組織中任何帳戶的完整許可。管理帳戶無法限制部署至特定 OU 或 StackSet 操作的委派管理員許可。
+ 自動部署設定是在 StackSet 層級套用。您無法特別針對 OU、帳戶或區域來調整自動部署。
+ 使用服務受管許可的 StackSets 不支援包含了巨集或轉換的巢狀堆疊或範本。

## 建立具有服務受管許可的 StackSet (主控台)
<a name="stacksets-orgs-associate-stackset-with-org-console"></a>

**建立 StackSet**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面頂端的導覽列上，選擇您要從中管理 StackSet 的 AWS 區域 。

1. 從導覽窗格選擇 **StackSets**。

1. 從 **StackSets** 頁面上方選擇**建立 StackSet**。

1. 在 **Permissions (許可)** 下，選擇 **Service-managed permissions (服務管理許可)**。
**注意**  
如果 AWS Organizations 停用 的受信任存取，則會顯示橫幅。需要信任存取，才能建立或更新具有服務受管許可的 StackSet。只有組織管理帳戶中的管理員，才具有 [使用 啟用 StackSets 的受信任存取 AWS Organizations](stacksets-orgs-activate-trusted-access.md) 的許可。

1. 在**準備範本**下，請選擇**範本已準備就緒**。

1. 在 **Specify template (指定範本)** 下，選擇指定堆疊範本所在 S3 儲存貯體的 URL，或上傳堆疊範本檔案。然後選擇**下一步**。

1. 在**指定 StackSet 詳細資訊**頁面上，提供 StackSet 的名稱、指定任何參數，然後選擇**下一步**。

1. 在 **Configure StackSet options (設定 StackSet 選項)** 頁面的 **Tags (標籤)** 下，指定任何標籤以套用至堆疊中的資源。如需如何在 中使用標籤的詳細資訊 AWS，請參閱*AWS 帳單與成本管理 《 使用者指南*》中的[使用成本分配標籤組織和追蹤 AWS 成本](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

1. 對於**執行組態**，選擇**作用中**，以啟用 CloudFormation 的最佳化操作處理：
   + 非衝突操作會同時執行，以便加快部署時間。
   + 衝突操作會根據請求的順序，自動排入佇列和處理。

   在有執行中或排入佇列的操作時，CloudFormation 會將所有傳入操作排入佇列，即使這些操作沒有衝突也一樣。在此期間，您無法變更執行設定。

1. 如果範本包含 IAM 資源，在**功能**中選擇**我知道此範本可建立 IAM 資源**，以指定您要使用此範本中的 IAM 資源。如需詳細資訊，請參閱[認可 CloudFormation 範本中的 IAM 資源](control-access-with-iam.md#using-iam-capabilities)。

1. 選擇**下一步**以繼續，並啟用受信任存取 (如果尚未啟用)。

1. 在**設定部署選項**頁面，**部署目標**下，執行下列其中一項操作：
   + 選擇**部署至組織**，以部署至組織中的所有帳戶。
   + 選擇**部署至組織單位**，以部署至特定 OU 中的所有帳戶。選擇 **Add an OU (新增 OU)**，然後將目標 OU ID 貼到文字方塊中。針對每個新的目標 OU 重複上述步驟。

   若您選擇**部署到組織單位**，對於**帳戶篩選類型**，您可以選擇下列其中一個選項並提供帳戶號碼，將部署目標設定為特定個別帳戶。
   + **無** (預設) – 將堆疊部署到指定 OU 中的所有帳戶。
   + **交集** – 將堆疊部署到所選 OU 中的特定個別帳戶。
   + **差集** – 將堆疊部署到所選 OU 中的所有帳戶，但特定帳戶除外。
   + **聯集** – 將堆疊部署到指定的 OU 和其他個別帳戶。

1. 在**自動部署**下，選擇是否自動部署到未來新增至目標組織或 OU 的帳戶。如需詳細資訊，請參閱[在 中啟用或停用 StackSets 的自動部署 AWS Organizations](stacksets-orgs-manage-auto-deployment.md)。

1. 如果您已啟用自動部署，請在 **Account removal behavior (帳戶移除行為)** 下，選擇在從目標組織或 OU 移除帳戶時，是否保留或刪除堆疊資源。
**注意**  
如果選取**保留堆疊**，則會從 StackSet 移除堆疊執行個體，但會保留堆疊及其相關資源。資源會保持在當前狀態，但不再是 StackSet 的一部分。

1. 在**指定區域**下，選擇要部署堆疊的區域。

1. 對於**部署選項**，執行下列動作：
   + 針對**並行帳戶數目上限**，指定並行處理的帳戶數量。
   + 針對**容錯能力**，指定每個區域允許的帳戶失敗數目上限。達到此限制後，操作將停止，且不會繼續前往其他區域。
   + 對於**區域並行**，選擇如何處理區域：**循序** (一次處理一個區域) 或**平行** (同時處理多個區域)。
   + 針對**並行模式**，選擇並行在操作執行期間的行為方式。
     + **嚴格容錯能力** – 降低發生故障時的帳戶並行層級，保持在**容錯能力** \$11 的範圍內。
     + **軟性容錯能力** – 無論失敗為何，維持您指定的並行層級 (**最大並行帳戶**的值)。
   + 對於 StackSet **相依性**，新增相依的 StackSet ARNs，最多保持在 10 個相依性內。如需詳細資訊，請參閱[在 中啟用或停用 StackSets 的自動部署 AWS Organizations](stacksets-orgs-manage-auto-deployment.md)。

1. 選擇 **Next** (下一步) 繼續。

1. 在**檢閱**頁面上，確認 StackSet 將部署到正確區域中的正確帳戶，然後選擇**建立 StackSet**。

   **StackSet details (StackSet 詳細資訊)** 頁面隨即開啟。您可以檢視 StackSet 的堆疊建立進度和狀態。

## 建立具有服務受管許可的 StackSet (AWS CLI)
<a name="stacksets-orgs-associate-stackset-with-org-cli"></a>

請依照本節中的步驟使用 AWS CLI 來：
+ 建立 StackSet 容器。
+ 部署堆疊執行個體。

**注意**  
做為委派管理員時，您必須在命令中包含 `--call-as DELEGATED_ADMIN`。

------
#### [ Deploy to your organization ]

**建立 StackSet**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) 命令來建立新的 StackSet，並命名為 `my-stackset`。下列範例使用儲存在 S3 儲存貯體中的範本，啟用自動部署，並在移除帳戶時保留堆疊。如需詳細資訊，請參閱[在 中啟用或停用 StackSets 的自動部署 AWS Organizations](stacksets-orgs-manage-auto-deployment.md)。

   ```
   aws cloudformation create-stack-set \
     --stack-set-name my-stackset \
     --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \
     --permission-model SERVICE_MANAGED \
     --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true,DependsOn=ARN1,ARN2
   ```

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html) 命令確認您的 StackSet 已建立。結果中會列出新的 StackSet。

   ```
   aws cloudformation list-stack-sets
   ```
   + 如果您在登入會員帳戶時，將 `--call-as` 選項設定為 `DELEGATED_ADMIN`，則 **list-stack-sets** 會傳回組織管理帳戶中具有服務管理許可的所有 StackSets。
   + 如果您在登入 AWS 帳戶時，將 `--call-as` 選項設定為 `SELF`，則 **list-stack-sets** 會傳回 AWS 帳戶中的所有自我管理 StackSets。
   + 如果您在登入組織的管理帳戶時，將 `--call-as` 選項設定為 `SELF`，則 **list-stack-sets** 會傳回組織 管理帳戶 中的所有 StackSets。

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) 命令在 StackSet 中新增堆疊。針對 `--deployment-targets` 選項，指定要部署到組織中所有帳戶的組織根 ID。

   使用 `--operation-preferences` 選項，設定並行帳戶處理和其他部署偏好設定。此範例使用基於數量的設定。請注意，`MaxConcurrentCount` 不得超過 `FailureToleranceCount` \$1 1。對於以百分比為基礎的設定，請使用 `FailureTolerancePercentage` 或 `MaxConcurrentPercentage`。

   ```
   aws cloudformation create-stack-instances --stack-set-name my-stackset \
     --deployment-targets OrganizationalUnitIds=r-a1b2c3d4e5 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   如需詳細資訊，請參閱《*AWS CloudFormation API 參考*》中的 [CreateStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html)。

1. 使用 **create-stack-instances** 輸出中傳回的 `operation-id`，使用下列 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) 命令，以驗證是否已成功建立堆疊。

   ```
   aws cloudformation describe-stack-set-operation \
     --stack-set-name my-stackset \
     --operation-id operation_ID
   ```

------
#### [ Deploy to organizational units (OUs) ]

**建立 StackSet**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) 命令來建立新的 StackSet，並命名為 `my-stackset`。下列範例使用儲存於 S3 儲存貯體中的範本，並包含一個參數，該參數會將 `KeyPairName` 設定為數值 `TestKey`

   ```
   aws cloudformation create-stack-set \
     --stack-set-name my-stackset \
     --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \
     --permission-model SERVICE_MANAGED \
     --parameters ParameterKey=KeyPairName,ParameterValue=TestKey
   ```

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html) 命令確認您的 StackSet 已建立。結果中會列出新的 StackSet。

   ```
   aws cloudformation list-stack-sets
   ```
   + 如果您在登入會員帳戶時，將 `--call-as` 選項設定為 `DELEGATED_ADMIN`，則 **list-stack-sets** 會傳回組織管理帳戶中具有服務管理許可的所有 StackSets。
   + 如果您在登入 AWS 帳戶時，將 `--call-as` 選項設定為 `SELF`，則 **list-stack-sets** 會傳回 AWS 帳戶中的所有自我管理 StackSets。
   + 如果您在登入組織的管理帳戶時，將 `--call-as` 選項設定為 `SELF`，則 **list-stack-sets** 會傳回組織 管理帳戶 中的所有 StackSets。

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) 命令在 StackSet 中新增堆疊。針對 `--deployment-targets` 選項，指定要部署的 OU ID。

   使用 `--operation-preferences` 選項，設定並行帳戶處理和其他部署偏好設定。此範例使用基於數量的設定。請注意，`MaxConcurrentCount` 不得超過 `FailureToleranceCount` \$1 1。對於以百分比為基礎的設定，請使用 `FailureTolerancePercentage` 或 `MaxConcurrentPercentage`。

   ```
   aws cloudformation create-stack-instances --stack-set-name my-stackset \
     --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo,ou-rcuk-slr5lh0a \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   如需詳細資訊，請參閱《*AWS CloudFormation API 參考*》中的 [CreateStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html)。

1. 使用 **create-stack-instances** 輸出中傳回的 `operation-id`，使用下列 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) 命令，以驗證是否已成功建立堆疊。

   ```
   aws cloudformation describe-stack-set-operation \
     --stack-set-name my-stackset \
     --operation-id operation_ID
   ```

------
#### [ Deploy to specific accounts in OUs ]

您可以指定特定組織單位並使用帳戶篩選，精確控制哪些帳戶會接收堆疊部署。根據預設，如果未指定帳戶篩選，堆疊會部署到指定 OU 中的所有帳戶。

在 中 AWS CLI，您可以使用 `--deployment-targets`選項指定帳戶篩選。關於詳細資訊，請參閱 [DeploymentTargets](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeploymentTargets.html)。

使用 **create-stack-set** 命令建立 StackSet 容器之後，請使用下列其中一個範例，將堆疊部署至特定帳戶。

**以 OU 中的特定帳戶為目標**  
以下範例只會將堆疊部署到 OU1 中的帳戶 A1 和 A2。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=OU1,Accounts=A1,A2,AccountFilterType=INTERSECTION \
  --regions us-west-2 us-east-1
```

**從 OU 排除帳戶**  
下列範例會將堆疊部署到 OU1 中的所有帳戶，帳戶 A1 和 A2 除外。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=OU1,Accounts=A1,A2,AccountFilterType=DIFFERENCE \
  --regions us-west-2 us-east-1
```

------

# 在 中啟用或停用 StackSets 的自動部署 AWS Organizations
<a name="stacksets-orgs-manage-auto-deployment"></a>

當新帳戶新增至您的目標組織或組織單位 (OUs) 時，CloudFormation 可以自動將其他堆疊部署到新 AWS Organizations 帳戶。您可以啟用自動部署，並選擇當帳戶從目標 OU 中移除時，是刪除還是保留堆疊及其相關聯的資源。對於使用服務受管許可的 StackSets，這些設定隨時可以修改。

## 自動部署的運作方式
<a name="stacksets-orgs-auto-deployment-example"></a>

如果您啟用自動部署，當帳戶新增至目標組織或 OU、從目標組織或 OU 移除，或在目標 OU 之間移動時，將會觸發自動部署。

例如，假設 `StackSet1` 以 `us-east-1` 區域的 `OU1` 為目標，`StackSet2` 以 `us-east-1` 區域的 `OU2` 為目標。`OU1` 包含 `AccountA`。

在已啟用自動部署的情況下，如果您將 `AccountA` 從 `OU1` 移至 `OU2`，CloudFormation 會自動執行刪除操作以從 `AccountA` 中移除 `StackSet1` 堆疊，並將新增 `StackSet2` 堆疊至 `AccountA` 的建立操作排入佇列。

## 考量事項
<a name="stacksets-orgs-auto-deployment-considerations"></a>

以下是使用自動部署時的考量事項：
+ 自動部署功能在 StackSet 層級啟用。您無法特別針對 OU、帳戶或區域來調整自動部署。
+ 覆寫的參數值僅套用至目標 OU 及其子 OU 中目前的帳戶。未來新增至目標 OU 及其子 OU 的帳戶將使用 StackSet 預設值，而非覆寫的值。
+ 自動部署不會考慮帳戶層級鎖定篩選條件。如果您以特定帳戶為目標並啟用自動部署，您的 StackSet 將繼續部署到已部署組織內新增的任何帳戶。若要避免向新增帳戶部署，請停用自動部署。
+ 相依性管理：為每個 StackSet 定義最多 10 個相依性，每個帳戶最多 100 個相依性。例如，如果您有五個 StackSets，每個都有五個相依性，則有 25 個相依性計入 100 個相依性限制。您可以透過[服務配額主控台](https://console.aws.amazon.com/servicequotas/home)請求提高限制。刪除 StackSets 或停用 Organizations 時，會移除相依性。
+ 建議在使用自動部署時啟用受管執行。受管執行將允許多個目標帳戶中的自動部署操作在 StackSet 內同時執行，從而提高處理速度，尤其是針對較大的 Organizations。

## 啟用或停用自動部署 (主控台)
<a name="stacksets-orgs-manage-auto-deployment-console"></a>

**啟用或停用自動部署**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在螢幕上方的導覽列中，選擇您在其中建立 StackSet 所在的 AWS 區域 。

1. 從導覽窗格選擇 **StackSets**。

1. 在 **StackSets** 頁面上，選取要更新的 StackSet 名稱旁的選項。

1. 在右上角的**動作**功能表中，選擇**編輯自動部署**。

1. 在開啟的對話方塊中，執行下列動作：

   1. 針對**自動部署**，選擇**啟用**或**停用**。

   1. 對於**帳戶移除行為**，選擇**刪除堆疊**或**保留堆疊**。保留的資源會保持在當前狀態，但不再是 StackSet 的一部分。

   1. 對於 StackSet **相依性**，新增相依的 StackSet ARNs，最多保持在 10 個相依性內。

1. 選擇**儲存**。

## 啟用或停用自動部署 (AWS CLI)
<a name="stacksets-orgs-manage-auto-deployment-cli"></a>

**啟用或停用自動部署**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html) 命令搭配 `--auto-deployment` 選項。

   下列命令會啟用自動部署。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true,DependsOn=ARN1,ARN2
   ```

   或者，要停用自動部署，請將 `Enabled=false` 指定為 `--auto-deployment` 選項的值，如下列範例所示。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template --auto-deployment Enabled=false
   ```

1. 使用 **update-stack-set** 輸出中傳回的操作 ID，執行 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html)，以驗證是否已成功更新 StackSet。

   ```
   aws cloudformation describe-stack-set-operation --operation-id operation_ID
   ```

# Update CloudFormation StackSets
<a name="stacksets-update"></a>

您可以使用 CloudFormation 主控台或 AWS CLI來更新 StackSet。

要從 StackSet 新增和移除帳戶和區域，請參閱 [將堆疊新增至 StackSets](stackinstances-create.md) 和 [從 StackSets 刪除堆疊](stackinstances-delete.md)。若要覆寫堆疊的參數值，請參閱 [覆寫堆疊上的參數](stackinstances-override.md)。

**Topics**
+ [更新您的 StackSet (主控台)](#stacksets-update-console)
+ [更新您的 StackSet (AWS CLI)](#stacksets-update-cli)

## 更新您的 StackSet (主控台)
<a name="stacksets-update-console"></a>

**更新 StackSet**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在螢幕上方的導覽列中，選擇您在其中建立 StackSet 所在的 AWS 區域 。

1. 從導覽窗格選擇 **StackSets**。

1. 在 **StackSets** 頁面上，選取要更新的 StackSet。

1. 選擇 StackSet 後，從**動作**選單選擇**編輯 StackSet 詳細資訊**。

1. 在**選擇範本**頁面上，視需要更新**許可**區段，或跳至下個步驟。

1. 針對**先決條件 - 準備範本**，選擇**使用目前範本**，以使用目前範本，或**取代目前範本**，以指定 S3 URL 至另一個範本或上傳新範本。

1. 選擇**下一步**。

1. 在**指定 StackSet 詳細資訊**頁面上，針對 **StackSet 描述**，根據需要更新 StackSet 的描述。

1. 對於**參數**，根據需要更新參數值。

1. 選擇**下一步**。

1. 在**設定 StackSet 選項**頁面上，針對**標籤**，根據需要修改標籤。您可以新增、更新或刪除標籤。如需如何在 中使用標籤的詳細資訊 AWS，請參閱*AWS 帳單與成本管理 《 使用者指南*》中的[使用成本分配標籤組織和追蹤 AWS 成本](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

1. 對於**執行組態**，您可根據需要更新執行組態。
**注意**  
請注意，當操作正在執行或處於佇列中時，您無法變更執行設定。

1. 如果範本包含 IAM 資源，在**功能**中選擇**我知道此範本可建立 IAM 資源**，以指定您要使用此範本中的 IAM 資源。如需詳細資訊，請參閱[認可 CloudFormation 範本中的 IAM 資源](control-access-with-iam.md#using-iam-capabilities)。

1. 選擇**下一步**。

1. 在**設定部署選項**頁面上，提供要更新的帳戶和區域。

   CloudFormation 會在第一個區域內的指定帳戶中部署堆疊更新，然後移至下一個區域，以此類推。只要一個區域的部署失敗不超過指定的容錯能力。

   1. [自我管理許可] 對於**帳戶**、**部署位置**，選擇**在帳戶中部署堆疊**。在文字方塊中貼上您用來建立 StackSet 的目標帳戶 ID，並以逗號分隔多個 ID。

      [服務受管許可] 執行下列其中一項操作：
      + 選擇 **Deploy to organizational units (OUs) (部署至組織單位 (OU))**。輸入您用來建立 StackSet 的目標 OU。
      + 選擇 **Deploy to accounts (部署至帳戶)**。貼上您用來建立 StackSet 的目標 OU ID 或帳戶 ID。

   1. 針對**指定區域**，指定希望 CloudFormation 部署更新的順序。

   1. 對於**部署選項**，執行下列動作：
      + 針對**並行帳戶數目上限**，指定並行處理的帳戶數量。
      + 針對**容錯能力**，指定每個區域允許的帳戶失敗數目上限。達到此限制後，操作將停止，且不會繼續前往其他區域。
      + 對於**區域並行**，選擇如何處理區域：**循序** (一次處理一個區域) 或**平行** (同時處理多個區域)。
      + 針對**並行模式**，選擇並行在操作執行期間的行為方式。
        + **嚴格容錯能力** – 降低發生故障時的帳戶並行層級，保持在**容錯能力** \$11 的範圍內。
        + **軟性容錯能力** – 無論失敗為何，維持您指定的並行層級 (**最大並行帳戶**的值)。
      + 【服務受管許可】 對於 StackSet **相依性**，新增相依的 StackSet ARNs，最多保持在 10 個相依性內。如需詳細資訊，請參閱[在 中啟用或停用 StackSets 的自動部署 AWS Organizations](stacksets-orgs-manage-auto-deployment.md)。

   1. 選擇 **Next** (下一步) 繼續。

1. 在 **Review (檢閱)** 頁面上，檢視您的選擇。選擇**編輯**以對相關區段進行變更。

1. 準備好繼續時，請選擇**提交**。

   CloudFormation 開始將更新套用到 StackSet，並顯示 StackSet 詳細資訊頁面的**操作**索引標籤。您可以在 **Operations (操作)** 標籤中檢視更新操作的進度和狀態。

## 更新您的 StackSet (AWS CLI)
<a name="stacksets-update-cli"></a>

**注意**  
做為委派管理員時，您必須在命令中包含 `--call-as DELEGATED_ADMIN`。

1. 

**更新 StackSet**

   使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html) 命令以變更您的 StackSet。

   在下列範例中，我們使用 `--parameters` 選項更新 StackSet。尤其是我們將交付管道組態的預設快照交付頻率，從 `TwentyFour_Hours` 變更為 `Twelve_Hours`。因為我們仍使用目前的範本，因此我們新增 `--use-previous-template` 選項。

   使用 `--operation-preferences` 選項，設定並行帳戶處理和其他部署偏好設定。這些範例使用基於數量的設定。請注意，`MaxConcurrentCount` 不得超過 `FailureToleranceCount` \$1 1。對於以百分比為基礎的設定，請使用 `FailureTolerancePercentage` 或 `MaxConcurrentPercentage`。

   [自我管理許可] 對於 `--accounts` 選項，提供更新的目標帳戶 ID。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template \
     --parameters ParameterKey=MaximumExecutionFrequency,ParameterValue=Twelve_Hours \
     --accounts account_ID_1 account_ID_2 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   [服務受管許可] 對於 `--deployment-targets` 選項，提供更新的目標組織根 ID 或組織單位 ID。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template \
     --parameters ParameterKey=MaximumExecutionFrequency,ParameterValue=Twelve_Hours \
     --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo,ou-rcuk-slr5lh0a \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   如需詳細資訊，請參閱《[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) API 參考*》中的AWS CloudFormation UpdateStackSet*。

1. 藉由執行 **describe-stack-set-operation** 命令以顯示更新操作的狀態和結果，確認您的 StackSet 已成功更新。針對 `--operation-id`，使用您的 **update-stack-set** 命令所傳回的操作 ID。

   ```
   aws cloudformation describe-stack-set-operation \
     --operation-id operation_ID
   ```

# 將堆疊新增至 CloudFormation StackSets
<a name="stackinstances-create"></a>

當您建立 StackSet 時，可為該 StackSet 建立堆疊。CloudFormation 也可以讓您在 StackSet 建立之後的任何時間點，為其他帳戶和區域新增更多堆疊。您可以透過 CloudFormation 主控台或 AWS CLI新增堆疊。

**Topics**
+ [將堆疊新增至 StackSet (主控台)](#stackinstances-create-console)
+ [將堆疊新增至 StackSet (AWS CLI)](#stackinstances-create-cli)

## 將堆疊新增至 StackSet (主控台)
<a name="stackinstances-create-console"></a>

**將堆疊新增至 StackSet**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在螢幕上方的導覽列中，選擇您在其中建立 StackSet 所在的 AWS 區域 。

1. 從導覽窗格選擇 **StackSets**。在 StackSets 頁面上，選取您建立的 StackSet。

1. 選擇 StackSet 後，從**動作**選單選擇**將堆疊新增至 StackSet**。

1. 在**設定部署選項**頁面上進行以下操作：

   1. 在**將堆疊新增至 StackSet**，選擇**部署新堆疊**。

   1. 接著，根據您 StackSet 的許可設定執行下列操作：
      + [自我管理許可] 對於**帳戶**、**部署位置**，選擇**在帳戶中部署堆疊**。在文字方塊中貼上您的目標帳戶號碼，並以逗號分隔多個號碼。
      + [服務受管許可] 針對**部署目標**，執行下列其中一項：
        + 選擇 **Deploy to organization (部署至組織)**，以部署至組織中的所有帳戶。
        + 選擇 **Deploy to organizational units (OUs) (部署至組織單位 (OU))**，以部署至特定 OU 中的所有帳戶。選擇 **Add another OU (新增另一個 OU)**，然後將目標 OU ID 貼到文字方塊中。針對每個新的目標 OU 重複上述步驟。CloudFormation 也會以所選目標的任何子 OU 為目標。
**注意**  
如果您新增的 OU 已是 StackSet 的目標，CloudFormation 會在 OU 中的任何帳戶中 (尚無 StackSet 的堆疊)，建立新的堆疊 (例如，在建立 StackSet 後新增至 OU 且已停用自動部署的帳戶)。

   1. 對於**指定區域**，指定要在先前步驟指定的目標帳戶中部署至哪些 AWS 區域 。根據預設，CloudFormation 會在第一個區域內的指定帳戶中部署堆疊，然後移至下一個區域，以此類推。只要一個區域的部署失敗不超過指定的容錯能力。

   1. 對於**部署選項**，執行下列動作：
      + 針對**並行帳戶數目上限**，指定並行處理的帳戶數量。
      + 針對**容錯能力**，指定每個區域允許的帳戶失敗數目上限。達到此限制後，操作將停止，且不會繼續前往其他區域。
      + 對於**區域並行**，選擇如何處理區域：**循序** (一次處理一個區域) 或**平行** (同時處理多個區域)。
      + 針對**並行模式**，選擇並行在操作執行期間的行為方式。
        + **嚴格容錯能力** – 降低發生故障時的帳戶並行層級，保持在**容錯能力** \$11 的範圍內。
        + **軟性容錯能力** – 無論失敗為何，維持您指定的並行層級 (**最大並行帳戶**的值)。

   1. 選擇**下一步**。

1. 在 **Specify Overrides (指定覆寫)** 頁面上，依指定保留屬性值。您不需要覆寫您要建立之堆疊的任何屬性值。選擇**下一步**。

1. 在 **Review (檢閱)** 頁面上，檢視您的選擇。選擇**編輯**以對相關區段進行變更。

1. 準備好繼續時，請選擇**提交**。

   CloudFormation 開始建立堆疊。在您選擇**提交**時開啟的“StackSet 詳細資訊”頁面中，查看 StackSet 中的堆疊建立進度和狀態。完成後，您的新堆疊應該會列在**堆疊執行個體**索引標籤中。

## 將堆疊新增至 StackSet (AWS CLI)
<a name="stackinstances-create-cli"></a>

**注意**  
做為委派管理員時，您必須在命令中包含 `--call-as DELEGATED_ADMIN`。

**將堆疊新增至具有自我管理許可的 StackSet**  
使用 **create-stack-instances** CLI 命令。對於 `--accounts` 選項，提供您要建立堆疊的帳戶 ID。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --accounts account_id --regions eu-west-1 us-west-2
```

**使用服務受管許可將堆疊新增至 StackSet**  
使用 **create-stack-instances** CLI 命令。針對 `--deployment-targets` 選項，提供您要為其建立堆疊的組織 (根) ID 或 OU ID。如需目標為特定帳戶的範例命令，請參閱 [建立具有服務受管許可的 StackSet (AWS CLI)](stacksets-orgs-associate-stackset-with-org.md#stacksets-orgs-associate-stackset-with-org-cli)。

```
aws cloudformation create-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=ou-rcuk-r1qi0wl7 --regions eu-west-1 us-west-2
```

**注意**  
如果您新增的 OU 已是 StackSet 的目標，CloudFormation 會在 OU 中的任何帳戶中 (尚無 StackSet 的堆疊)，建立新的堆疊 (例如，在建立 StackSet 後新增至 OU 且已停用自動部署的帳戶)。

# 覆寫 CloudFormation StackSet 中堆疊的參數值
<a name="stackinstances-override"></a>

在某些情況下，您可能會希望特定區域或帳戶中的堆疊，擁有不同於 StackSet 本身指定的屬性值。例如，您可能想要根據帳戶用於開發或生產，為指定的參數指定不同的值。針對這些情況，CloudFormation 可讓您依據帳戶與區域覆寫堆疊中的參數值。您可以先在建立堆疊時覆寫範本參數值，也可以覆寫現有堆疊的參數值。您只能將之前在堆疊中覆寫的參數，設定回 StackSet 中指定的值。

參數值覆寫套用至您選取之帳戶和區域中的堆疊。在 StackSet 更新期間，針對堆疊覆寫的任何參數值皆不會更新，而是會保留其覆寫值。

您只能覆寫 StackSet 中指定的參數*值*，若要新增或刪除參數本身，您必須更新 StackSet 範本。如果您將參數新增至 StackSet 範本，那麼在您可以覆寫堆疊中的該參數值之前，您必須先以 StackSet 之中指定的新參數與值來更新所有堆疊。一旦所有堆疊以新參數完成更新，您就能視需要覆寫個別堆疊中的參數值。

若要了解如何在建立堆疊時覆寫 StackSet 參數值，請參閱 [將堆疊新增至 StackSets](stackinstances-create.md)。

**Topics**
+ [覆寫堆疊上的參數 (主控台)](#stackinstances-override-console)
+ [覆寫堆疊上的參數 (AWS CLI)](#stackinstances-override-cli)

## 覆寫堆疊上的參數 (主控台)
<a name="stackinstances-override-console"></a>

**覆寫特定堆疊的參數**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在螢幕上方的導覽列中，選擇您在其中建立 StackSet 所在的 AWS 區域 。

1. 從導覽窗格選擇 **StackSets**。在 StackSets 頁面上，選取您的 StackSet。

1. 選擇 StackSet 後，從**動作**選單選擇**覆寫 StackSet 參數**。

1. 在**設定部署選項**頁面上，提供您要為其建立覆寫之堆疊的帳戶和區域。

   根據預設，CloudFormation 會在第一個區域內的指定帳戶中部署堆疊，然後移至下一個區域，以此類推。前提是一個區域的部署失敗不超過指定的容錯能力。

   1. [自我管理許可] 對於**部署目標**，選擇**在帳戶中部署堆疊**。貼上用來建立 StackSet 的部分或全部目標帳戶 ID。

      [服務受管許可] 執行下列其中一項操作：
      + 選擇 **Deploy to organizational units (OUs) (部署至組織單位 (OU))**。輸入您在中用來建立 StackSet 的一或多個目標 OU。覆寫的參數值僅套用至目標 OU 及其子 OU 中目前的帳戶。未來新增至目標 OU 及其子 OU 的帳戶將使用 StackSet 預設值，而非覆寫的值。
      + 選擇 **Deploy to accounts (部署至帳戶)**。貼上您用來建立 StackSet 的部分或所有目標 OU ID 或帳戶 ID。

   1. 針對**指定區域**，新增一或多個已部署此 StackSet 之堆疊執行個體的區域。

      如果您新增多個區域，則 **Specify regions (指定區域)** 下的區域順序決定其部署順序。

   1. 對於**部署選項**，執行下列動作：
      + 針對**並行帳戶數目上限**，指定並行處理的帳戶數量。
      + 針對**容錯能力**，指定每個區域允許的帳戶失敗數目上限。達到此限制後，操作將停止，且不會繼續前往其他區域。
      + 對於**區域並行**，選擇如何處理區域：**循序** (一次處理一個區域) 或**平行** (同時處理多個區域)。
      + 針對**並行模式**，選擇並行在操作執行期間的行為方式。
        + **嚴格容錯能力** – 降低發生故障時的帳戶並行層級，保持在**容錯能力** \$11 的範圍內。
        + **軟性容錯能力** – 無論失敗為何，維持您指定的並行層級 (**最大並行帳戶**的值)。

   1. 選擇**下一步**。

1. 在**指定覆寫**頁面上，勾選要覆寫的參數的核取方塊，然後從**編輯覆寫值**選單選擇**覆寫 StackSet 值**。

1. 在**覆寫 StackSet 參數值**頁面上，進行變更，接著選擇**儲存變更**。
**注意**  
若要將任何已覆寫的參數設定回使用 StackSet 中指定的值，請勾選所有參數並從**編輯覆寫值**選單選擇**設定為 StackSet 值**。這麼做會您更新堆疊時，移除所有覆寫的值。

1. 在 **Review (檢閱)** 頁面上，檢視您的選擇。選擇**編輯**以對相關區段進行變更。

1. 準備好繼續時，請選擇**提交**。

   CloudFormation 開始更新您的堆疊。在選擇**提交**時開啟的 StackSet 詳細資訊頁面中，檢視堆疊的進度和狀態。

## 覆寫堆疊上的參數 (AWS CLI)
<a name="stackinstances-override-cli"></a>

**注意**  
做為委派管理員時，您必須在命令中包含 `--call-as DELEGATED_ADMIN`。

**覆寫特定堆疊的參數**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html) AWS CLI 命令並指定 `--parameter-overrides`選項。

   [自我管理許可] 對於 `--accounts` 選項，提供您要在堆疊上覆寫參數值的帳戶 ID。

   ```
   aws cloudformation update-stack-instances --stack-set-name my-stackset \
     --parameter-overrides ParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940 \
     --accounts account_id --regions us-east-1
   ```

   【服務受管許可】 針對 `--deployment-targets`選項，提供您要覆寫堆疊參數的組織根 ID、OU IDs 或 AWS Organizations 帳戶 IDs。在此範例中，我們在 ID 為 `ou-rcuk-1x5j1lwo` ID 的 OU 中的所有帳戶中，覆寫堆疊的參數值。

   覆寫的參數值僅套用至目標 OU 及其子 OU 中目前的帳戶。未來新增至目標 OU 及其子 OU 的帳戶將使用 StackSet 預設值，而非覆寫的值。

   ```
   aws cloudformation update-stack-instances --stack-set-name my-stackset \
     --parameter-overrides ParameterKey=Subnets,ParameterValue=subnet-1baa3351\\,subnet-27b86940 \
     --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo \
     --regions us-east-1
   ```

1. 執行 **describe-stack-set-operation** 命令來顯示更新操作的狀態和結果，以確認堆疊上已成功覆寫您的參數值。針對 `--operation-id`，使用您的 **update-stack-instances** 命令所傳回的操作 ID。

   ```
   aws cloudformation describe-stack-set-operation --operation-id operation_ID
   ```

# 從 CloudFormation StackSets 刪除堆疊
<a name="stackinstances-delete"></a>

您可以透過 CloudFormation 主控台或 AWS CLI，從 StackSets 刪除堆疊。

**Topics**
+ [從您的 StackSet 刪除堆疊 (主控台)](#stackinstances-delete-console)
+ [從您的 StackSet 刪除堆疊 (AWS CLI)](#stackinstances-delete-cli)

**注意**  
從頂層組織單位刪除堆疊時，該 OU 將不再是 StackSet 的目標。

## 從您的 StackSet 刪除堆疊 (主控台)
<a name="stackinstances-delete-console"></a>

**刪除堆疊**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在螢幕上方的導覽列中，選擇您在其中建立 StackSet 所在的 AWS 區域 。

1. 從導覽窗格選擇 **StackSets**。在 StackSets 頁面上，選取 StackSet。

1. 選取 StackSet 後，從**動作**選單選擇**從 StackSet 刪除堆疊**。

1. 在**設定部署選項**頁面上，先選擇您要刪除堆疊的帳戶和區域。

   1. [自我管理許可] 對於**帳戶**，選擇**在帳戶中部署堆疊**或**在組織單位中部署堆疊**。

      若您選擇**在帳戶中部署堆疊**，將目標帳戶號碼貼到**帳戶號碼**文字方塊中，以逗號分隔多個號碼。

      若選擇**以組織單位部署堆疊**，請在**組織號碼**文字方塊中貼上目標 OU ID，以鎖定屬於指定組織的所有帳戶。

   1. [服務受管許可] 對於**組織單位**，指定目標 OU ID。
**重要**  
CloudFormation 將從指定的目標 OU 及其子 OU 中刪除堆疊。

      對於**帳戶篩選條件類型**，您可選擇下列其中一個選項並提供帳戶號碼，進一步精選要刪除堆疊的帳戶。
      + **無** (預設) – 從指定 OU 中的所有帳戶刪除堆疊。
      + **交集** – 僅從所選 OU 中的特定個別帳戶刪除堆疊。
      + **差集** – 從所選 OU 中的所有帳戶刪除堆疊，但特定帳戶除外。
      + **聯集** – 從指定的 OU 以及其他個別帳戶刪除堆疊。

   1. 針對**指定區域**，選擇要刪除目標帳戶內堆疊的區域。

1. 對於**部署選項**，執行下列動作：
   + 針對**並行帳戶數目上限**，指定並行處理的帳戶數量。
   + 針對**容錯能力**，指定每個區域允許的帳戶失敗數目上限。達到此限制後，操作將停止，且不會繼續前往其他區域。
   + 對於**保留堆疊**，啟用此選項可在從 StackSet 中移除堆疊及其相關資源時，保留堆疊及其相關資源。資源會保持在當前狀態，但不再是 StackSet 的一部分。
   + 對於**區域並行**，選擇如何處理區域：**循序** (一次處理一個區域) 或**平行** (同時處理多個區域)。
   + 針對**並行模式**，選擇並行在操作執行期間的行為方式。
     + **嚴格容錯能力** – 降低發生故障時的帳戶並行層級，保持在**容錯能力** \$11 的範圍內。
     + **軟性容錯能力** – 無論失敗為何，維持您指定的並行層級 (**最大並行帳戶**的值)。

1. 選擇**下一步**。

1. 在 **Review (檢閱)** 頁面上，檢視您的選擇。選擇**編輯**以對相關區段進行變更。

1. 準備好從 StackSet 移除堆疊時，請選擇**提交**。

   刪除堆疊後，您可以在 StackSet 詳細資訊頁面的**堆疊執行個體**索引標籤中，驗證是否已刪除 StackSet 的堆疊執行個體。

## 從您的 StackSet 刪除堆疊 (AWS CLI)
<a name="stackinstances-delete-cli"></a>

**注意**  
做為委派管理員時，您必須在命令中包含 `--call-as DELEGATED_ADMIN`。

使用 **delete-stack-instances** 命令搭配您的 StackSet 名稱。

在這些範例中，我們使用 `--no-retain-stacks` 選項，因為我們未保留任何堆疊。如果您想要保留堆疊及其資源，請使用 `--retain-stacks` 而不是 `--no-retain-stacks`。

針對 `--regions`，指定 AWS 區域 您想要從中刪除堆疊的 ，例如 `us-west-2`和 `us-east-1`。

使用 `--operation-preferences` 選項，設定並行帳戶處理和其他偏好設定。這些範例使用基於數量的設定。請注意，`MaxConcurrentCount` 不得超過 `FailureToleranceCount` \$1 1。對於以百分比為基礎的設定，請使用 `FailureTolerancePercentage` 或 `MaxConcurrentPercentage`。

**刪除堆疊 (自我管理許可)**  
針對 `--accounts` 選項，指定要從中刪除堆疊的帳戶 ID。

```
aws cloudformation delete-stack-instances --stack-set-name my-stackset \
  --accounts account_ID_1 account_ID_2 \
  --regions us-west-2 us-east-1 \
  --no-retain-stacks \
  --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
```

**刪除堆疊 (服務受管許可)**  
對於 `--deployment-targets`，請指定要從中刪除堆疊的組織根 ID 或組織單位 ID。

**重要**  
CloudFormation 將從指定的目標 OU 及其子 OU 中刪除堆疊。

```
aws cloudformation delete-stack-instances --stack-set-name my-stackset \
  --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5jlwo,ou-rcuk-slr5lh0a \ 
  --regions us-west-2 us-east-1 \
  --no-retain-stacks \
  --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
```

如需詳細資訊，請參閱《AWS CloudFormation API 參考**》中的 [DeleteStackInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html)。

在堆疊刪除完成之後，選擇性地執行 **describe-stack-set-operation** 命令來顯示刪除堆疊操作的狀態和結果，以確認堆疊已從您的 StackSet 刪除。針對 `--operation-id`，使用您的 **delete-stack-instances** 命令所傳回的操作 ID。

```
aws cloudformation describe-stack-set-operation --stack-set-name my-stackset \
  --operation-id ddf16f54-ad62-4d9b-b0ab-3ed8e9example
```

# Delete CloudFormation StackSets
<a name="stacksets-delete"></a>

若要刪除 StackSet，您必須先刪除 StackSet 中的所有堆疊。有關如何刪除所有堆疊的詳細資訊，請參閱 [從 StackSets 刪除堆疊](stackinstances-delete.md)。

**Topics**
+ [刪除 StackSet (主控台)](#stacksets-delete-set)
+ [刪除 StackSet (AWS CLI)](#stacksets-delete-set-cli)
+ [刪除服務角色 (選用)](#stacksets-delete-roles)

## 刪除 StackSet (主控台)
<a name="stacksets-delete-set"></a>

**刪除 StackSet**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在螢幕上方的導覽列中，選擇您在其中建立 StackSet 所在的 AWS 區域 。

1. 在 **StackSets** 頁面上，選取 StackSet。

1. 選擇 StackSet 後，從**動作**選單選擇**刪除 StackSet**。

1. 當系統提示您確認是否要刪除堆疊集時，請選擇**刪除 StackSet**。

## 刪除 StackSet (AWS CLI)
<a name="stacksets-delete-set-cli"></a>

**注意**  
做為委派管理員時，您必須在命令中包含 `--call-as DELEGATED_ADMIN`。

**刪除 StackSet**

1. 使用下列 **delete-stack-set** 命令。當系統提示您確認時，請鍵入 **y**，然後按下 **Enter 鍵**。

   ```
   aws cloudformation delete-stack-set --stack-set-name my-stackset
   ```

1. 執行 **list-stack-sets** 命令以確認 StackSet 已刪除。list-stack-sets 命令的結果應該會顯示堆疊及其 `DELETED` 狀態。

   ```
   aws cloudformation list-stack-sets
   ```

## 刪除服務角色 (選用)
<a name="stacksets-delete-roles"></a>

若您不再需要 CloudFormation 執行 StackSet 操作所需的 IAM 服務角色，建議您刪除角色。

*對於自我管理的 StackSets*，是您建立的角色。如需使用者角色的詳細資訊，請參閱 [授與自我管理許可](stacksets-prereqs-self-managed.md)。

*對於服務受管的 StackSets*，本指南中由 StackSets 自動建立的角色在組織管理帳戶中的字尾為 `CloudFormationStackSetsOrgAdmin`，在每個目標帳戶中為 `CloudFormationStackSetsOrgMember`。如需詳細資訊，請參閱[服務連結角色](stacksets-orgs-activate-trusted-access.md#stacksets-orgs-service-linked-roles)。

**刪除服務角色 (主控台)**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色**，然後勾選您所要刪除之角色旁的核取方塊。

1. 在頁面頂端的 **Role actions (角色動作)** 選單中，選擇 **Delete role (刪除角色)**。

1. 在確認對話方塊中，選擇 **Yes, Delete** (是的，刪除)。如果您確定，可以繼續刪除，即使服務上次存取的資料仍持續載入。

**刪除服務角色 (AWS CLI)**
+ 使用下列 **delete-role** 命令。當系統提示您確認時，請鍵入 **y**，然後按下 Enter。

  ```
  aws iam delete-role --role-name role name
  ```

如需有關刪除角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[刪除角色或執行個體設定檔](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。

# 使用目標帳戶閘道來防止失敗的 StackSets 部署
<a name="stacksets-account-gating"></a>

帳戶閘道是一項選用功能，可讓協助您確認，在 CloudFormation 於目標帳戶中開始 StackSets 操作之前驗證此帳戶是否符合特定需求。此驗證是透過做為先決條件檢查的 AWS Lambda 函數執行。

帳戶閘道的常見範例，是驗證目標帳戶上不存在作用中或未解決的 CloudWatch 警示。CloudFormation 會在您每次在目標帳戶中開始堆疊操作前調用該 Lambda 函式，並且僅在此函數中傳回 `SUCCEEDED` 程式碼。如果 Lambda 函式傳回 `FAILED` 狀態，則 CloudFormation 不會繼續您請求的操作。如果您未設定帳戶閘道 Lambda 函式，則 CloudFormation 會略過檢查，並繼續您的操作。

如果您目標帳戶的帳戶閘道檢查失敗，則失敗操作將計入您指定的堆疊容錯能力數目或百分比。如需容錯能力的詳細資訊，請參閱 [StackSet 操作選項](stacksets-concepts.md#stackset-ops-options)。

帳戶閘道僅適用於 StackSets 操作。此功能不適用於 StackSets 之外的其他 CloudFormation 操作。

## 要求
<a name="stacksets-accountgating_reqs"></a>

帳戶閘道必須符合以下要求：
+ 您的 Lambda 函式必須命名為 `AWSCloudFormationStackSetAccountGate`，才能使用此功能。
+ **AWSCloudFormationStackSetExecutionRole** 需要許可，才能調用您的 Lambda 函式。如果沒有這些許可，CloudFormation 會略過帳戶閘道檢查，並繼續堆疊操作。
+ Lambda `InvokeFunction` 許可必須新增至目標帳戶，帳戶閘道才能運作。目標帳戶信任政策必須具有與管理員帳戶的信任關係。下列是授予 Lambda `InvokeFunction` 許可的範例政策聲明。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "lambda:InvokeFunction"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

## 用於建立 Lambda 函式的 CloudFormation 範本
<a name="stacksets-sample-accountgate"></a>

使用以下範例範本來建立 Lambda `AWSCloudFormationStackSetAccountGate` 函式。要使用任一範本建立新堆疊，請參閱 [從 CloudFormation 主控台建立堆疊](cfn-console-create-stack.md)。


|  範本位置  |  Description  | 
| --- | --- | 
|  [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateSucceeded.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateSucceeded.yml)  |  建立實作 Lambda 帳戶閘道函數 (將傳回 `SUCCEEDED` 狀態) 的堆疊。  | 
|  [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateFailed.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateFailed.yml)  |  建立實作 Lambda 帳戶閘道函數 (將傳回 `FAILED` 狀態) 的堆疊。  | 

# 選擇 CloudFormation StackSets 的並行模式
<a name="concurrency-mode"></a>

**並行模式**是一個參數，讓 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html) 允許您選擇並行層級在堆疊集操作期間的行為方式。您可以選擇以下模式：
+ **嚴格容錯能力**：此選項會動態降低並行層級，以確保故障帳戶數目絕不會超過**容錯能力** \$11 的值。初始實際並行值會設定為**並行帳戶數目上限**值，或**容錯能力** \$11 的值，兩者中的較低值。實際並行值隨後會依故障次數按比例減少。這是預設行為。
+ **軟性容錯能力**：此選項會將**容錯能力**與實際並行值分離。這可讓堆疊集操作以**並行帳戶數目上限**值設定的並行層級執行，無論故障次數為何。

**嚴格容錯能力**會降低部署速度，由於每次故障會使並行值減少，因此堆疊集操作會發生故障。**軟性容錯能力**會優先考慮部署速度，同時仍然利用 CloudFormation 安全功能。這可讓您檢閱並處理堆疊集操作故障問題，以解決與現有資源、服務配額和許可相關的常見問題。

如需 StackSets 堆疊操作故障的詳細資訊，請參閱 [堆疊操作失敗的常見原因](stacksets-troubleshooting.md#common-reasons-for-stack-operation-failure)。

如需有關**並行帳戶數目上限**與**容錯能力**的詳細資訊，請參閱 [StackSet 操作選項](stacksets-concepts.md#stackset-ops-options)。

## 每個並行模式的運作方式
<a name="concurrency-mode-example"></a>

下圖提供了堆疊集操作期間，每個**並行模式**運作方式的視覺化呈現。節點字串代表單一 的部署 AWS 區域 ，而每個節點都是目標 AWS 帳戶。

**嚴格容錯能力**  
當使用**嚴格容錯能力**的堆疊集操作將**容錯能力**值設定為 5，並將**並行帳戶數目上限**值設定為 10 時，則實際並行值為 6。實際並行值為 6，因為此**容錯能力** 5 \$11 低於**並行帳戶數目上限**的值。  
下圖顯示**容錯能力**對**並行帳戶數目上限**值的影響，以及對堆疊集操作實際並行值的影響：  

![\[使用嚴格容錯能力的堆疊集操作。容錯能力為 5，並行帳戶上限為 10，並行為 6。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-1.png)

當部署開始且存在故障堆疊執行個體時，實際並行值會減少，以提供安全的部署體驗。當 StackSets 無法部署 1 個堆疊執行個體時，實際並行值會從 6 減少到 5。  

![\[使用嚴格容錯能力的堆疊集操作有 2 個成功部署和 1 個失敗部署。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-2.png)


![\[使用嚴格容錯能力的堆疊集操作已將實際並行減少至 5，因為現在有一個故障。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-3.png)

**嚴格容錯能力**模式會按比例將實際並行值減少至故障堆疊執行個體數目。在下列範例中，當 StackSets 無法部署 2 個以上的堆疊執行個體時，實際並行值會從 5 減少到 3，讓故障堆疊執行個體總計達到 3。  

![\[使用嚴格容錯能力的堆疊集操作現在有 3 個失敗部署。並行已降至 3。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-4.png)

當故障堆疊執行個體數目等於**容錯能力** \$11 的定義值時，StackSets 無法執行堆疊集操作。在下列範例中，當有 6 個故障堆疊執行個體且**容錯能力**值為 5 時，StackSets 無法執行操作。  

![\[使用嚴格容錯能力的堆疊集操作現在有 6 個失敗部署。堆疊集操作失敗。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-5.png)

在此範例中，CloudFormation 在停止堆疊集操作之前部署了 9 個堆疊執行個體 (3 個成功和 6 個失敗)。

**軟性容錯能力**  
當使用**軟性容錯能力**的堆疊集操作將**容錯能力**設定為 5，並將**並行帳戶數目上限**值設定為 10 時，實際並行值為 10。  

![\[具有軟性容錯能力的堆疊集操作。容錯能力為最多 5 個並行帳戶，實際並行能力為 10 個。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-1.png)

當部署開始且有故障堆疊執行個體時，不會變更實際並行值。在下列範例中，1 個堆疊操作失敗，但實際並行值保持在 10。  

![\[具有軟性容錯能力的堆疊集操作會遇到第一個故障。實際並行維持為 10。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-2.png)

即使再出現 2 個堆疊執行個體故障，實際並行值仍會保持在 10。  

![\[具有軟性容錯能力的堆疊集操作現在有 2 次成功和 3 次失敗，但實際並行仍然為 10 次。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-3.png)

當失敗的堆疊執行個體超過**容錯能力**時，StackSets 無法執行堆疊集操作。在下列範例中，當有 6 個故障堆疊執行個體且**容錯能力**計數為 5 時，StackSets 無法執行操作。但是，並行佇列中的其餘操作完成之前，操作不會結束。  

![\[具有軟性容錯能力的堆疊集操作達到 6 次失敗，但必須完成並行佇列中剩餘的操作。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-4.png)

StackSets 會繼續部署已位於並行佇列中的堆疊執行個體。這意味著故障堆疊執行個體數目可能會高於**容錯能力**。在下列範例中，有 8 個故障堆疊執行個體，因為即使堆疊集操作已達到**容錯能力** 5，並行佇列仍有 7 個要執行的操作。  

![\[堆疊集操作總共有 8 次失敗，因為達到失敗閾值後佇列中還剩下 7 個部署。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-5.png)

在此範例中，StackSets 在停止堆疊操作之前部署了 15 個堆疊執行個體 (7 個成功和 8 個失敗)。

## 根據部署速度，選擇嚴格容錯能力和軟性容錯能力
<a name="concurrency-mode-comparison"></a>

依據您偏好的堆疊集部署速度和許可的部署故障次數，選擇**嚴格容錯能力**和**軟性容錯能力**模式。

下表顯示了每個並行模式如何在嘗試部署共計 1000 個堆疊執行個體時，處理失敗的堆疊集操作。在每個案例中，將**容錯能力**值設定為 100 個堆疊執行個體，並將**並行帳戶數目上限**值設定為 250 個堆疊執行個體。

StackSets 實際上會將帳戶做為滑動視窗排入佇列 (請參閱 [每個並行模式的運作方式](#concurrency-mode-example))，但此範例會按批次形式顯示操作以示範每種模式的速度。

### 嚴格容錯能力
<a name="concurrency-mode-comparison-strict"></a>

此範例使用**嚴格容錯能力**模式，降低相對於每個前述批次中發生之故障次數的實際並行值。每個批次有 20 個故障執行個體，隨後將下列批次的實際並行值降低 20，直至堆疊集操作達到**容錯能力**值為 100 為止。

在下表中，第一個批次的初始實際並行值為 101 個堆疊執行個體。實際並行值為 101，因為該值是**並行帳戶上限**值 (250) 和**容錯能力** (100) \$11 兩者中的較低值。每個批次包含 20 個故障堆疊執行個體部署，這隨後會將每個後續批次的實際並行值減少 20 個堆疊執行個體。


| **嚴格容錯能力** | **第 1 批次** | **第 2 批次** | **第 3 批次** | **第 4 批次** | **第 5 批次** | **第 6 批次** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 實際並行計數 | 101 | 81 | 61 | 4.1 | 21 | - | 
| 故障執行個體計數 | 20 | 20 | 20 | 20 | 20 | - | 
| 成功堆疊執行個體計數 | 81 | 61 | 4.1 | 21 | 1 | - | 

使用**嚴格容錯能力**的操作會在堆疊集操作達到 100 個堆疊執行個體的**容錯能力**時，分 5 個批次完成 305 個堆疊執行個體部署。堆疊集操作會在失敗之前成功部署 205 個堆疊執行個體。

### 軟性容錯能力
<a name="concurrency-mode-comparison-soft"></a>

此範例使用**軟性容錯能力**模式，無論故障執行個體數目為何，都會保持與**並行帳戶數目上限值**定義的實際並行計數相同 (250 個堆疊執行個體)。堆疊集操作會保持與實際並行值相同，直至達到 100 個執行個體的**容錯能力**為止。

在下表中，第一個批次的初始實際並行值為 250 個堆疊執行個體。實際並行值為 250，因為已將**並行帳戶數目上限**值設定為 250，並且**軟性容錯能力**模式允許 StackSets 使用此值做為實際並行值，而無論故障次數為何。即使此範例中的每個批次都有 50 次故障，實際並行值仍不會受到影響。


| **軟性容錯能力** | **第 1 批次** | **第 2 批次** | **第 3 批次** | **第 4 批次** | **第 5 批次** | **第 6 批次** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 實際並行計數 | 250 | 250 | - | - | - | - | 
| 故障執行個體計數 | 50 | 50 | - | - | - | - | 
| 成功堆疊執行個體計數 | 200 | 200 | - | - | - | - | 

使用相同的**並行帳戶數目上限**值和**容錯能力**值時，使用**軟性容錯能力**模式的操作會以 2 個批次完成 500 個堆疊執行個體部署。堆疊集操作會在失敗之前成功部署 400 個堆疊執行個體。

## 選擇並行模式 (主控台)
<a name="concurrency-mode-console"></a>

建立或更新堆疊集時，請在**設定部署選項**頁面的**並行模式**中選擇**嚴格容錯能力**或**軟性容錯能力**。

## 選擇並行模式 (AWS CLI)
<a name="concurrency-mode-cli"></a>

您可使用 `ConcurrencyMode` 參數搭配下列 StackSets 命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/import-stacks-to-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/import-stacks-to-stack-set.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html)

這些命令具有一個稱為 `--operation-preferences` 並且可使用 `ConcurrencyMode` 設定的現有參數。`ConcurrencyMode` 可設定為下列其中一個值：
+ `STRICT_FAILURE_TOLERANCE`
+ `SOFT_FAILURE_TOLERANCE`

下列範例使用 `STRICT_FAILURE_TOLERANCE` `ConcurrencyMode` 建立堆疊執行個體，並將 `FailureToleranceCount` 設定為 10，將 `MaxConcurrentCount` 設定為 5。

```
aws cloudformation create-stack-instances \
  --stack-set-name example-stackset \
  --accounts 123456789012 \
  --regions eu-west-1  \
  --operation-preferences ConcurrencyMode=STRICT_FAILURE_TOLERANCE,FailureToleranceCount=10,MaxConcurrentCount=5
```

**注意**  
如需建立和更新堆疊集的詳細程序，請參閱下列主題：  
[建立 StackSets (自我管理許可)](stacksets-getting-started-create-self-managed.md)
[建立 StackSets (具有服務受管許可)](stacksets-orgs-associate-stackset-with-org.md)
[更新 StackSets](stacksets-update.md)

# 在 CloudFormation StackSets 上執行漂移偵測
<a name="stacksets-drift"></a>

即使您透過 CloudFormation 管理您的堆疊，以及這些堆疊中包含的資源，使用者仍然可以在 CloudFormation 外部變更這些資源。使用者可以使用建立資源的基礎服務來直接編輯資源。藉由在 StackSet 上執行漂移偵測，您可以判斷是否有任何屬於該 StackSet 的堆疊執行個體與其預期組態出現差異 (或是產生了*漂移*)。

**Topics**
+ [CloudFormation 在 StackSet 上執行漂移偵測的方式](#stacksets-drift-how)
+ [偵測 StackSet 上的漂移 (主控台)](#stacksets-drift-console-procedure)
+ [偵測 StackSet 上的漂移 (AWS CLI)](#stacksets-drift-cli-procedure)
+ [停止 StackSet 上的漂移偵測](#stacksets-drift-stop)

## CloudFormation 在 StackSet 上執行漂移偵測的方式
<a name="stacksets-drift-how"></a>

CloudFormation 在 StackSet 上執行漂移偵測時，會在與 StackSet 中每個堆疊執行個體相關聯的堆疊上執行漂移偵測。為了執行此作業，CloudFormation 會將堆疊中每個資源目前的狀態與該資源的預期狀態進行比較，如堆疊範本及任何指定輸入參數所定義。如果資源目前的狀態與預期狀態不同，便會將該資源視為已偏離。如果堆疊中有一或多個資源產生偏離，便會將堆疊本身視為已偏離，且也會將與該堆疊建立關聯的堆疊執行個體視為已偏離。如果堆疊中有一或多個堆疊執行個體產生漂移，也會將 StackSet 本身視為已漂移。

漂移偵測可以識別非受管的變更，即在 CloudFormation 外部對堆疊進行的變更。直接透過 CloudFormation 對堆疊進行的變更，而非在 StackSet 層級進行的變更，則不會視為漂移。例如，假設您有一個與 StackSet 中堆疊執行個體建立關聯的堆疊。如果您使用 CloudFormation 來更新堆疊，以使用不同的範本，這便不會被視為漂移，即使該堆疊現在具備的範本與屬於該 StackSet 的任何其他堆疊不同也一樣。這是因為堆疊仍然與其預期範本和 CloudFormation 中的參數組態相符。

如需 CloudFormation 在堆疊上執行漂移偵測方式的詳細資訊，請參閱 [透過漂移偵測功能，偵測堆疊和資源的未受管組態變更](using-cfn-stack-drift.md)。

因為 CloudFormation 會在每個堆疊上個別執行漂移偵測，其會在判斷堆疊是否漂移時，將任何覆寫的參數值納入考量。如需覆寫堆疊執行個體中範本參數的詳細資訊，請參閱 [覆寫 CloudFormation StackSet 中堆疊的參數值](stackinstances-override.md)。

如果您[直接在與堆疊執行個體建立關聯的堆疊上](using-cfn-stack-drift.md)執行漂移偵測，這些漂移結果便無法從 **StackSets** (堆疊集合) 主控台頁面取得。

## 偵測 StackSet 上的漂移 (主控台)
<a name="stacksets-drift-console-procedure"></a>

**偵測 StackSet 上的漂移**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在 **StackSets** 頁面上，選取您希望執行漂移偵測的 StackSets。

1. 在 **Actions (動作)** 選單中，選取 **Detect drifts (偵測偏離)**。

   CloudFormation 會顯示資訊列，說明已啟動所選 StackSet 的漂移偵測。

1. 選用：監控漂移偵測操作的進度：

   1. 選取 StackSet 名稱，以顯示 **StackSet 詳細資訊**頁面。

   1. 選取 **Operations (操作)** 標籤、選取漂移偵測操作，然後選取 **View drift details (檢視漂移詳細資訊)**。

   CloudFormation 會顯示 **Operation details** (操作詳細資訊) 對話方塊。

1. 等待 CloudFormation 完成漂移偵測操作。當漂移偵測操作完成後，CloudFormation 會更新堆疊的**漂移狀態**和**上次檢查漂移的時間**。這些欄位會列在所選取 StackSet 的 **StackSet 詳細資訊**頁面的**概觀**索引標籤上。

   漂移偵測操作可能會耗費一些時間，這取決於 StackSet 中所包含的堆疊執行個體數，及包含在 StackSet 中的資源數。您在指定 StackSet 上一次只能執行單一漂移偵測操作。即使關閉資訊列，CloudFormation 仍會繼續執行漂移偵測操作。

1. 如要檢閱 StackSet 中堆疊執行個體的漂移偵測結果，請選取**堆疊執行個體**索引標籤。

   **Stack name (堆疊名稱)** 行會列出與每個堆疊執行個體建立關聯的堆疊名稱，**Drift status (偏離狀態)** 行則會列出該堆疊的偏離狀態。如果堆疊的一個或多個資源已偏離，堆疊就視為已偏離。

1. 檢閱與特定堆疊執行個體建立關聯的堆疊漂移偵測結果：

   1. 選擇**操作**子標籤。

   1. 選擇您想要檢視漂移偵測結果的漂移操作。分割面板將顯示堆疊執行個體狀態和所選操作的原因。對於漂移操作，狀態原因欄顯示堆疊執行個體的漂移狀態。

   1. 選擇您想檢視漂移詳細資訊的堆疊執行個體，然後選擇**檢視資源漂移**。在**資源漂移**頁面上，**資源漂移狀態**表單會列出每項堆疊資源及其漂移狀態，以及上次在資源上啟動漂移偵測的時間。每個資源會顯示邏輯 ID 和實體 ID，以協助您識別它們。

1. 您可以根據資源的偏移狀態，使用 **Drift status (偏離狀態)** 欄排序資源。

   檢視已修改過的資源的詳細資訊：

   1. 在選取資源的情況下，選擇**檢視漂移詳細資訊**。

     CloudFormation 會顯示該特定資源的漂移詳細資訊頁面。此頁面列出了資源的差異。其還會列出資源的預期屬性值和目前屬性值。
**注意**  
如果堆疊屬於與您目前登入的區域和帳戶不同的區域和帳戶，**偵測漂移**按鈕將會停用，且您將無法檢視詳細資訊。

## 偵測 StackSet 上的漂移 (AWS CLI)
<a name="stacksets-drift-cli-procedure"></a>

若要使用 偵測整個堆疊上的偏離 AWS CLI，請使用下列程序：

**偵測 StackSet 上的漂移**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html) 命令以偵測整個 StackSet 以及其相關聯堆疊執行個體上的漂移。

   以下範例會在 StackSet `stack-set-drift-example` 上啟動漂移偵測。

   ```
   aws cloudformation detect-stack-set-drift \
       --stack-set-name stack-set-drift-example
   ```

   輸出：

   ```
   {
       "OperationId": "c36e44aa-3a83-411a-b503-cb611example"
   }
   ```

1. 因為 StackSet 漂移偵測操作可能會長時間執行，請使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) 命令來監控漂移操作的狀態。此命令接受由 **detect-stack-set-drift** 命令傳回的 StackSet 操作 ID。

   下列範例會使用先前範例的操作 ID 來傳回 StackSet 漂移偵測操作的資訊。在此範例中，操作仍正在執行。在與 StackSet 建立關聯的七個堆疊執行個體中，已找到一個堆疊執行個體已產生漂移，兩個執行個體正在同步，而其餘四個堆疊執行個體的漂移偵測則仍在進行。由於一個執行個體已產生漂移， StackSet 本身的漂移狀態現在是 `DRIFTED`。

   ```
   aws cloudformation describe-stack-set-operation \
       --stack-set-name stack-set-drift-example \
       --operation-id c36e44aa-3a83-411a-b503-cb611example
   ```

   輸出：

   ```
   {
       "StackSetOperation": {
           "Status": "RUNNING",
           "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
           "OperationPreferences": {
               "RegionOrder": []
           },
           "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
           "StackSetDriftDetectionDetails": {
               "DriftedStackInstancesCount": 1,
               "TotalStackInstancesCount": 7,
               "LastDriftCheckTimestamp": "2019-12-04T20:34:28.543Z",
               "InSyncStackInstancesCount": 2,
               "InProgressStackInstancesCount": 4,
               "DriftStatus": "DRIFTED",
               "FailedStackInstancesCount": 0
           },
           "Action": "DETECT_DRIFT",
           "CreationTimestamp": "2019-12-04T20:33:13.673Z",
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example",
           "OperationId": "c36e44aa-3a83-411a-b503-cb611example"
       }
   }
   ```

   稍後執行相同的命令，此範例便會顯示漂移偵測操作完成後傳回的資訊。與此 StackSet 建立關聯的七個堆疊執行個體中，有兩個已產生漂移，使 StackSet 本身的漂移狀態成為 `DRIFTED`。

   ```
   aws cloudformation describe-stack-set-operation \
       --stack-set-name stack-set-drift-example \
       --operation-id c36e44aa-3a83-411a-b503-cb611example
   ```

   輸出：

   ```
   {
       "StackSetOperation": {
           "Status": "SUCCEEDED",
           "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
           "OperationPreferences": {
               "RegionOrder": []
           } 
           "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
           "EndTimestamp": "2019-12-04T20:37:32.829Z",
           "StackSetDriftDetectionDetails": {
               "DriftedStackInstancesCount": 2,
               "TotalStackInstancesCount": 7,
               "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z",
               "InSyncStackInstancesCount": 5,
               "InProgressStackInstancesCount": 0,
               "DriftStatus": "DRIFTED",
               "FailedStackInstancesCount": 0
           },
           "Action": "DETECT_DRIFT",
           "CreationTimestamp": "2019-12-04T20:33:13.673Z",
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example",
           "OperationId": "c36e44aa-3a83-411a-b503-cb611example"
       }
   }
   ```

1. 完成 StackSet 的漂移偵測操作時，請使用 **describe-stack-set**、**list-stack-instances**、**describe-stack-instance** 和 **list-stack-instance-resource-drifts** 命令來檢閱結果。

   [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set.html) 命令會包含 **describe-stack-set-operation** 命令傳回的相同詳細漂移資訊。

   ```
   aws cloudformation describe-stack-set \
       --stack-set-name stack-set-drift-example
   ```

   輸出：

   ```
   {
       "StackSet": {
           "Status": "ACTIVE",
           "Description": "Demonstration of drift detection on stack sets.",
           "Parameters": [],
           "Tags": [
               {
                   "Value": "Drift detection",
                   "Key": "Feature"
               }
           ], 
           "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
           "Capabilities": [],
           "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
           "StackSetDriftDetectionDetails": {
               "DriftedStackInstancesCount": 2,
               "TotalStackInstancesCount": 7,
               "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z",
               "InProgressStackInstancesCount": 0,
               "DriftStatus": "DRIFTED",
               "DriftDetectionStatus": "COMPLETED",
               "InSyncStackInstancesCount": 5,
               "FailedStackInstancesCount": 0
           },
           "StackSetARN": "arn:aws:cloudformation:us-east-1:123456789012:stackset/stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example",
           "TemplateBody": [details omitted],
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22ebexample",
           "StackSetName": "stack-set-drift-example"
       }
   }
   ```

   您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instances.html) 命令來傳回與 StackSet 建立關聯的堆疊執行個體摘要資訊，包括每個堆疊執行個體的漂移狀態。

   在此範例中，在範例 StackSet 上執行 **list-stack-instances** 並將漂移狀態篩選設為，`DRIFTED`可讓您識別哪兩個堆疊執行個體的漂移狀態為 `DRIFTED`。

   ```
   aws cloudformation list-stack-instances \
       --stack-set-name stack-set-drift-example \
       --filters Name=DRIFT_STATUS,Values=DRIFTED
   ```

   輸出：

   ```
   {
   "Summaries": [
           {
   "StackId": "arn:aws:cloudformation:eu-west-1:123456789012:stack/StackSet-stack-set-drift-example-b0fb6083-60c0-4e39-af15-2f071e0db90c/0e4f0940-16d4-11ea-93d8-0641cexample",
               "Status": "CURRENT",
               "Account": "012345678910",
               "Region": "eu-west-1",
               "LastDriftCheckTimestamp": "2019-12-04T20:37:32.687Z",
               "DriftStatus": "DRIFTED",
               "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample",
               "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example"
           },
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example",
               "Status": "CURRENT",
               "Account": "123456789012",
               "Region": "us-east-1",
               "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z",
               "DriftStatus": "DRIFTED",
               "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample",
               "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example"
           },
           
           [additional stack instances omitted]
    
       ]
   }
   ```

   [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-instance.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-instance.html) 命令也會傳回此資訊，但只會傳回單一堆疊執行個體的資訊，如以下範例所示。

   ```
   aws cloudformation describe-stack-instance \
       --stack-set-name stack-set-drift-example \
       --stack-instance-account 012345678910 --stack-instance-region us-east-1
   ```

   輸出：

   ```
   {
       "StackInstance": {
           "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example",
           "Status": "CURRENT",
           "Account": "123456789012",
           "Region": "us-east-1",
           "ParameterOverrides": [],
           "DriftStatus": "DRIFTED",
           "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z",
           "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample",
           "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example"
       }
   }
   ```

1. 在您識別漂移的堆疊執行個體後，您可以使用 **list-stack-instances** 或 **describe-stack-instance** 命令傳回的堆疊執行個體資訊，來執行 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instance-resource-drifts.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-instance-resource-drifts.html) 命令。此命令會傳回堆疊中已為特定漂移操作產生漂移的資源的詳細資訊。

   以下範例使用 `--stack-instance-resource-drift-statuses` 參數，以請求在上一個漂移操作範例中已修改或已刪除資源的堆疊漂移資訊。該請求傳回已修改的一項資源的相關資訊，包括它的兩項屬性及其更改值的詳細資訊。未刪除任何資源。

   ```
   aws cloudformation list-stack-instance-resource-drifts \
       --stack-set-name my-stack-set-with-resource-drift \
       --stack-instance-account 123456789012 \
       --stack-instance-region us-east-1 \
       --operation-id c36e44aa-3a83-411a-b503-cb611example \
       --stack-instance-resource-drift-statuses MODIFIED DELETED
   ```

   輸出：

   ```
   {
       "Summaries": [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/my-stack-set-with-resource-drift/489e5570-df85-11e7-a7d9-50example",
               "ResourceType": "AWS::SQS::Queue",
               "Timestamp": "2018-03-26T17:23:34.489Z",
               "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/123456789012/my-stack-with-resource-drift-Queue-494PBHCO76H4",
               "StackResourceDriftStatus": "MODIFIED",
               "PropertyDifferences": [
                   {
                       "PropertyPath": "/DelaySeconds",
                       "ActualValue": "120",
                       "ExpectedValue": "20",
                       "DifferenceType": "NOT_EQUAL"
                   },
                   {
                       "PropertyPath": "/RedrivePolicy/maxReceiveCount",
                       "ActualValue": "12",
                       "ExpectedValue": "10",
                       "DifferenceType": "NOT_EQUAL"
                   }
               ],
               "LogicalResourceId": "Queue"
           }
       ]
   }
   ```

## 停止 StackSet 上的漂移偵測
<a name="stacksets-drift-stop"></a>

因為 StackSet 上的漂移偵測操作可能會耗費相當長的時間，有時候您可能會希望停止目前正在 StackSet 上執行的漂移偵測操作。

**在 StackSet 上停止漂移偵測 (主控台)**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在 **StackSets** 頁面上，選取 StackSet 的名稱。

   CloudFormation 會顯示所選取 StackSets 的 **StackSets 詳細資訊**。

1. 在 **StackSets details (堆疊集合詳細資訊)** 頁面上，選取 **Operations (操作)** 標籤，然後選取漂移偵測操作。

1. 選取 **Stop operation (停止操作)**。

**在 StackSet 上停止漂移偵測 (AWS CLI)**
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/stop-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/stop-stack-set-operation.html) 命令。您必須提供 StackSet 名稱和漂移偵測 StackSet 操作的操作 ID。

  ```
  aws cloudformation stop-stack-set-operation \
      --stack-set-name stack-set-drift-example \
      --operation-id 624af370-311a-11e8-b6b7-500cexample
  ```

# 將堆疊匯入 CloudFormation StackSets
<a name="stacksets-import"></a>

堆疊匯入操作可以將現有堆疊匯入新的或現有的 StackSets，以便您可以在一次操作中將現有 StackSets 移轉至堆疊集。

針對*自我管理* StackSets，匯入操作可以在管理員帳戶或不同的目標帳戶和 AWS 區域中匯入堆疊。對於*服務受管 *StackSets，匯入操作可以在 AWS Organizations 與管理帳戶相同的 中匯入任何堆疊。

將堆疊匯入 StackSets 時的考量和限制如下：
+ 匯入操作最多可以使用內嵌堆疊 ID 匯入 10 個堆疊，或使用 Amazon S3 物件匯入最多 200 個堆疊。
+  不支援 `NoEcho` 屬性。包含 `NoEcho` 的堆疊將不會透過 StackSets 匯入匯入到新的堆疊集。
+ StackSet 只能屬於一個 StackSet。
+ 您可以透過在堆疊匯入操作中明確指定標籤作為參數來實作 StackSet 的堆疊標籤。
+ 匯入操作期間不會影響堆疊的自訂參數覆寫。
+ 無法透過**編輯 StackSet 詳細資訊**選項來更新已匯入堆疊執行個體的參數。您必須使用**覆寫 StackSet 參數**。如需覆寫參數的詳細資訊，請參閱 [覆寫堆疊上的參數](stackinstances-override.md)。
+ 匯入堆疊時，StackSets 配額和堆疊執行個體會套用。如需配額的詳細資訊，請參閱 [了解 CloudFormation 配額](cloudformation-limits.md)。

**Topics**
+ [for CloudFormation StackSets 的自我管理堆疊匯入](self-managed-import.md)
+ [for CloudFormation StackSets 的服務受管堆疊匯入](service-managed-import.md)
+ [還原堆疊匯入至 CloudFormation StackSets](revert-stackset-import.md)

# for CloudFormation StackSets 的自我管理堆疊匯入
<a name="self-managed-import"></a>

CloudFormation 堆疊匯入操作可以將現有堆疊匯入新的或現有的 StackSets，以便您可以在一次操作中將現有堆疊移轉至 StackSets。透過使用堆疊匯入，您可以避免停機時間和中斷，而無需刪除和重新建立這些資源。一旦堆疊匯入到 StackSet 中，原始堆疊將成為指定 StackSet 的堆疊執行個體。

**自我管理堆疊匯入的考量事項**
+ 堆疊匯入操作需要您建立 StackSet 所在的管理員帳戶，以及包含堆疊的目標帳戶。
+ 目標帳戶必須具備許可來搭配使用 `GetTemplate` 操作與堆疊 ID 或 ARN 輸入。因此，您的管理員帳戶必須獲得 **AWSCloudFormationStackSetAdministrationRole** 或 **AWSCloudFormationStackSetsExectionRole** 許可。

**Topics**
+ [將現有堆疊匯入新 StackSet (主控台)](#import-stacks-to-stack-set)
+ [將現有堆疊匯入現有 StackSet (主控台)](#import-stack-to-existing-stackset)
+ [將堆疊匯入 StackSet (AWS CLI)](#importing-stack-to-stackset.cli)

## 將現有堆疊匯入新 StackSet (主控台)
<a name="import-stacks-to-stack-set"></a>

開始之前，識別您要匯入的堆疊。

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇 **StackSets**。

1. 選擇 **StackSets** 頁面上方的 **Create StackSet (建立 StackSet)**。

1. 在**選擇範本**頁面上，使用下列其中一個選項指定範本，然後選擇**下一步**。
   + 選擇 **Amazon S3 URL**，然後在文字方塊中為您的範本指定 URL。
   + 選擇 **Upload a template file** (上傳範本檔案)，然後瀏覽您的範本。
   + 選擇 **From stack ID** (通過堆疊 ID)，然後輸入您的堆疊 ID。

1. 在**指定 StackSet 詳細資訊**頁面上，輸入您要建立的堆疊集名稱並選擇**下一步**。

   (選用) 輸入 StackSet 說明。

1. 在**設定 StackSet 選項**頁面上檢閱所需選項，然後選擇**下一步**。

1. 在**設定部署選項**頁面上，選擇**將堆疊匯入堆疊集**。

1. 在 **Stacks to import** (要匯入的堆疊) 欄位中輸入您想要匯入的堆疊的堆疊 ID。例如 `arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786`。

   (選用) 選擇**新增另一個堆疊 ID**，然後輸入您想要匯入的另一個堆疊的堆疊 ID。每個堆疊匯入操作最多可以新增 10 個堆疊。

1. 檢閱您的部署選項，然後選擇**下一步**。

1. 在**檢閱**頁面上，檢閱您的選擇以及 StackSet 的屬性。當您準備好將堆疊匯入堆疊集時，請選擇**提交**。

**結果**：匯入的堆疊現在是指定 StackSet 的堆疊執行個體。要進一步了解堆疊匯入狀態，請參閱 [StackSets 狀態碼](stacksets-concepts.md#stackset-status-codes)。

## 將現有堆疊匯入現有 StackSet (主控台)
<a name="import-stack-to-existing-stackset"></a>

開始之前，識別您要匯入的堆疊。

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇 **StackSets**。

1. 在 **StackSets** 頁面上，選擇您想要匯入堆疊的 StackSet。

1. 選擇 StackSet 後，從**動作**選單選擇**將堆疊新增至 StackSet**。

1. 在**設定部署選項**頁面上，選擇**將堆疊匯入堆疊集**，然後在**要匯入的堆疊**欄位輸入您想要匯入之堆疊的堆疊 ID。例如 `arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786`。

   (選用) 選擇**新增另一個堆疊 ID**，然後輸入您想要匯入的另一個堆疊的堆疊 ID。每個堆疊匯入操作最多可以新增 10 個堆疊。

1. 選擇**下一步**。

1. 在**指定覆寫**頁面上，檢閱您的選擇，然後選擇**下一步**。

1. 在**檢閱**頁面上，檢閱您的選擇以及 StackSet 的屬性。當您準備好建立 StackSet 時，請選擇**提交**。

**結果**：匯入的堆疊現在是指定 StackSet 的堆疊執行個體。要進一步了解堆疊匯入狀態，請參閱 [StackSets 狀態碼](stacksets-concepts.md#stackset-status-codes)。

## 將堆疊匯入 StackSet (AWS CLI)
<a name="importing-stack-to-stackset.cli"></a>

**將現有堆疊匯入新 StackSet**  
下列 `create-stack-set` 命令會建立 StackSet,並匯入指定的堆疊。要匯入的堆疊由其 ARN 識別。以您自己的資訊取代預留位置文字。

```
aws cloudformation create-stack-set \
  --stack-set-name MyStackSet \
  --stack-id arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/466df9e0-0dff-08e3-8e2f-5088487c4896 \
  --administration-role-arn arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole \
  --execution-role-name AWSCloudFormationStackSetExecutionRole
```

**將現有堆疊匯入現有 StackSet**  
下列 `import-stacks-to-stack-sets` 命令會將指定的堆疊匯入 *MyStackSet* StackSet。要匯入的堆疊由其 ARN 識別。以您自己的資訊取代預留位置文字。

```
aws cloudformation import-stacks-to-stack-set \
  --stack-set MyStackSet \
  --stack-ids arn:aws:cloudformation:us-east-1:123456789012:stack/StackToImport/f449b250-b969-11e0-a185-5081d0136786
```

要指定多個堆疊，請針對 `--stack-ids` 選項的值使用下列格式。

```
--stack-ids "arn_1" "arn_2"
```

**將匯入的堆疊複製到其他區域和帳戶**  
執行 `create-stack-instances` 命令，將堆疊執行個體新增至 StackSet。以您自己的資訊取代預留位置文字。

```
aws cloudformation create-stack-instances \
  --stack-set-name MyStackSet \
  --accounts '["account_ID_1","account_ID_2"]' \
  --regions '["region_1","region_2"]'
```

# for CloudFormation StackSets 的服務受管堆疊匯入
<a name="service-managed-import"></a>

CloudFormation 堆疊匯入操作可以將現有堆疊匯入新的或現有的 StackSets，以便您可以在一次操作中將現有堆疊移轉至 StackSets。StackSets 擴充了堆疊功能，讓您可以跨多個帳戶和區域使用單次操作建立、更新或刪除堆疊。

**服務受管堆疊匯入的考量事項**
+ 堆疊匯入操作需要管理帳戶或委派管理員帳戶，您可以在其中管理相關聯的 ， AWS Organizations 例如使用 StackSets 啟用信任存取。
+ 目標帳戶必須是管理帳戶或委派管理員帳戶 AWS Organizations 所管理 的成員。
+ 目標堆疊會在其中一個目標 OU 中存在。
+ 目標帳戶應為 的成員 AWS Organizations。
+ AWS Organizations 存取權應處於 Organizations `ACTIVATED`的狀態。
+ 匯入的堆疊應該出現在任何成員帳戶中，而不是管理帳戶中。

**Topics**
+ [將服務受管堆疊匯入新的 StackSet (主控台)](#import-service-managed-stack-to-new-stackset)
+ [建立服務受管堆疊並將其匯入現有 StackSet (主控台)](#import-service-managed-stack-to-existing-stackset)
+ [將服務受管堆疊匯入現有 StackSet (主控台)](#import-service-managed-stack-to-existing-stackset-console)
+ [將服務受管堆疊匯入 StackSet (AWS CLI)](#import-service-managed-stack-to-stackset.cli)

## 將服務受管堆疊匯入新的 StackSet (主控台)
<a name="import-service-managed-stack-to-new-stackset"></a>

使用 將堆疊匯入新的 StackSet AWS 管理主控台

若要將新堆疊匯入 StackSet，請識別包含要匯入之資源的堆疊。

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇 **StackSets**。

1. 選擇 **StackSets** 頁面上方的 **Create StackSet (建立 StackSet)**。

1. 在**選擇客群**頁面上，執行下列動作：

   1. 對於 **StackSet 許可模型**，選擇**服務受管許可**。

   1. 針對**先決條件 - 準備範本**，選擇**範本已就緒**，然後使用下列選項之一選擇您的範本：
      + 對於 **Amazon S3 URL**，可在 Amazon S3 URL 欄位中輸入您的 **Amazon S3 URL**。
      + 對於**上傳範本檔案**，選擇本機電腦上的 CloudFormation 範本。

   接受您的設定並選擇 **Next** (下一步)。

1. 在**指定堆疊詳細資訊**頁面上，執行下列操作：

   1. 在 **StackSet 名稱**方塊中輸入 StackSet 名稱。

   1. (選用) 在 **StackSet description** (StackSet 描述) 區段中輸入描述。

   在**設定 StackSet 選項**頁面上檢閱所需選項，然後選擇**下一步**。

1. 在**設定部署選項**頁面上進行以下操作：

   1. 對於**將堆疊新增至堆疊集**，選擇**將堆疊匯入堆疊集**。

   1. 對於 **Stacks to import** (要匯入的堆疊)，選擇您的堆疊匯入方法。

      1. 對於 **Stack ID** (堆疊 ID)，輸入您的堆疊 ID。

      1. 對於**堆疊 URL**，輸入 Amazon S3 URL。

1. 在**相關單位單位**下，執行以下操作：

   1. 選擇**與組織關聯**，以使用根 OU。

   1. 選擇**與組織單位關聯**，以輸入要匯入之堆疊的父 OU ID。例如，如果 `Stack 1` 和 `Stack 2` 在 `OU1` 下方，並且 `Stack 3` 在 `OU2` 下方，則輸入 `OU1` 和 `OU2`。

   接受您的設定並選擇 **Next** (下一步)。

1. 在 **Review** (檢閱) 頁面上，檢閱您的設定，然後選擇 **Submit** (提交)。

## 建立服務受管堆疊並將其匯入現有 StackSet (主控台)
<a name="import-service-managed-stack-to-existing-stackset"></a>

若要將現有堆疊匯入新的 StackSet，請識別包含您要匯入之資源的堆疊。

**建立 StackSet 和匯入堆疊**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇 **StackSets**。

1. 選擇 **StackSets** 頁面上方的 **Create StackSet (建立 StackSet)**。

1. 在**選擇客群**頁面上，執行下列動作：

   1. 對於 **StackSet 許可模型**，選擇**服務受管許可**。

   1. 針對**先決條件 - 準備範本**，選擇**範本已就緒**，然後使用下列選項之一選擇您的範本：
      + 對於 **Amazon S3 URL**，可在 Amazon S3 URL 欄位中輸入您的 **Amazon S3 URL**。
      + 對於**上傳範本檔案**，選擇本機電腦上的 CloudFormation 範本。

   接受您的設定並選擇 **Next** (下一步)。

1. 在**指定堆疊詳細資訊**頁面上，執行下列操作：

   1. 在 **StackSet 名稱**方塊中輸入 StackSet 名稱。

   1. (選用) 在 **StackSet description** (StackSet 描述) 區段中輸入描述。

   在**設定 StackSet 選項**頁面上檢閱所需選項，然後選擇**下一步**。

1. 在**設定部署選項**頁面上進行以下操作：

   1. 在 **Add stacks to stack set** (將堆疊新增至堆疊集) 中，選擇 **Deploy new stacks** (部署新堆疊)。

1. 對於**關聯組織單位**區段，執行以下操作：

   1. 選擇**與組織關聯**，以使用根 OU。

   1. 選擇**與組織單位關聯**，以輸入要匯入之堆疊的父 OU ID。例如，如果 `Stack 1` 和 `Stack 2` 在 `OU1` 下方，並且 `Stack 3` 在 `OU2` 下方，則輸入 `OU1` 和 `OU2`。

1. 對於 **Specify regions** (指定區域) 和 **Deployment options** (部署選項)，檢視您的選擇。

   接受您的設定並選擇 **Next** (下一步)。

1. 在 **Review** (檢閱) 頁面上，檢閱您的設定，然後選擇 **Submit** (提交)。

## 將服務受管堆疊匯入現有 StackSet (主控台)
<a name="import-service-managed-stack-to-existing-stackset-console"></a>

選擇 StackSet 並識別您要匯入的堆疊。

**將堆疊匯入現有 StackSet**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇 **StackSets**。

1. 選擇要匯入堆疊的 StackSet，然後從**動作**下拉式清單中選擇**將堆疊新增至 StackSet**。

1. 在**設定部署選項**頁面上進行以下操作：

   1. 對於**將堆疊新增至堆疊集**，選擇**將堆疊匯入堆疊集**。

   1. 在**要匯入的 Stacks** 下方，執行下列動作

      1. 對於 **Stack ID** (堆疊 ID)，輸入您的堆疊 ID。

      1. 對於**堆疊 URL**，輸入 Amazon S3 URL。

   1. 在**相關單位單位**下，執行以下操作：

      1. 選擇**與組織關聯**，以使用根 OU。

      1. 選擇**與組織單位關聯**，以輸入要匯入之堆疊的父 OU ID。例如，如果 `Stack 1` 和 `Stack 2` 在 `OU1` 下方，並且 `Stack 3` 在 `OU2` 下方，則輸入 `OU1` 和 `OU2`。

      接受您的設定並選擇 **Next** (下一步)。

1. 檢閱 **Specify overrides** (指定覆寫) 頁面，然後選擇 **Next** (下一步)。

1. 確認並檢閱 **Review** (檢閱) 頁面並選擇 **Submit** (提交)。

## 將服務受管堆疊匯入 StackSet (AWS CLI)
<a name="import-service-managed-stack-to-stackset.cli"></a>

建立 StackSet 後，您可以透過傳遞所匯入堆疊的堆疊 ID 來匯入堆疊。您也可以將 OU ID 清單傳遞至您要映射的 OU ID 清單。

CloudFormation 會在這些 OU 中匯入使用者提供的堆疊，並使用這些 OU 作為 StackSet 的部署目標。輸入中顯示的堆疊 ID 會對應至內部 OU ID 清單輸入中最接近的 OU。如果堆疊不屬於輸入清單中現有的 OU ID，則 AWS CLI 會傳回`StackNotFoundException`錯誤。

`import-stacks-to-stack-set` 操作可為 OU ID 輸入中的堆疊建立堆疊執行個體。下列 AWS CLI 範例使用 `import-stacks-to-stack-set`操作將堆疊匯入 StackSet。
+ 若要使用 `import-stacks-to-stack-sets` 操作，請指定您想匯入到堆疊集的 `stack-ids` 或 `stack-ids-url`。

  ```
  aws cloudformation import-stacks-to-stack-set \
    --stack-set-name ServiceMangedStackSet \
    --stack-ids "arn:123456789012:us-east-1:Stack1" \
    --organizational-unit-ids ou-examplerootid111-exampleouid111
  ```

  ```
  aws cloudformation import-stacks-to-stack-set \
    --stack-set-name ServiceMangedStackSet \
    --stack-ids-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/file-name.json \
    --organizational-unit-ids ou-examplerootid111-exampleouid111
  ```

**注意**  
`import-stacks-to-stack-sets` 操作會要求您至少指定一個組織單位 ID (OU ID)，以便將匯入的堆疊與該特定 OU 建立關聯。此操作不會為關聯 OU 中的其他成員帳戶建立堆疊執行個體。若要更新關聯 OU 的成員帳戶，請使用 `create-stack-instances` 或 `update-stack-instances`。

`create-stack-set` 利用使用者提供的範本 (無論是直接上傳或來自 Amazon S3)，為 OU 下的所有帳戶建立堆疊執行個體。下列 AWS CLI 範例使用 `create-stack-set`操作將堆疊匯入新的 StackSet。
+ 若要使用 `create-stack-set` 操作，請指定您的 StackSet 名稱，並將堆疊匯入新建立的 StackSet。

  ```
  aws cloudformation create-stack-set \
    --template-url https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/file-name.json \
    --permission-model SERVICE_MANAGED \
    --auto-deployment Enabled=true
  ```

# 還原堆疊匯入至 CloudFormation StackSets
<a name="revert-stackset-import"></a>

若堆疊執行個體中出現非預期的變更，您可以還原堆疊執行個體匯入。

還原堆疊執行個體匯入時，CloudFormation 會從 StackSet 中刪除該堆疊執行個體，但會保留堆疊的資源。

若要還原堆疊匯入操作，請完成以下程序：

1. 為想要在刪除堆疊執行個體後要保留的每個資源指定 `Retain` 的 `DeletionPolicy` 屬性。如需詳細資訊，請參閱[還原匯入操作](resource-import-revert.md)。

1. 從 StackSet 刪除堆疊執行個體。如需詳細資訊，請參閱[從 CloudFormation StackSets 刪除堆疊](stackinstances-delete.md)。

1. 刪除您的 StackSet。如需詳細資訊，請參閱[Delete CloudFormation StackSets](stacksets-delete.md)。

# 使用 CloudFormation StackSets 的最佳實務
<a name="stacksets-bestpractices"></a>

本節描述定義 StackSet 範本、建立或新增堆疊至 StackSet，或更新 StackSet 的最佳實務。

若您是 CloudFormation 新手，請檢閱 [CloudFormation 最佳實務](best-practices.md) 主題，以取得更多建議，協助您更有效且安全地使用 CloudFormation。

**Topics**
+ [定義範本](#w2aac15c41b9)
+ [建立或將堆疊新增至 StackSet](#w2aac15c41c11)
+ [更新 StackSet 中的堆疊](#w2aac15c41c13)

## 定義範本
<a name="w2aac15c41b9"></a>
+ 定義您希望在多個區域內多個帳戶中標準化的範本。
+ 當您建立範本時，請確認在相同帳戶內超過一個以上的區域中建立全域資源 (例如 IAM 角色和 Amazon S3 儲存貯體) 時沒有發生命名衝突。
+ StackSet 具有一個單一範本及參數組。與 StackSet 關聯的所有帳戶內都會建立堆疊。當您編寫範本時，請讓其維持適當的精細程度，以在控制和標準化間取得良好的平衡。
+ 我們建議您將您的範本存放在 Amazon S3 儲存貯體中。

## 建立或將堆疊新增至 StackSet
<a name="w2aac15c41c11"></a>
+ 請在將大量的堆疊執行個體新增至您的 StackSet 前，先確認新增堆疊執行個體至您的初始 StackSet 可正常運作。
+ 選擇適合您使用案例的部署 (推出) 選項。
  + 如需進行較保守的部署，請將 **Maximum Concurrent Accounts (最大同時帳戶數)** 設為 1，並將 **Failure Tolerance (容錯能力)** 設為 0。將您的最低影響區域設為 **Region Order (區域順序)** 清單中的第一位。從使用一個區域開始。
  + 如需進行較快速的部署，請視需要增加 **Maximum Concurrent Accounts (最大同時帳戶數)** 及 **Failure Tolerance (容錯能力)** 的值。
+ StackSets 上的操作取決於涉及的堆疊執行個體數，並且可能會耗費大量的時間。

## 更新 StackSet 中的堆疊
<a name="w2aac15c41c13"></a>
+ 在預設情況下，更新 StackSet 會更新所有堆疊執行個體。若您在兩個區域中分別具有 20 個帳戶，您便擁有 40 個堆疊執行個體，並且所有的堆疊執行個體都會在您更新 StackSet 時更新。

  對於含有大量堆疊執行個體的 StackSets，若要測試更新版本的範本，我們建議先選擇性地在幾個測試帳戶中更新堆疊執行個體，再更新所有堆疊執行個體。
+ 若要在更新 StackSet 內的個別堆疊時進行更細微的控制，請規劃建立多個 StackSets。
+ 更新包含大量堆疊的 StackSet 可能需要耗費大量的時間。在此版本中，一個 StackSet 上一次只能進行一項操作。計劃您的更新，以免您無法在 StackSet 上執行其他操作。

# CloudFormation StackSets 範本範例
<a name="stacksets-sampletemplates"></a>

本節所涵蓋的部分範例 CloudFormation 範本連結，有助於您在企業中善用 CloudFormation StackSets。本節列出的範本可支援 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 或 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 及其所包含的規則。

**重要**  
作為允許 AWS Config 存取 Amazon S3 儲存貯體的安全最佳實務，強烈建議您使用 `AWS:SourceAccount`條件限制儲存貯體政策中的存取。新範本會更新為具有 `AWS:SourceAccount`。如果您現有的儲存貯體政策未遵循此安全最佳作法，強烈建議您編輯該儲存貯體政策以納入此保護。這可確保 AWS Config 僅代表預期的使用者授予存取權。


| Description | S3 連結 | 
| --- | --- | 
| 啟用 AWS CloudTrail | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml) | 
| 啟用 AWS Config | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml) | 
|  AWS Config 使用中央記錄啟用 | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfigForOrganizations.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfigForOrganizations.yml) | 
| 跨 AWS 組織或特定 AWS 帳戶啟用 Amazon Data Lifecycle Manager 預設政策 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/stacksets-sampletemplates.html) [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml) | 
| 設定 AWS Config 規則以判斷 CloudTrail 是否已啟用 | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleCloudtrailEnabled.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleCloudtrailEnabled.yml) | 
| 設定 AWS Config 規則以判斷是否已啟用根 MFA | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleRootAccountMFAEnabled.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleRootAccountMFAEnabled.yml) | 
| 設定 AWS Config 規則以判斷是否已連接 EIPs  | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEipAttached.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEipAttached.yml) | 
| 設定 AWS Config 規則以判斷 EBS 磁碟區是否已加密 | [https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/ConfigRuleEncryptedVolumes.yml) | 

# 疑難排解 CloudFormation StackSets
<a name="stacksets-troubleshooting"></a>

本主題涵蓋部分常見的 StackSets 問題，以及這些問題的建議解決方案。

**Topics**
+ [堆疊操作失敗的常見原因](#common-reasons-for-stack-operation-failure)
+ [重試失敗的堆疊建立或更新操作](#retrying-failed-stack-creation-or-update-operations)
+ [堆疊執行個體刪除失敗](#stack-instance-delete-fails)
+ [堆疊匯入操作失敗](#stack-import-fails)
+ [StackSets 操作的堆疊執行個體失敗計數](#stack-instance-failure-count-for-stackset-operations)

## 堆疊操作失敗的常見原因
<a name="common-reasons-for-stack-operation-failure"></a>

**問題：**堆疊操作失敗，且堆疊執行個體的狀態為 `OUTDATED`。

**原因：**堆疊操作失敗可能有幾種常見原因。
+ 目標帳戶沒有足夠的許可，無法建立範本中指定的資源。
+ CloudFormation 範本可能有錯誤。在建立 StackSet 之前，請驗證 CloudFormation 中的範本並修正錯誤。
+ 範本正在嘗試建立的全域資源 (如 S3 儲存貯體) 必須獨一無二，但該資源已存在。
+ 指定的目標帳戶號碼並不存在；請檢查您在精靈的 **Set deployment options (設定部署選項)** 頁面中所指定之目標帳戶號碼。
+ 管理員帳戶與目標帳戶沒有信任關係。
+ 目標帳戶中的資源已達範本所指定的最大數量。舉例來說，目標帳戶可能已達到 IAM 角色數量的上限，但範本仍持續建立更多 IAM 角色。
+ StackSet 中允許的堆疊數已達到上限，如需每個 StackSet 的堆疊數目上限，請參閱 [了解 CloudFormation 配額](cloudformation-limits.md)。

**解決方案：** 如需詳細資訊，以了解建立 StackSets 前目標與管理員帳戶要具備的許可，請參閱 [為管理員帳戶的所有使用者提供可以在所有目標帳戶中管理堆疊的許可](stacksets-prereqs-self-managed.md#stacksets-prereqs-accountsetup) 小節。

## 重試失敗的堆疊建立或更新操作
<a name="retrying-failed-stack-creation-or-update-operations"></a>

**問題：**堆疊建立或更新失敗，且堆疊執行個體的狀態為 `OUTDATED`。若要對堆疊建立或更新失敗的原因進行故障診斷，請開啟 CloudFormation 主控台以檢視堆疊事件；在建立操作失敗的情況下，這些事件的狀態將為 `DELETED`，而在更新操作失敗的情況下，則會顯示 `FAILED` 狀態。請瀏覽堆疊事件，並找到 **Status reason (狀態原因)** 欄。透過 **Status reason (狀態原因)** 的數值，即可掌握堆疊操作失敗的原因。

若您將堆疊建立失敗的潛在原因修正完成，且準備好重試堆疊建立操作，則請執行下列步驟。

**解決方案：**執行下列步驟，進而重試堆疊操作。

1. 在主控台中，選取包含操作失敗堆疊的 StackSet。

1. 在 **Actions (動作)** 選單中，選擇 **Edit StackSet details (編輯 StackSet 詳細資訊)** 重試建立或更新堆疊。

1. 若要在**指定範本**頁面上使用相同的 CloudFormation 範本，請保留預設選項**使用目前的範本**。如果是因範本需要變更而導致堆疊操作失敗，且您想上傳修訂的範本，則請改為選擇 **Upload a template to Amazon S3 (將範本上傳到 Amazon S3)**，接著選擇 **Browse (瀏覽)** 並選取更新後的範本。完成修訂範本上傳作業時，選擇 **Next (下一步)**。

1. 若您沒有要在**指定堆疊詳細資訊** 頁面上變更任何範本特定的參數，請選擇**下一步**。

1. 在**設定部署選項**頁面上，您可以視需要變更**並行帳戶數目上限**和**容錯能力**的預設值。如需這些設定的詳細資訊，請參閱 [StackSet 操作選項](stacksets-concepts.md#stackset-ops-options)。

1. 在 **Review (檢閱)** 頁面上，檢視您的選項並勾選核取方塊，藉此確認所需的 IAM 功能。選擇**提交**。

1. 如果無法成功更新堆疊，請先解決任何阻礙堆疊建立的潛在原因，然後重複此程序。

## 堆疊執行個體刪除失敗
<a name="stack-instance-delete-fails"></a>

**問題：**無法刪除堆疊。

**原因：**如果任何堆疊啟用終止保護，將無法刪除該堆疊。

**解決方案：**請判斷堆疊是否啟用終止保護。如果堆疊已啟用終止保護，請先停用該功能，然後再次刪除堆疊執行個體。

## 堆疊匯入操作失敗
<a name="stack-import-fails"></a>

**問題：**堆疊匯入操作無法將現有堆疊匯入新的或現有的 StackSets。堆疊執行個體處於 `INOPERABLE` 狀態。

**解決方案：**完成下列任務，還原堆疊匯入操作。

1. 在設定期間使用**從 StackSets 刪除堆疊**選項並啟用 **RetaInstacks**，然後繼續刪除 StackSet 中的堆疊執行個體。如需詳細資訊，請參閱 [從 CloudFormation StackSets 刪除堆疊](stackinstances-delete.md)。

1. 您將看到 Stackset 的堆疊執行個體已更新，以便刪除 `INOPERABLE` 堆疊執行個體。

1. 根據匯入失敗錯誤修正堆疊執行個體，然後重試堆疊匯入操作。

## StackSets 操作的堆疊執行個體失敗計數
<a name="stack-instance-failure-count-for-stackset-operations"></a>

堆疊執行個體失敗計數會在堆疊執行個體無法佈建或更新時提醒您。由於以下一個或多個原因，導致這些堆疊執行個體並未部署：
+ 現有資源具備類似組態
+ 缺少相依性，例如 AWS Identity and Access Management (IAM) 角色
+ 其他衝突因素

如果您要使用並行數目上限進行部署，並行計數上限最多會比故障容錯計數多一。例如，如果容錯計數為 9，則最大並行計數不能超過 10。這樣一來，即使某些堆疊執行個體無法更新，操作仍會傳回 `SUCCEEDED`。新的堆疊執行個體失敗計數可讓您判斷操作是否僅因容錯計數設定為允許所有失敗而有條件地成功。

您可以使用 AWS 管理主控台、 AWS SDK 或 AWS CLI 取得故障計數並篩選堆疊執行個體，以判斷需要重新部署哪些執行個體。

### 使用主控台
<a name="stack-instance-failure-count-for-stackset-operations-console-examples"></a>

**檢視失敗的堆疊執行個體數：**

1. 開啟 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation)，然後選擇 **StackSet**。

1. 選擇您的 StackSet，然後選擇 **Operations** (操作) 索引標籤。

1. 選擇 **Status** (狀態) 資料欄中的狀態，以檢視狀態的詳細資訊。您可以在狀態詳細資訊中找到特定操作的失敗堆疊執行個體數目。

**檢視操作的堆疊執行個體的帳戶、區域和狀態：**

1. 在狀態詳細資訊中，選擇失敗的堆疊執行個體計數。*範例：***Stack instances (堆疊執行個體)：`<number of failed stack instances>`**。

1. 選擇面板標頭，展開側邊面板。側邊面板中的結果是選取的操作完成後堆疊執行個體的狀態。

**檢視操作的目前堆疊執行個體詳細資訊：**

1. 選擇 **Stack Instances** (堆疊執行個體) 索引標籤。

1. 依 **Last operation ID** (上次操作 ID) 篩選。結果是上次修改執行個體的操作的目前狀態和狀態原因。您可以將此篩選條件與 **AWS 帳戶**、**AWS 區域**、**詳細狀態**和**漂移狀態**合併使用，以取得更精確的搜尋結果。

### 使用 AWS CLI
<a name="stack-instance-failure-count-for-stackset-operations-cli-examples"></a>

若要取得失敗的堆疊執行個體數量，請呼叫 `describe-stack-set-operation` 或 `list-stack-set-operations` 並查看 `StatusDetails`。

```
aws cloudformation describe-stack-set-operation --stack-set-name ss1 \
    --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60
```

```
{
    "StackSetOperation": {
        "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60",
        "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
        "Action": "CREATE",
        "Status": "SUCCEEDED",
        "OperationPreferences": {
            "RegionOrder": [],
            "FailureToleranceCount": 10,
            "MaxConcurrentCount": 10
        },
        "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole",
        "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole",
        "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00",
        "EndTimestamp": "2022-10-26T17:19:35.304000+00:00",
        "StatusDetails": {
            "FailedStackInstancesCount": 3
        }
    }
}
```

```
aws cloudformation list-stack-set-operations --stack-set-name ss1
```

```
{
    "Summaries": [
        {
            "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60",
            "Action": "CREATE",
            "Status": "SUCCEEDED",
            "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00",
            "EndTimestamp": "2022-10-26T17:19:35.304000+00:00",
            "StatusDetails": {
                "FailedStackInstancesCount": 3
            },
            "OperationPreferences": {
                "RegionOrder": [],
                "FailureToleranceCount": 10,
                "MaxConcurrentCount": 10
            }
        }
    ]
}
```

若要取得特定操作的歷史概觀，請使用 `list-stack-set-operation-results` 檢視操作完成後每個堆疊執行個體的狀態和狀態原因。請見以下範例，找出 `Status` 和 `StatusReason`：

```
aws cloudformation list-stack-set-operation-results --stack-set-name ss1 \
  --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60 --filters Name=OPERATION_RESULT_STATUS,Values=FAILED
```

```
{
    "Summaries": [
        {
            "Account": "123456789012",
            "Region": "us-west-2",
            "Status": "FAILED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "AccountGateResult": {
                "Status": "SKIPPED",
                "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'."
            },
            "OrganizationalUnitId": ""
        },
        {
            "Account": "123456789012",
            "Region": "us-west-1",
            "Status": "FAILED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "AccountGateResult": {
                "Status": "SKIPPED",
                "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'."
            },
            "OrganizationalUnitId": ""
        },
        {
            "Account": "123456789012",
            "Region": "us-east-1",
            "Status": "FAILED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "AccountGateResult": {
                "Status": "SKIPPED",
                "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'."
            },
            "OrganizationalUnitId": ""
        }
    ]
}
```

使用 `list-stack-instances` 搭配 `DETAILED_STATUS` 和 `LAST_OPERATION_ID` 篩選條件，取得上次嘗試部署堆疊執行個體的操作中失敗的堆疊執行個體清單。請見範例中的 `--filters` 標記具有 `DETAILED_STATUS` 和 `LAST_OPERATION_ID`：

```
aws cloudformation list-stack-instances --stack-set-name ss1 \
  --filters Name=DETAILED_STATUS,Values=FAILED Name=LAST_OPERATION_ID,Values=5550e62f-c822-4331-88fa-21c1d7bafc60
```

```
{
    "Summaries": [
        {
            "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
            "Region": "us-east-1",
            "Account": "123456789012",
            "Status": "OUTDATED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "StackInstanceStatus": {
                "DetailedStatus": "FAILED"
            },
            "OrganizationalUnitId": "",
            "DriftStatus": "NOT_CHECKED",
            "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
        },
        {
            "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
            "Region": "us-west-1",
            "Account": "123456789012",
            "Status": "OUTDATED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "StackInstanceStatus": {
                "DetailedStatus": "FAILED"
            },
            "OrganizationalUnitId": "",
            "DriftStatus": "NOT_CHECKED",
            "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
        },
        {
            "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
            "Region": "us-west-2",
            "Account": "123456789012",
            "Status": "OUTDATED",
            "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
            "StackInstanceStatus": {
                "DetailedStatus": "FAILED"
            },
            "OrganizationalUnitId": "",
            "DriftStatus": "NOT_CHECKED",
            "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
        }
    ]
}
```

若要尋找上次修改堆疊執行個體的操作 ID，請使用 `list-stack-instances` 或 `describe-stack-instance` 來取得 `LastOperationId`：

```
aws cloudformation describe-stack-instance --stack-set-name ss1 \
  --stack-instance-account 123456789012 --stack-instance-region us-east-2
```

```
{
    "StackInstance": {
        "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f",
        "Region": "us-west-2",
        "Account": "123456789012",
        "ParameterOverrides": [],
        "Status": "OUTDATED",
        "StackInstanceStatus": {
            "DetailedStatus": "FAILED"
        },
        "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.",
        "OrganizationalUnitId": "",
        "DriftStatus": "NOT_CHECKED",
        "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60"
    }
}
```