Lägga till resurser i en distributionsstack

Slutförd

Inlåningsprogrammet fortsätter att utvecklas under hela utvecklingen. Teamet lägger till resurser och testningsfunktioner dagligen. Observerbarhet läggs till i programmet med en befintlig Log Analytics-arbetsyta och en ny Application Insights-instans. Du vill fortsätta att hantera resurserna som en enda atomisk enhet. Du behöver lära dig mer om att lägga till både befintliga och nya resurser i en distributionsstack.

I den här lektionen får du lära dig hur du lägger till både befintliga och nya resurser i en distributionsstack som hanterade resurser.

Kommentar

Kommandona i den här enheten visas för att illustrera begrepp. Kör inte kommandona än. Du kommer att öva på det du lär dig här snart.

Lägga till en befintlig resurs

De resurser som ett program använder ändras över tid. Hur uppdaterar vi en distributionsstack för att inkludera en redan befintlig resurs i Azure?

Med Bicep kan du definiera en resurs som redan finns i Azure. Att definiera en befintlig resurs liknar att definiera en ny resurs med små skillnader. Du kan till exempel definiera en befintlig resurs i en resursdeklaration med hjälp av nyckelordet existing :

resource logAnalyticsWorkspace 'Microsoft.OperationsManagement/solutions@2015-11-01-preview' existing  = {
    name: 'log-deposits'
}

När vi lägger till en befintlig resurs som en hanterad resurs i en distributionsstack behöver vi inte använda det här existing nyckelordet. Vi behöver helt enkelt definiera den befintliga resursen i vår Bicep-fil, ARM JSON-mall eller mallspecifikation. Till slut hanterar distributionsstacken den befintliga resursen.

Nu ska vi överväga vår Bicep-fil från den senaste lektionen. Vår fil definierar en App Service-plan, en webbapp och en Azure SQL-server och databas. Vi vill lägga till en befintlig Log Analytics-arbetsyta i vår distributionsstack. Arbetsytan finns i samma resursgrupp där våra hanterade resurser finns.

Om du vill lägga till den befintliga Log Analytics-arbetsytan måste vi lägga till dess definition i vår Bicep-fil. Observera att vi inte behöver inkludera någon kod som beskriver arbetsytan som en befintlig resurs.

// 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'
    }
  }
}

När Bicep-filen har ändrats vill vi uppdatera distributionsstacken så att de ändringar som görs i resurserna i Bicep-filen implementeras.

Om du vill uppdatera en distributionsstack med Hjälp av Azure CLI använder du az stack group create kommandot .

az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none

När Bicep-filen har ändrats vill vi uppdatera distributionsstacken så att de ändringar som görs i resurserna i Bicep-filen implementeras.

Om du vill uppdatera en distributionsstack med Hjälp av Azure PowerShell använder du Set-AzResourceGroupDeploymentStack kommandot .

Set-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None

Lägga till en ny hanterad resurs

Processen med att lägga till en ny resurs i en distributionsstack är identisk med att lägga till en befintlig resurs i stacken. Vi behöver helt enkelt definiera den befintliga resursen i vår Bicep-fil, ARM JSON-mall eller mallspecifikation. I slutändan hanterar distributionsstacken den nya resursen.

Nu ska vi överväga vår Bicep-fil från föregående avsnitt. Vår fil definierar nu en App Service-plan, apptjänst, en Azure SQL-server och databas samt en Log Analytics-arbetsyta. Vi vill lägga till en ny Application Insights-instans i vår distributionsstack och konfigurera apptjänsten så att den använder instansen. För att lägga till den nya Application Insights-instansen måste vi lägga till dess definition i vår Bicep-fil och uppdatera apptjänsten för att använda den nya instansen.

// 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
  }
}

När Bicep-filen har ändrats vill vi uppdatera distributionsstacken så att de ändringar som görs i resurserna i Bicep-filen implementeras.

Om du vill uppdatera en distributionsstack med Hjälp av Azure CLI använder du az stack group create kommandot .

az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none

Kommentar

Azure CLI har inget dedikerat kommando för att uppdatera en distributionsstack. Använd kommandot create för att uppdatera stacken.

När du utför en uppdatering på stacken får du ett meddelande om att stacken redan finns i den aktuella prenumerationen. Om värdet för åtgärden för ohanterade parametern ändras varnar varningen dig om de nya värdena.

När Bicep-filen har ändrats vill vi uppdatera distributionsstacken så att de ändringar som görs i resurserna i Bicep-filen implementeras.

Om du vill uppdatera en distributionsstack med Hjälp av Azure PowerShell använder du Set-AzResourceGroupDeploymentStack kommandot .

Set-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None

Som du ser är processen med att lägga till en befintlig resurs eller en ny resurs densamma.