部署堆疊 (部分機器翻譯)
Azure 部署堆疊是一項資源,可讓您將一組 Azure 資源當作單一的整合單位來管理。 當您將 Bicep 檔案或 ARM JSON 範本提交至部署堆疊,便會定義堆疊所管理的資源。 如果移除了先前包含在範本中的資源,則會根據部署堆疊指定的 actionOnUnmanage 行為將其中斷連結或刪除。 可以使用 Azure 角色型存取控制 (Azure RBAC) 限制對部署堆疊的存取,類似於其他 Azure 資源。
若要建立與更新部署堆疊,可以搭配 Bicep 檔案使用 Azure CLI、Azure PowerShell 或 Azure 入口網站。 Bicep 檔案會轉換為 ARM JSON 範本,然後由堆疊部署為部署物件。 除了熟悉的部署資源,部署堆疊也做為超集提供其他功能。
部署堆疊的資源類型為 Microsoft.Resources/deploymentStacks
, 包含一個主要範本,可針對其描述的資源跨範圍執行一對多更新,並阻止對資源進行非必要的變更。
規劃部署並判斷應將哪些資源群組納入同一堆疊時,請務必考慮資源的管理生命週期,包括建立、更新和刪除。 例如,假設您需要為不同資源群組範圍的多個應用程式小組佈建一些測試虛擬機器 (VM)。 在此案例中,可以使用部署堆疊建立測試環境,並透過部署堆疊的後續更新來更新測試虛擬機器設定。 專案完成後,可能必須移除或刪除所建立的任何資源,例如測試 VM。 透過使用部署堆疊,可指定適合的刪除旗標,輕鬆移除受控資源。 這種方法僅須針對堆疊資源進行一次更新,不必在不同資源群組範圍中逐個修改或移除測試虛擬機器,因此過程更加簡便,並能縮短環境清除的時間。
部署堆疊需要 Azure PowerShell 版本 12.0.0 或更新版本或 Azure CLI 版本 2.61.0 或更新版本。
若要建立您的第一個部署堆疊,請參閱快速入門:建立部署堆疊。
為何要使用部署堆疊?
部署堆疊可提供下列優勢:
- 以整合實體形式,將不同範圍資源的佈建與管理簡化。
- 透過拒絕設定防止對受控資源的不必要修改。
- 在部署堆疊更新期間,使用刪除旗標有效執行環境清除作業。
- 針對部署堆疊使用 Bicep、ARM 範本或範本規格等標準範本。
已知的限制
- 隱含建立的資源不受部署堆疊管理。 因此,無法進行拒絕指派或清除。
- 拒絕指派不支援標記。
- 拒絕指派在管理群組範圍不受支援。 不過,如果部署指向訂用帳戶範圍,則會在管理群組堆疊中支援。
- 部署堆疊無法刪除金鑰保存庫袐密。 如果您要從範本移除金鑰保存庫袐密,請務必也以中斷連結模式執行部署堆疊更新/刪除命令。
已知問題
- 刪除資源群組目前會略過拒絕指派。 在資源群組範圍中建立部署堆疊時,Bicep 檔案不會包含資源群組的定義。 即使具有拒絕指派設定,仍然可以刪除資源群組和其包含的堆疊。 然而,若群組內任一資源遭到鎖定,刪除作業將會失敗。
- 目前尚未提供假設狀況支援。
- 管理群組範圍的堆疊受限於部署到另一個管理群組。 其只能部署到堆疊本身的管理群組或子訂用帳戶。
- PowerShell 命令 help 會列出
ActionOnUnmanage
參數的DeleteResourcesAndResourcesGroups
值。 使用此值時,命令會中斷連結受控資源和資源群組。 在下一個更新中將會移除此值。 請勿使用此值。 - 在某些情況下,Azure PowerShell 的 New 和 Set Cmdlet 可能會傳回無法明確採取行動的泛型範本驗證錯誤。 在下一個版本中會修正此錯誤,但目前,如果錯誤不清楚,您可以在偵錯模式中執行 Cmdlet 以在原始回應中查看更詳細的錯誤。
- Microsoft Graph 提供者不支援部署堆疊。
內建角色
警告
RBAC 權限 Microsoft.Resources/deploymentStacks/manageDenySetting/action 的強制執行正於跨區域推出,包括政府雲端。
部署堆疊有兩個內建角色:
- Azure 部署堆疊參與者:允許使用者管理部署堆疊,但無法在部署堆疊內建立或刪除拒絕指派。
- Azure 部署堆疊擁有者:允許使用者管理部署堆疊,包括具有拒絕指派的部署堆疊。
建立部署堆疊
您可以在資源群組、訂用帳戶,或管理群組範圍內建立部署堆疊資源。 傳入部署堆疊的範本會在指定的範本部署目標範圍中,定義所要建立或更新的資源。
- 資源群組範圍內的堆疊可將傳入的範本,部署至部署堆疊所在的同一個資源群組範圍。
- 訂用帳戶範圍內的堆疊可將傳入的範本,部署至指定的資源群組範圍,或部署堆疊所在的同一個訂用帳戶群組範圍。
- 管理群組範圍內的堆疊可將傳入的範本,部署至指定的訂用帳戶範圍。
請務必注意,部署堆疊的所在位置,必定存在利用拒絕設定功能建立的拒絕指派。 例如,藉由在訂用帳戶範圍內,建立用於將範本部署至資源群組範圍的部署堆疊,且拒絕設定模式為 DenyDelete
,便能輕鬆將受控資源佈建至指定的資源群組,並封鎖對這些資源的刪除嘗試。 您也可以利用此方法將部署堆疊隔離於訂用帳戶層級,而非資源群組層級,藉此加強安全性。 如此一來,可確保使用已佈建資源的開發人員小組僅擁有對資源群組的可見度與寫入權限,而部署堆疊會隔離於更高層級。 這種方法可大幅減少具部署堆疊編輯權限,且能變更其拒絕指派的使用者數量。 如需詳細資訊,請參閱保護受控資源免於遭到刪除。
也可使用 create-stack 命令以更新部署堆疊。
若要在資源群組範圍內建立部署堆疊:
New-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
若要在訂用帳戶範圍內建立部署堆疊:
New-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentResourceGroupName "<resource-group-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
DeploymentResourceGroupName
參數可指定用於儲存受控資源的資源群組。 若未指定參數,受控資源會儲存於訂用帳戶範圍內。
若要在管理群組範圍內建立部署堆疊:
New-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentSubscriptionId "<subscription-id>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
deploymentSubscriptionId
參數可指定用於儲存受控資源的訂用帳戶。 若未指定參數,受控資源會儲存於管理群組範圍內。
列出部署堆疊
若要在資源群組範圍內列出部署堆疊資源:
Get-AzResourceGroupDeploymentStack `
-ResourceGroupName "<resource-group-name>"
若要在訂用帳戶範圍內列出部署堆疊資源:
Get-AzSubscriptionDeploymentStack
若要在管理群組範圍內列出部署堆疊資源:
Get-AzManagementGroupDeploymentStack `
-ManagementGroupId "<management-group-id>"
更新部署堆疊
若要更新部署堆疊 (包括新增或刪除受控資源),則必須變更基礎 Bicep 檔案。 修改之後,有兩種方式可更新部署堆疊,包括執行更新命令,或重新執行建立命令。
利用基礎結構即程式碼 (IaC) 設計模式,可完整控制受控資源清單。
使用 Set 命令
若要在資源群組範圍內更新部署堆疊:
Set-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
若要在訂用帳戶範圍內更新部署堆疊:
Set-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentResourceGroupName "<resource-group-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
DeploymentResourceGroupName
參數可指定用於儲存部署堆疊資源的資源群組。 如果未指定資源群組名稱,部署堆疊服務會為您建立新的資源群組。
若要在管理群組範圍內更新部署堆疊:
Set-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-DeploymentSubscriptionId "<subscription-id>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "none"
使用新增命令
您收到類似以下內容的警告:
The deployment stack 'myStack' you're trying to create already exists in the current subscription/management group/resource group. Do you want to overwrite it? Detaching: resources, resourceGroups (Y/N)
如需詳細資訊,請參閱建立部署堆疊。
控制中斷連結與刪除
已中斷連結的資源 (或非受控資源) 是指非由部署堆疊追蹤或管理,但仍存在於 Azure 中的資源。
若要指示 Azure 刪除非受控資源,請使用包含下列參數的建立堆疊命令來更新堆疊。 如需詳細資訊,請參閱建立部署堆疊。
使用 ActionOnUnmanage
參數來定義在更新或刪除堆疊之後,不再受控的資源會發生什麼情況。 允許的值如下:
deleteAll
:如果針對受控資源與資源群組,請使用刪除而非中斷連結。deleteResources
:如果僅針對受控資源,請使用刪除而非中斷連結。detachAll
:中斷連結受控資源和資源群組。
例如:
New-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name" `
-TemplateFile "<bicep-file-name>" `
-DenySettingsMode "none" `
-ActionOnUnmanage "deleteAll"
警告
刪除資源群組時,若將 action-on-unmanage 參數設定為 DeleteAll
,也會刪除受控資源群組及其內含的所有資源。
處理堆疊不同步錯誤
更新或刪除部署堆疊時,您可能會遇到下列堆疊不同步錯誤,指出堆疊資源清單未正確同步。
The deployment stack '{0}' may not have an accurate list of managed resources. To ensure no resources are accidentally deleted, please check that the managed resource list does not have any additional values. If there is any uncertainty, we recommend redeploying the stack with the same template and parameters as the current iteration. To bypass this warning, please specify the 'BypassStackOutOfSyncError' flag.
您可以從 Azure 入口網站取得資源清單,或使用相同的參數重新部署目前部署的 Bicep 檔案。 輸出會顯示受控資源
...
Resources: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk
檢閱並驗證堆疊中的資源清單之後,您可以使用 Azure PowerShell 中的 BypassStackOutOfSyncError
參數 (或 Azure CLI 中的 bypass-stack-out-of-sync-error
) 來重新執行命令。 在重新執行命令之前,只有在徹底檢閱堆疊中的資源清單之後,才應該使用此參數。 預設一律不應使用此參數。
刪除部署堆疊
ActionOnUnmanage
參數會將動作定義為不再受控的資源。 參數具有下列值:
DeleteAll
:同時刪除資源和資源群組。DeleteResources
:僅刪除資源。DetachAll
:中斷連結資源。
即使指定全部刪除參數,部署堆疊所在的資源群組中存在非受控資源,即會防止刪除未受控資源和資源群組本身。
若要在資源群組範圍內刪除部署堆疊資源:
Remove-AzResourceGroupDeploymentStack `
-name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"
若要在訂用帳戶範圍內刪除部署堆疊資源:
Remove-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"
若要在管理群組範圍內刪除部署堆疊資源:
Remove-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ManagementGroupId "<management-group-id>" `
-ActionOnUnmanage "<deleteAll/deleteResources/detachAll>"
檢視部署堆疊中的受控資源
部署堆疊服務尚未有 Azure 入口網站圖形化使用者介面 (GUI)。 若要檢視部署堆疊中的受控資源,請使用下列 Azure Powershell/Azure CLI 命令:
若要在資源群組範圍內檢視受控資源:
(Get-AzResourceGroupDeploymentStack -Name "<deployment-stack-name>" -ResourceGroupName "<resource-group-name>").Resources
若要在訂用帳戶範圍內檢視受控資源:
(Get-AzSubscriptionDeploymentStack -Name "<deployment-stack-name>").Resources
若要在管理群組範圍內檢視受控資源:
(Get-AzManagementGroupDeploymentStack -Name "<deployment-stack-name>" -ManagementGroupId "<management-group-id>").Resources
將資源新增至部署堆疊
若要新增受控資源,請將資源定義新增至基礎 Bicep 檔案,然後執行更新命令或重新執行建立命令。 如需詳細資訊,請參閱更新部署堆疊。
刪除部署堆疊中的受控資源
若要刪除受控資源,請從基礎 Bicep 檔案中移除資源定義,然後執行更新命令,或重新執行建立命令。 如需詳細資訊,請參閱更新部署堆疊。
保護受控資源
您可以將特定權限指派給部署堆疊的受控資源,以防止未經授權的安全性主體將其刪除或更新。 這些權限稱為拒絕設定。 您想要將堆疊儲存在父範圍。 例如,若要保護訂用帳戶中的資源,您必須將堆疊放在父範圍,也就是緊接著的父管理群組。
拒絕設定僅適用於控制平面作業,不適用於資料平面作業。 例如,儲存體帳戶和金鑰保存庫是透過控制平面建立,使得其可由部署堆疊管理。 不過,透過資料平面建立的袐密或 Blob 容器等子資源,無法由部署堆疊管理。
拒絕設定僅適用明確建立的資源,而不是隱含建立的資源。 例如,受控 AKS 叢集會建立多個其他服務來支援,例如虛擬機器。 在此情況下,由於虛擬機器未在 Bicep 檔案中定義,而且是隱含建立的資源,因此不會受限於部署堆疊拒絕設定。
Azure PowerShell 包含下列參數,可用於自訂拒絕指派:
DenySettingsMode
:定義禁止對受控資源進行的作業,防止未經授權的安全性主體嘗試刪除或更新資源。 除非明確授與存取權,否則此限制適用於所有人。 值包括:None
、DenyDelete
和DenyWriteAndDelete
。DenySettingsApplyToChildScopes
:指定時,拒絕設定模式設定也會套用至受控資源的子範圍。 例如,Bicep 檔案會定義 Microsoft.Sql/servers 資源 (父項目) 和 Microsoft.Sql/servers/databases 資源 (子項目)。 如果使用 Bicep 檔案建立了部署堆疊,並將DenySettingsApplyToChildScopes
設定啟用及DenySettingsMode
設定為DenyWriteAndDelete
,則您無法將任何其他子資源新增至 Microsoft.Sql/servers 資源或 Microsoft.Sql/servers/databases 資源。DenySettingsExcludedAction
:排除於否定性設定之外的角色型管理作業清單。 最多允許 200 個動作。DenySettingsExcludedPrincipal
:排除於鎖定之外的 Microsoft Entra 主體識別碼清單。 最多允許 5 個主體。
若想在資源群組範圍設置內套用拒絕設定:
New-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "denyDelete" `
-DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
-DenySettingsExcludedPrincipal "<object-id>,<object-id>"
若想在訂用帳戶範圍設置內套用拒絕設定:
New-AzSubscriptionDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "denyDelete" `
-DenySettingsExcludedAction "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
-DenySettingsExcludedPrincipal "<object-id>,<object-id>"
使用 DeploymentResourceGroupName
參數指定已建立部署堆疊的資源群組名稱。 如果未指定範圍,將會使用部署堆疊的範圍。
若想在管理群組範圍設置內套用拒絕設定:
New-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-Location "<location>" `
-TemplateFile "<bicep-file-name>" `
-ActionOnUnmanage "detachAll" `
-DenySettingsMode "denyDelete" `
-DenySettingsExcludedActions "Microsoft.Compute/virtualMachines/write Microsoft.StorageAccounts/delete" `
-DenySettingsExcludedPrincipal "<object-id>,<object-id>"
使用 DeploymentSubscriptionId
參數指定已建立部署堆疊的訂用帳戶識別碼。 如果未指定範圍,將會使用部署堆疊的範圍。
中斷部署堆疊與受控資源的連結
根據預設,當部署堆疊不再包含在堆疊的管理範圍內時,部署堆疊會中斷連結,但不會刪除非受控資源。 如需詳細資訊,請參閱更新部署堆疊。
從部署堆疊匯出範本
您可以從部署堆疊將資源匯出至 JSON 輸出。 您可以將輸出輸送至檔案。
若要在資源群組範圍內輸出部署堆疊:
Save-AzResourceGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ResourceGroupName "<resource-group-name>" `
若要在訂用帳戶範圍內輸出部署堆疊:
Save-AzSubscriptionDeploymentStack `
-name "<deployment-stack-name>"
若要在管理群組範圍內輸出部署堆疊:
Save-AzManagementGroupDeploymentStack `
-Name "<deployment-stack-name>" `
-ManagementGroupId "<management-group-id>"
下一步
若要進行快速入門,請參閱快速入門:建立部署堆疊。