Odłączanie i usuwanie zasobów ze stosu wdrożenia
Zmiany są kontynuowane w aplikacji depozytów. Zespół postanowił usunąć zasoby z aplikacji. Niektóre zasoby muszą nadal istnieć na platformie Azure, podczas gdy inne są bezpieczne do usunięcia. Musisz dowiedzieć się więcej o tym, jak platforma Azure obsługuje zasoby, którymi nie zarządza już stos wdrożenia.
W tej lekcji dowiesz się, jak używać kontroli sposobu obsługi zasobów przez platformę Azure odłączonych od stosu wdrożenia przy użyciu akcji dla parametru niezarządzanego .
Uwaga
Polecenia w tej lekcji są wyświetlane w celu zilustrowania pojęć. Nie uruchamiaj jeszcze poleceń. Będziesz ćwiczyć to, czego nauczysz się tutaj wkrótce.
Akcja w przypadku ponownego przejrzenia niezarządzanego
W przypadku stosów wdrożeń akcja parametru niezarządzanego służy do kontrolowania sposobu, w jaki platforma Azure obsługuje odłączone zasoby, grupy zasobów i grupy zarządzania. Akcję dla parametru niezarządzanego można ustawić podczas tworzenia, modyfikowania lub usuwania stosu wdrożenia. Wszystkie trzy operacje mają możliwość ustawienia zachowania akcji dla parametru niezarządzanego . Należy pamiętać, że ostatni zestaw wartości ma pierwszeństwo.
Dla parametru --action-on-unmanage
istnieją trzy możliwe wartości:
deleteAll
— usuwa zasoby, grupy zasobów i grupy zarządzaniadeleteResources
— usuwa zasoby, ale odłącza grupy zasobów i grupy zarządzaniadetachAll
— odłącza wszystkie zasoby, grupy zasobów i grupy zarządzania
Dla parametru -ActionOnUnmanage
istnieją trzy możliwe wartości:
DeleteAll
— usuwa zasoby, grupy zasobów i grupy zarządzaniaDeleteResources
— usuwa zasoby, ale odłącza grupy zasobów i grupy zarządzaniaDetachAll
— odłącza wszystkie zasoby, grupy zasobów i grupy zarządzania
Odłączanie zarządzanego zasobu
Odłączony zasób, znany również jako zasób niezarządzany, to zasób, który nie jest już śledzony ani zarządzany przez stos wdrożenia, ale zasób nadal istnieje na platformie Azure. Domyślnym zachowaniem stosów wdrażania jest odłączanie zasobów, a nie usuwanie. Na przykład może być konieczne zachowanie zasobu, aby można było go użyć w innym stosie wdrożenia w przyszłości lub może być konieczne ręczne sprawdzenie, czy jego dane są bezpieczne do usunięcia.
Istnieją dwie wartości akcji dla parametru niezarządzanego , który ustawia zasoby, grupy zasobów i grupy zarządzania do odłączenia, gdy stos wdrożenia nie zarządza już nimi.
Stosy wdrażania nie mogą usuwać wpisów tajnych magazynu kluczy. Jeśli usuwasz wpisy tajne magazynu kluczy z szablonu, pamiętaj, aby również wykonać polecenie aktualizacji/usuwania stosu wdrożenia z trybem odłączania.
deleteResources
— usuwa zasoby, ale odłącza grupy zasobów i grupy zarządzaniadetachAll
— odłącza wszystkie zasoby, grupy zasobów i grupy zarządzania
Użycie metody deleteResources
lub detachAll
podczas tworzenia, modyfikowania lub usuwania stosów wdrożenia zapewnia dodatkową ochronę przed przypadkowym usunięciem. Rozważmy nasz scenariusz z ostatniej lekcji. Dodaliśmy istniejący obszar roboczy usługi Log Analytics do naszego stosu wdrażania. Obszar roboczy jest używany przez inne aplikacje, a nie tylko aplikację depozytów. Musi on utrwałyć się poza życiem aplikacji. detachAll
Używając jako akcji dla parametru niezarządzającego, potrzebne zasoby nadal istnieją na platformie Azure.
DeleteResources
— usuwa zasoby, ale odłącza grupy zasobów i grupy zarządzaniaDetachAll
— odłącza wszystkie zasoby, grupy zasobów i grupy zarządzania
Użycie metody DeleteResources
lub DetachAll
podczas tworzenia, modyfikowania lub usuwania stosów wdrożenia zapewnia dodatkową ochronę przed przypadkowym usunięciem. Rozważmy nasz scenariusz z ostatniej lekcji. Dodaliśmy istniejący obszar roboczy usługi Log Analytics do naszego stosu wdrażania. Obszar roboczy jest używany przez inne aplikacje, a nie tylko aplikację depozytów. Musi on utrwałyć się poza życiem aplikacji. DetachAll
Używając jako akcji dla parametru niezarządzającego, potrzebne zasoby nadal istnieją na platformie Azure.
Rozważmy nasz plik Bicep z ostatniej lekcji. Plik szablonu definiuje plan usługi App Service, aplikację internetową, serwer i bazę danych Azure SQL, obszar roboczy usługi Log Analytics i wystąpienie usługi Application Insights. Załóżmy, że musimy usunąć obszar roboczy usługi Log Analytics i wystąpienie usługi Application Insights utworzone w ostatniej lekcji. Edytujemy nasz plik Bicep, usuwając wyróżniony kod odwołujący się do naszej aplikacji internetowej.
// 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
}
}
Aby zastosować zmiany, musimy zaktualizować stos wdrożenia. Aby zaktualizować stos wdrożenia przy użyciu interfejsu wiersza polecenia platformy az stack group create
Azure, użyj polecenia .
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage detachAll \
--deny-settings-mode none
Po zakończeniu operacji aktualizacji stos wdrożenia nie zarządza już obszarem roboczym usługi Log Analytics i wystąpieniem usługi Application Insights. W naszym poleceniu określiliśmy --action-on-unmanage detachAll
, w jaki sposób platforma Azure obsługuje zasoby, którymi nie zarządza już stos wdrożenia. W takim przypadku zasoby są odłączone od stosu wdrożenia, ale nadal istnieją w grupie zasobów.
Aby zastosować zmiany, musimy zaktualizować stos wdrożenia. Aby zaktualizować stos wdrożenia przy użyciu programu Azure PowerShell, użyj Set-AzResourceGroupDeploymentStack
polecenia .
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
Po zakończeniu operacji aktualizacji stos wdrożenia nie zarządza już obszarem roboczym usługi Log Analytics i wystąpieniem usługi Application Insights. W naszym poleceniu określiliśmy -ActionOnUnmanage DetachAll
, w jaki sposób platforma Azure obsługuje zasoby, którymi nie zarządza już stos wdrożenia. W takim przypadku zasoby są odłączone od stosu wdrożenia, ale nadal istnieją w grupie zasobów.
Usuwanie zasobu zarządzanego
Stosy wdrażania zapewniają niezawodne oczyszczanie zasobów. Po zaktualizowaniu lub usunięciu stosu wdrożenia można również usunąć zarządzane zasoby, grupy zasobów i grupy zarządzania. Istnieją dwie wartości akcji dla parametru niezarządzanego , który ustawia zasoby, grupy zasobów i grupy zarządzania do usunięcia, gdy stos wdrożenia nie będzie już nimi zarządzać.
deleteAll
— usuwa zasoby, grupy zasobów i grupy zarządzaniadeleteResources
— usuwa zasoby, ale odłącza grupy zasobów i grupy zarządzania
Rozważmy naszą aplikację do depozytów. Załóżmy, że zespół programistyczny decyduje się na użycie usługi Azure Database for PostgreSQL zamiast usługi Azure SQL Database. Musimy najpierw zaktualizować nasz stos wdrażania, aby usunąć i w pełni usunąć serwer i bazę danych Azure SQL z platformy Azure. Aby osiągnąć to zachowanie, użyj akcji lub deleteResources
dla parametru deleteAll
niezarządzającego podczas aktualizowania lub usuwania stosu wdrożenia.
DeleteAll
— usuwa zasoby, grupy zasobów i grupy zarządzaniaDeleteResources
— usuwa zasoby, ale odłącza grupy zasobów i grupy zarządzania
Rozważmy naszą aplikację do depozytów. Załóżmy, że zespół programistyczny decyduje się na użycie usługi Azure Database for PostgreSQL zamiast usługi Azure SQL Database. Musimy najpierw zaktualizować nasz stos wdrażania, aby usunąć i w pełni usunąć serwer i bazę danych Azure SQL z platformy Azure. Aby osiągnąć to zachowanie, użyj akcji lub DeleteResources
dla parametru DeleteAll
niezarządzającego podczas aktualizowania lub usuwania stosu wdrożenia.
Rozważmy nasz plik Bicep z poprzedniej sekcji. Plik szablonu definiuje plan usługi App Service, aplikację internetową oraz serwer i bazę danych Azure SQL. Załóżmy, że musimy usunąć serwer i bazę danych Azure SQL. Edytujemy nasz plik Bicep, usuwając wyróżniony kod odwołujący się do naszej aplikacji internetowej.
// 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'
}
}
Pozostaje nam następujący kod w naszym pliku:
// 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
}
}
Aby zastosować zmiany, musimy zaktualizować stos wdrożenia. Aby zaktualizować stos wdrożenia przy użyciu interfejsu wiersza polecenia platformy az stack group create
Azure, użyj polecenia . Tym razem używamy --action-on-unmanage deleteAll
zamiast --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
Po zakończeniu operacji aktualizacji jedynymi zasobami, które pozostają, są plan usługi App Service i aplikacja internetowa. W naszym poleceniu określiliśmy --action-on-unmanage deleteAll
, jak platforma Azure obsługuje zasoby, którymi nie zarządza już stos wdrożenia. W takim przypadku zasoby są usuwane ze stosu wdrożenia i z platformy Azure.
Aby zastosować zmiany, musimy zaktualizować stos wdrożenia. Aby zaktualizować stos wdrożenia przy użyciu programu Azure PowerShell, użyj Set-AzResourceGroupDeploymentStack
polecenia .
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DeleteAll `
-DenySettingsMode None
Po zakończeniu operacji aktualizacji jedynymi zasobami, które pozostają, są plan usługi App Service i aplikacja internetowa. W naszym poleceniu określiliśmy -ActionOnUnmanage DeleteAll
, jak platforma Azure obsługuje zasoby, którymi nie zarządza już stos wdrożenia. W takim przypadku zasoby są usuwane ze stosu wdrożenia i z platformy Azure.