デプロイ スタックからリソースをデタッチして削除する

完了

預金アプリケーションの変更が続きます。 チームは、アプリケーションからリソースを削除することにしました。 一部のリソースは Azure に存在し続ける必要がありますが、他のリソースは削除しても問題ありません。 デプロイ スタックで管理されなくなったリソースを Azure がどのように処理するかについて、さらに詳しく学習する必要があります。

このユニットでは、action on unmanage パラメーターを使用して、デプロイ スタックからデタッチしたリソースを Azure がどのように処理するかを制御する方法を学習します。

Note

このユニットのコマンドは、概念を説明するために示されています。 コマンドはまだ実行しないでください。 ここで学習した内容をすぐに練習します。

action on unmanage の再確認

デプロイ スタックでは、action on unmanage パラメーターを使用して、デタッチされたリソース、リソース グループ、および管理グループを Azure がどのように処理するかを制御します。 action on unmanage パラメーターは、デプロイメント スタックを作成、変更、または削除するときに設定できます。 3 つの操作はすべて、action on unmanage パラメーターの動作を設定する機能を持ちます。 最後に設定した値が優先されることに注意してください。

--action-on-unmanage パラメーターには、以下の 3 つの値を設定できます。

  • deleteAll - リソース、リソース グループ、管理グループを削除します
  • deleteResources - リソースは削除しますが、リソース グループと管理グループはデタッチします
  • detachAll - リソース、リソース グループ、管理グループをすべてデタッチします

-ActionOnUnmanage パラメーターには、以下の 3 つの値を設定できます。

  • DeleteAll - リソース、リソース グループ、管理グループを削除します
  • DeleteResources - リソースは削除しますが、リソース グループと管理グループはデタッチします
  • DetachAll - リソース、リソース グループ、管理グループをすべてデタッチします

管理対象リソースをデタッチする

デタッチされたリソース (アンマネージド リソースとも呼ばれます) は、デプロイ スタックで追跡または管理されなくなったリソースですが、そのリソースは Azure に存在し続けています。 デプロイ スタックの既定の動作は、リソースの削除ではなくデタッチです。 たとえば、後で別のデプロイ スタックで使用できるようにリソースを保持する必要がある場合や、データを削除しても問題ないことを手動で確認する必要がある場合があります。

action on unmanage パラメーターには、デプロイ スタックでリソース、リソース グループ、および管理グループが管理されなくなったときにデタッチするように設定する値が 2 つあります。

デプロイ スタックでは、キー コンテナー シークレットを削除できません。 テンプレートからキー コンテナー シークレットを削除する場合、デタッチ モードでデプロイ スタックの更新/削除コマンドも必ず実行してください。

  • deleteResources - リソースは削除しますが、リソース グループと管理グループはデタッチします
  • detachAll - リソース、リソース グループ、管理グループをすべてデタッチします

デプロイ スタックの作成、変更、削除時に deleteResources または detachAll のいずれかを使用すると、誤削除に対する追加の保護が提供されます。 前のユニットのシナリオについて考えてみましょう。 既存の Log Analytics ワークスペースをデプロイ スタックに追加しました。 ワークスペースは、預金アプリケーションだけでなく、他のアプリケーションでも使用されます。 アプリケーションの存続期間を過ぎても保持する必要があります。 detachAllaction on unmanage パラメーターとして使用すると、必要なリソースが Azure に存在し続けます。

  • DeleteResources - リソースは削除しますが、リソース グループと管理グループはデタッチします
  • DetachAll - リソース、リソース グループ、管理グループをすべてデタッチします

デプロイ スタックの作成、変更、削除時に DeleteResources または DetachAll のいずれかを使用すると、誤削除に対する追加の保護が提供されます。 前のユニットのシナリオについて考えてみましょう。 既存の Log Analytics ワークスペースをデプロイ スタックに追加しました。 ワークスペースは、預金アプリケーションだけでなく、他のアプリケーションでも使用されます。 アプリケーションの存続期間を過ぎても保持する必要があります。 DetachAllaction on unmanage パラメーターとして使用すると、必要なリソースが Azure に存在し続けます。

前のユニットの Bicep ファイルについて考えてみましょう。 テンプレート ファイルでは、App Service プラン、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 パラメーターには、デプロイ スタックでリソース、リソース グループ、および管理グループが管理されなくなったときに削除するように設定する値が 2 つあります。

  • deleteAll - リソース、リソース グループ、管理グループを削除します
  • deleteResources - リソースは削除しますが、リソース グループと管理グループはデタッチします

預金アプリケーションについて考えてみましょう。 開発チームが Azure SQL Database の代わりに Azure Database for PostgreSQL を使用することを決定したとします。 まず、デプロイ スタックを更新して、Azure から Azure SQL サーバーおよびデータベースを完全に削除する必要があります。 この動作を実現するには、デプロイ スタックの更新または削除時に deleteAll または deleteResources action on unmanage パラメーターを使用します。

  • DeleteAll - リソース、リソース グループ、管理グループを削除します
  • DeleteResources - リソースは削除しますが、リソース グループと管理グループはデタッチします

預金アプリケーションについて考えてみましょう。 開発チームが Azure SQL Database の代わりに Azure Database for PostgreSQL を使用することを決定したとします。 まず、デプロイ スタックを更新して、Azure から Azure SQL サーバーおよびデータベースを完全に削除する必要があります。 この動作を実現するには、デプロイ スタックの更新または削除時に DeleteAll または DeleteResources action on unmanage パラメーターを使用します。

前のセクションの Bicep ファイルについて考えてみましょう。 テンプレート ファイルでは、App Service プラン、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 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 プランと 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

更新操作が完了すると、残っているリソースは App Service プランと Web アプリのみになります。 このコマンドでは、-ActionOnUnmanage DeleteAll を使用して、デプロイ スタックで管理されなくなったリソースを Azure がどのように処理するかを指定しました。 この場合、リソースはデプロイ スタックと Azure から削除されます。