배포 스택에서 리소스 분리 및 삭제
예금 애플리케이션을 계속 변경하고 있습니다. 팀은 애플리케이션에서 리소스를 제거하기로 결정했습니다. 일부 리소스는 Azure에 계속 존재해야 하지만, 다른 리소스는 삭제해도 안전합니다. 사용자는 Azure가 배포 스택에서 더 이상 관리하지 않는 리소스를 어떻게 처리하는지 자세히 알아야 합니다.
이 단원에서는 Azure가 관리되지 않는 작업 매개 변수를 사용하여 배포 스택에서 분리된 리소스를 처리하는 방법을 어떻게 제어할 수 있는지 알아봅니다.
참고 항목
이 단원의 명령은 개념을 설명하기 위해 표시된 것입니다. 명령을 아직 실행하지 마세요. 여기에서 학습하는 내용을 곧 연습할 예정입니다.
관리되지 않는 작업 재검토
배포 스택에서 관리되지 않는 작업 매개 변수를 사용하여 Azure에서 분리된 리소스, 리소스 그룹 및 관리 그룹의 처리 방법을 제어할 수 있습니다. 배포 스택을 만들거나, 수정하거나, 삭제할 때 관리되지 않는 작업 매개 변수를 설정할 수 있습니다. 세 작업에서 모두 관리되지 않는 작업 매개 변수의 동작을 설정할 수 있습니다. 마지막 설정 값이 우선시된다는 점에 유의하세요.
--action-on-unmanage
매개 변수에 사용할 수 있는 값은 다음의 세 가지입니다.
deleteAll
- 리소스와 리소스 그룹, 관리 그룹을 삭제함deleteResources
- 리소스를 삭제하지만 리소스 그룹과 관리 그룹을 분리함detachAll
- 모든 리소스와 리소스 그룹, 관리 그룹을 분리함
-ActionOnUnmanage
매개 변수에 사용할 수 있는 값은 다음의 세 가지입니다.
DeleteAll
- 리소스와 리소스 그룹, 관리 그룹을 삭제함DeleteResources
- 리소스를 삭제하지만 리소스 그룹과 관리 그룹을 분리함DetachAll
- 모든 리소스와 리소스 그룹, 관리 그룹을 분리함
관리되는 리소스 분리
관리되지 않는 리소스라고도 하는 분리된 리소스는 더 이상 배포 스택에서 추적 또는 관리하지 않지만, 리소스는 여전히 Azure에 있는 리소스입니다. 배포 스택의 기본 동작은 리소스를 삭제하지 않고 분리하는 것입니다. 예를 들면, 나중에 다른 배포 스택에서 사용할 수 있도록 리소스를 유지해야 하거나 데이터를 삭제해도 안전한지 수동으로 확인해야 할 수도 있습니다.
배포 스택에서 더 이상 관리하지 않을 때 리소스, 리소스 그룹 및 관리 그룹을 분리하는 관리되지 않는 작업 매개 변수의 값이 두 가지 있습니다.
배포 스택은 키 자격 증명 모음 비밀을 삭제할 수 없습니다. 템플릿에서 키 자격 증명 모음 비밀을 제거하는 경우 분리 모드에서 배포 스택 업데이트/삭제 명령도 실행해야 합니다.
deleteResources
- 리소스를 삭제하지만 리소스 그룹과 관리 그룹을 분리함detachAll
- 모든 리소스와 리소스 그룹, 관리 그룹을 분리함
배포 스택을 만들거나, 수정하거나 삭제할 때 deleteResources
또는 detachAll
을(를) 사용하면 실수로 삭제되지 않게 보호하는 추가 기능이 제공됩니다. 지난 단원의 시나리오를 고려해 보니다. 배포 스택에 기존 Log Analytics 작업 영역을 추가했습니다. 작업 영역은 예금 애플리케이션뿐만 아니라 다른 애플리케이션에서도 사용됩니다. 애플리케이션의 수명이 지난 뒤에도 지속되어야 합니다. detachAll
을(를) 관리되지 않는 작업 매개 변수로 사용하면 필요한 리소스가 Azure에 계속 존재합니다.
DeleteResources
- 리소스를 삭제하지만 리소스 그룹과 관리 그룹을 분리함DetachAll
- 모든 리소스와 리소스 그룹, 관리 그룹을 분리함
배포 스택을 만들거나, 수정하거나 삭제할 때 DeleteResources
또는 DetachAll
을(를) 사용하면 실수로 삭제되지 않게 보호하는 추가 기능이 제공됩니다. 지난 단원의 시나리오를 고려해 보니다. 배포 스택에 기존 Log Analytics 작업 영역을 추가했습니다. 작업 영역은 예금 애플리케이션뿐만 아니라 다른 애플리케이션에서도 사용됩니다. 애플리케이션의 수명이 지난 뒤에도 지속되어야 합니다. DetachAll
을(를) 관리되지 않는 작업 매개 변수로 사용하면 필요한 리소스가 Azure에 계속 존재합니다.
지난 단원의 Bicep 파일을 살펴보겠습니다. 템플릿 파일은 App Service 요금제, 웹앱, Azure SQL Server 및 데이터베이스, Log Analytics 작업 영역, Application Insights 인스턴스를 정의합니다. 지난 단원에서 만든 Log Analytics 작업 영역과 Application Insights 인스턴스를 제거해야 한다고 가정해 보겠습니다. Bicep 파일을 편집하여 웹앱을 참조하는 강조 표시된 코드를 제거합니다.
// 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가 배포 스택에서 더 이상 관리하지 않는 리소스를 처리하는 방법을 지정했습니다. 이 경우 리소스가 배포 스택에서 분리되지만 리소스 그룹에는 여전히 존재합니다.
관리되는 리소스 삭제
배포 스택은 신뢰할 수 있는 리소스 정리 기능을 제공합니다. 배포 스택을 업데이트하거나 삭제하면 관리되는 리소스, 리소스 그룹 및 관리 그룹도 삭제할 수 있습니다. 배포 스택에서 더 이상 관리하지 않을 때 삭제할 리소스, 리소스 그룹 및 관리 그룹을 설정하는 관리되지 않는 작업 매개 변수의 값이 두 가지 있습니다.
deleteAll
- 리소스와 리소스 그룹, 관리 그룹을 삭제함deleteResources
- 리소스를 삭제하지만 리소스 그룹과 관리 그룹을 분리함
예금 애플리케이션을 고려해 보세요. 개발 팀이 Azure SQL Database 대신 Azure Database for PostgreSQL을 사용하기로 결정했다고 가정해 보겠습니다. 먼저 배포 스택을 업데이트하여 Azure에서 Azure SQL Server와 데이터베이스를 제거하고 완전히 삭제해야 합니다. 이 동작을 수행하려면 배포 스택을 업데이트하거나 삭제할 때 deleteAll
또는 deleteResources
관리되지 않는 작업 매개 변수를 사용합니다.
DeleteAll
- 리소스와 리소스 그룹, 관리 그룹을 삭제함DeleteResources
- 리소스를 삭제하지만 리소스 그룹과 관리 그룹을 분리함
예금 애플리케이션을 고려해 보세요. 개발 팀이 Azure SQL Database 대신 Azure Database for PostgreSQL을 사용하기로 결정했다고 가정해 보겠습니다. 먼저 배포 스택을 업데이트하여 Azure에서 Azure SQL Server와 데이터베이스를 제거하고 완전히 삭제해야 합니다. 이 동작을 수행하려면 배포 스택을 업데이트하거나 삭제할 때 DeleteAll
또는 DeleteResources
관리되지 않는 작업 매개 변수를 사용합니다.
이전 섹션의 Bicep 파일을 살펴보겠습니다. 템플릿 파일은 App Service 요금제, 웹앱, Azure SQL Server 및 데이터베이스를 정의합니다. Azure SQL Server 및 데이터베이스를 제거해야 한다고 가정해 보겠습니다. Bicep 파일을 편집하여 웹앱을 참조하는 강조 표시된 코드를 제거합니다.
// 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 detachAll
대신 --action-on-unmanage deleteAll
을(를) 사용합니다.
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage deleteAll \
--deny-settings-mode none
업데이트 작업이 완료된 후 남은 리소스는 App Service 요금제와 웹앱뿐입니다. 명령에서 --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
업데이트 작업이 완료된 후 남은 리소스는 App Service 요금제와 웹앱뿐입니다. 명령에서 -ActionOnUnmanage DeleteAll
을(를) 사용하여 Azure가 배포 스택에서 더 이상 관리하지 않는 리소스를 처리하는 방법을 지정했습니다. 이 경우 리소스가 배포 스택과 Azure에서 삭제됩니다.