從部署堆疊中斷連結和刪除資源
存款應用程式會繼續變更。 小組決定從應用程式移除資源。 有些資源必須繼續存在於 Azure 中,而其他資源則可安全刪除。 您需要深入了解 Azure 如何處理不再由部署堆疊管理的資源。
在本單元中,您將了解如何使用 action on unmanage 參數,控制 Azure 如何處理已與部署堆疊中斷連結的資源。
注意
本單元中的命令僅用於示範概念。 請先不要執行命令。 您很快就會在此練習所學到的內容。
Action on unmanage 回顧
使用部署堆疊時,action on unmanage 參數可用來控制 Azure 如何處理已中斷連結的資源、資源群組和管理群組。 您可以在建立、修改或刪除部署堆疊時設定 action on unmanage 參數。 這三個作業都能設定 action on unmanage 參數的行為。 請記住,最後設定的值優先順序最高。
--action-on-unmanage
參數有三個可能值:
deleteAll
- 刪除資源、資源群組和管理群組deleteResources
- 刪除資源、但中斷連結資源群組和管理群組detachAll
- 中斷連結所有資源、資源群組和管理群組
-ActionOnUnmanage
參數有三個可能值:
DeleteAll
- 刪除資源、資源群組和管理群組DeleteResources
- 刪除資源、但中斷連結資源群組和管理群組DetachAll
- 中斷連結所有資源、資源群組和管理群組
中斷受控資源的連結
已中斷連結的資源 (也稱為非受控資源) 是不再由部署堆疊追蹤或管理的資源,但該資源仍然存在於 Azure 中。 部署堆疊的預設行為是中斷連結資源,而不是刪除資源。 例如,您可能需要保留資源,以便未來在另一個部署堆疊中使用,或者您可能需要手動確認其資料可安全刪除。
action on unmanage 參數有兩個值,可設定在部署堆疊不再管理資源、資源群組和管理群組將其中斷連結。
部署堆疊無法刪除金鑰保存庫袐密。 如果您要從範本移除金鑰保存庫袐密,請務必也以中斷連結模式執行部署堆疊更新/刪除命令。
deleteResources
- 刪除資源、但中斷連結資源群組和管理群組detachAll
- 中斷連結所有資源、資源群組和管理群組
在建立、修改或刪除部署堆疊時使用 deleteResources
或 detachAll
可提供一些額外的保護,以防止意外刪除。 請考慮上一個單元中的案例。 我們已將現有的 Log Analytics 工作區新增至部署堆疊。 該工作區會由其他應用程式使用,而不只是由存款應用程式使用。 它必須持續存在超過應用程式的存留期。 透過使用 detachAll
作為 action on unmanage 參數,所需的資源會繼續存在於 Azure 中。
DeleteResources
- 刪除資源、但中斷連結資源群組和管理群組DetachAll
- 中斷連結所有資源、資源群組和管理群組
在建立、修改或刪除部署堆疊時使用 DeleteResources
或 DetachAll
可提供一些額外的保護,以防止意外刪除。 請考慮上一個單元中的案例。 我們已將現有的 Log Analytics 工作區新增至部署堆疊。 該工作區會由其他應用程式使用,而不只是由存款應用程式使用。 它必須持續存在超過應用程式的存留期。 透過使用 DetachAll
作為 action on unmanage 參數,所需的資源會繼續存在於 Azure 中。
讓我們考慮上一個單元中的 Bicep 檔案。 該範本檔案定義應用程式服務方案、Web 應用程式、Azure SQL 伺服器和資料庫、Log Analytics 工作區和 Application Insights 執行個體。 假設我們需要移除在上一個單元中建立的 Log Analytics 工作區和 Application Insights 執行個體。 我們會編輯 Bicep 檔案,移除參考 Web 應用程式的反白顯示程式碼。
// Parameters
@description('The location for all resources.')
param location string = 'eastus'
@description('The name of the SQL database.')
param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'
@description('The password of the admin user.')
param sqlServerAdminUserName string
@description('The name of the admin user.')
@secure()
param sqlServerAdminPassword string
@description('The name of the SQL server.')
param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'
@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'
// Variables
@description('The name of the Application Insights instance.')
var applicationInsightsName = 'appinsights-deposits'
@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'
@description('The name of the Log Analytics Workspace.')
var logAnalyticsWorkspaceName = 'log-deposits'
// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: 'S1'
capacity: 1
}
}
// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
name: webApplicationName
location: location
properties: {
serverFarmId: appServicePlan.id
siteConfig: {
appSettings: [
{
name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
value: applicationInsights.properties.InstrumentationKey
}
]
}
}
}
// Resource - SQL Server
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdminUserName
administratorLoginPassword: sqlServerAdminPassword
}
}
// Resource - SQL Database
resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: {
name: 'Standard'
tier: 'Standard'
}
}
// Resource - Log Analytics Workspace
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
name: logAnalyticsWorkspaceName
location: location
properties: {
retentionInDays: 30
sku: {
name: 'PerGB2018'
}
}
}
// Resource - Application Insights
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
name: applicationInsightsName
location: location
kind: 'web'
properties: {
Application_Type: 'web'
WorkspaceResourceId: logAnalyticsWorkspace.id
}
}
若要套用變更,我們需要更新部署堆疊。 若要使用 Azure CLI 更新部署堆疊,請使用 az stack group create
命令。
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage detachAll \
--deny-settings-mode none
更新作業完成之後,部署堆疊已不再管理 Log Analytics 工作區和 Application Insights 執行個體。 在命令中,我們使用 --action-on-unmanage detachAll
來指定 Azure 如何處理不再由部署堆疊管理的資源。 在此案例中,資源會與部署堆疊中斷連結,但其仍存在於資源群組中。
若要套用變更,我們需要更新部署堆疊。 若要使用 Azure PowerShell 更新部署堆疊,請使用 Set-AzResourceGroupDeploymentStack
命令。
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
更新作業完成之後,部署堆疊已不再管理 Log Analytics 工作區和 Application Insights 執行個體。 在命令中,我們使用 -ActionOnUnmanage DetachAll
來指定 Azure 如何處理不再由部署堆疊管理的資源。 在此案例中,資源會與部署堆疊中斷連結,但其仍存在於資源群組中。
刪除受控資源
部署堆疊提供可靠的資源清除。 當您更新或刪除部署堆疊時,您還可以刪除受控資源、資源群組和管理群組。 action on unmanage 參數有兩個值,可設定在部署堆疊不再管理資源、資源群組和管理群組將其刪除。
deleteAll
- 刪除資源、資源群組和管理群組deleteResources
- 刪除資源、但中斷連結資源群組和管理群組
請考慮我們的存款應用程式。 假設開發小組決定使用適用於 PostgreSQL 的 Azure 資料庫,而不是 Azure SQL Database。 我們需要先更新部署堆疊,以從 Azure 移除並完整刪除 Azure SQL 伺服器和資料庫。 若要實現此行為,請在更新或刪除部署堆疊時,使用 deleteAll
或 deleteResources
action on unmanage 參數。
DeleteAll
- 刪除資源、資源群組和管理群組DeleteResources
- 刪除資源、但中斷連結資源群組和管理群組
請考慮我們的存款應用程式。 假設開發小組決定使用適用於 PostgreSQL 的 Azure 資料庫,而不是 Azure SQL Database。 我們需要先更新部署堆疊,以從 Azure 移除並完整刪除 Azure SQL 伺服器和資料庫。 若要實現此行為,請在更新或刪除部署堆疊時,使用 DeleteAll
或 DeleteResources
action on unmanage 參數。
讓我們考慮上一節中的 Bicep 檔案。 該範本檔案會定義應用程式服務方案、Web 應用程式與 Azure SQL 伺服器和資料庫。 假設我們需要移除 Azure SQL 伺服器和資料庫。 我們會編輯 Bicep 檔案,移除參考 Web 應用程式的反白顯示程式碼。
// Parameters
@description('The location for all resources.')
param location string = 'eastus'
@description('The name of the SQL database.')
param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'
@description('The password of the admin user.')
param sqlServerAdminUserName string
@description('The name of the admin user.')
@secure()
param sqlServerAdminPassword string
@description('The name of the SQL server.')
param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'
@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'
// Variables
@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'
// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: 'F1'
capacity: 1
}
}
// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
name: webApplicationName
location: location
properties: {
serverFarmId: appServicePlan.id
}
}
// Resource - SQL Server
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdminUserName
administratorLoginPassword: sqlServerAdminPassword
}
}
// Resource - SQL Database
resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: {
name: 'Standard'
tier: 'Standard'
}
}
我們會在檔案中留下下列程式碼:
// Parameters
@description('The location for all resources.')
param location string = 'eastus'
@description('The name of the web application.')
param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'
// Variables
@description('The name of the app service plan.')
var appServicePlanName = 'plan-deposits'
// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: 'F1'
capacity: 1
}
}
// Resource - Web App
resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
name: webApplicationName
location: location
properties: {
serverFarmId: appServicePlan.id
}
}
若要套用變更,我們需要更新部署堆疊。 若要使用 Azure CLI 更新部署堆疊,請使用 az stack group create
命令。 這次,我們使用 --action-on-unmanage deleteAll
,而非 --action-on-unmanage detachAll
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage deleteAll \
--deny-settings-mode none
更新作業完成之後,剩下的唯一資源就是應用程式服務方案和 Web 應用程式。 在命令中,我們使用 --action-on-unmanage deleteAll
來指定 Azure 如何處理不再由部署堆疊管理的資源。 在此案例中,資源會從部署堆疊和 Azure 中刪除。
若要套用變更,我們需要更新部署堆疊。 若要使用 Azure PowerShell 更新部署堆疊,請使用 Set-AzResourceGroupDeploymentStack
命令。
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DeleteAll `
-DenySettingsMode None
更新作業完成之後,剩下的唯一資源就是應用程式服務方案和 Web 應用程式。 在命令中,我們使用 -ActionOnUnmanage DeleteAll
來指定 Azure 如何處理不再由部署堆疊管理的資源。 在此案例中,資源會從部署堆疊和 Azure 中刪除。