Hinzufügen von Ressourcen zu einem Bereitstellungsstapel
Die Depotanwendung wird im Laufe der Entwicklung immer weiter angepasst. Das Team fügt täglich Ressourcen und Testfunktionen hinzu. Der Anwendung werden mit einem vorhandenen Log Analytics-Arbeitsbereich und einer neuen Application Insights-Instanz Funktionen für Einblicke hinzugefügt. Sie möchten die Ressourcen weiterhin als einzelne unteilbare Einheit verwalten. Sie müssen sich ausführlicher über das Hinzufügen vorhandener und neuer Ressourcen zu einem Bereitstellungsstapel informieren.
In dieser Lerneinheit erfahren Sie, wie Sie vorhandene und neue Ressourcen zu einem Bereitstellungsstapel als verwaltete Ressourcen hinzufügen.
Hinweis
Die Befehle in dieser Lerneinheit dienen der Veranschaulichung der Konzepte. Führen Sie die Befehle jetzt noch nicht aus. Sie können das Erlernte in Kürze üben.
Hinzufügen einer vorhandenen Ressource
Im Laufe der Zeit ändern sich die Ressourcen, die von einer Anwendung verwendet werden. Wie aktualisieren Sie einen Bereitstellungsstapel, um eine bereits vorhandene Ressource in Azure einzuschließen?
Mit Bicep können Sie eine Ressource definieren, die bereits in Azure vorhanden ist. Das Definieren einer vorhandenen Ressource ähnelt dem Definieren einer neuen Ressource. Es gibt nur geringfügige Unterschiede. Sie können beispielsweise eine vorhandene Ressource in einer Ressourcendeklaration mithilfe des Schlüsselworts existing
definieren:
resource logAnalyticsWorkspace 'Microsoft.OperationsManagement/solutions@2015-11-01-preview' existing = {
name: 'log-deposits'
}
Wenn Sie eine vorhandene Ressource als verwaltete Ressource zu einem Bereitstellungsstapel hinzufügen, müssen Sie das Schlüsselwort existing
nicht verwenden. Sie müssen einfach die vorhandene Ressource in der Bicep-Datei, ARM-JSON-Vorlage oder Vorlagenspezifikation definieren. Am Ende verwaltet der Bereitstellungsstapel die vorhandene Ressource.
Sehen Sie sich die Bicep-Datei aus der letzten Lerneinheit an. Die Datei definiert einen App Service-Plan, eine Web-App, einen Azure SQL-Server und eine Azure SQL-Datenbank. Sie möchten dem Bereitstellungsstapel einen vorhandenen Log Analytics-Arbeitsbereich hinzufügen. Der Arbeitsbereich befindet sich in derselben Ressourcengruppe, in der auch die verwalteten Ressourcen vorhanden sind.
Um den vorhandenen Log Analytics-Arbeitsbereich hinzuzufügen, müssen Sie der Bicep-Datei seine Definition hinzufügen. Beachten Sie, dass Sie keinen Code einschließen müssen, der den Arbeitsbereich als vorhandene Ressource beschreibt.
// 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'
@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
}
}
// 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'
}
}
}
Mit der geänderten Bicep-Datei können Sie den Bereitstellungsstapel aktualisieren, damit die an den Ressourcen in der Bicep-Datei vorgenommenen Änderungen implementiert werden.
Verwenden Sie den az stack group create
-Befehl, um einen Bereitstellungsstapel mithilfe der Azure CLI zu aktualisieren.
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage detachAll \
--deny-settings-mode none
Mit der geänderten Bicep-Datei können Sie den Bereitstellungsstapel aktualisieren, damit die an den Ressourcen in der Bicep-Datei vorgenommenen Änderungen implementiert werden.
Verwenden Sie den Befehl Set-AzResourceGroupDeploymentStack
, um einen Bereitstellungsstapel mit Azure PowerShell zu aktualisieren.
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
Hinzufügen einer neuen verwalteten Ressource
Der Vorgang zum Hinzufügen einer neuen Ressource zu einem Bereitstellungsstapel ist identisch mit dem Hinzufügen einer vorhandenen Ressource zum Stapel. Sie müssen einfach die vorhandene Ressource in der Bicep-Datei, ARM-JSON-Vorlage oder Vorlagenspezifikation definieren. Am Ende verwaltet der Bereitstellungsstapel die neue Ressource.
Sehen Sie sich die Bicep-Datei aus dem vorherigen Abschnitt an. Die Datei definiert jetzt einen App Service-Plan, einen App-Dienst, einen Azure SQL-Server und eine Azure SQL-Datenbank sowie einen Log Analytics-Arbeitsbereich. Sie möchten dem Bereitstellungsstapel eine neue Application Insights-Instanz hinzufügen und den App-Dienst für die Verwendung der Instanz konfigurieren. Um die neue Application Insights-Instanz hinzuzufügen, müssen Sie der Bicep-Datei ihre Definition hinzufügen und den App-Dienst so aktualisieren, dass die neue Instanz verwendet wird.
// 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
}
}
Mit der geänderten Bicep-Datei können Sie den Bereitstellungsstapel aktualisieren, damit die an den Ressourcen in der Bicep-Datei vorgenommenen Änderungen implementiert werden.
Verwenden Sie den az stack group create
-Befehl, um einen Bereitstellungsstapel mithilfe der Azure CLI zu aktualisieren.
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage detachAll \
--deny-settings-mode none
Hinweis
Die Azure CLI verfügt nicht über einen dedizierten Befehl zum Aktualisieren eines Bereitstellungsstapels. Verwenden Sie den create-Befehl, um den Stapel zu aktualisieren.
Beim Ausführen einer Aktualisierung für den Stapel erhalten Sie eine Meldung, die besagt, dass der Stapel bereits im aktuellen Abonnement vorhanden ist. Wenn sich der Wert des Parameters Aktion für Nichtverwalten ändert, werden Sie durch die Warnung über die neuen Werte benachrichtigt.
Mit der geänderten Bicep-Datei können Sie den Bereitstellungsstapel aktualisieren, damit die an den Ressourcen in der Bicep-Datei vorgenommenen Änderungen implementiert werden.
Verwenden Sie den Befehl Set-AzResourceGroupDeploymentStack
, um einen Bereitstellungsstapel mit Azure PowerShell zu aktualisieren.
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
Wie Sie sehen können, ist der Vorgang zum Hinzufügen einer vorhandenen Ressource oder einer neuen Ressource identisch.