Dodawanie zasobów do stosu wdrożenia

Ukończone

Aplikacja depozytów nadal rozwija się w całym rozwoju. Zespół codziennie dodaje zasoby i testuje funkcje. Możliwość obserwowania jest dodawana do aplikacji z istniejącym obszarem roboczym usługi Log Analytics i nowym wystąpieniem usługi Application Insights. Chcesz nadal zarządzać zasobami jako pojedynczą jednostką atomową. Musisz dowiedzieć się więcej na temat dodawania istniejących i nowych zasobów do stosu wdrożenia.

W tej lekcji dowiesz się, jak dodać zarówno istniejące, jak i nowe zasoby do stosu wdrożenia jako zasoby zarządzane.

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.

Dodawanie istniejącego zasobu

Zasoby używane przez aplikację zmieniają się w czasie. Jak zaktualizować stos wdrożenia, aby uwzględnić już istniejący zasób na platformie Azure?

Bicep umożliwia zdefiniowanie zasobu, który już istnieje na platformie Azure. Definiowanie istniejącego zasobu jest podobne do definiowania nowego zasobu z niewielkimi różnicami. Można na przykład zdefiniować istniejący zasób w deklaracji zasobu przy użyciu słowa kluczowego existing :

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

Gdy dodajemy istniejący zasób jako zasób zarządzany do stosu wdrożenia, nie musimy używać tego existing słowa kluczowego. Wystarczy zdefiniować istniejący zasób w naszym pliku Bicep, szablonie JSON usługi ARM lub specyfikacji szablonu. W końcu stos wdrożenia zarządza istniejącym zasobem.

Rozważmy nasz plik Bicep z ostatniej lekcji. Nasz plik definiuje plan usługi App Service, aplikację internetową oraz serwer i bazę danych Azure SQL. Chcemy dodać istniejący obszar roboczy usługi Log Analytics do naszego stosu wdrożenia. Obszar roboczy znajduje się w tej samej grupie zasobów, w której istnieją nasze zarządzane zasoby.

Aby dodać istniejący obszar roboczy usługi Log Analytics, musimy dodać jego definicję do pliku Bicep. Zwróć uwagę, że nie musimy dołączać żadnego kodu opisującego obszar roboczy jako istniejący zasób.

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

Po zmodyfikowaniu pliku Bicep chcemy zaktualizować stos wdrożenia, aby zmiany wprowadzone w zasobach w pliku Bicep zostały zaimplementowane.

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 zmodyfikowaniu pliku Bicep chcemy zaktualizować stos wdrożenia, aby zmiany wprowadzone w zasobach w pliku Bicep zostały zaimplementowane.

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

Dodawanie nowego zasobu zarządzanego

Proces dodawania nowego zasobu do stosu wdrożenia jest identyczny, aby dodać istniejący zasób do stosu. Wystarczy zdefiniować istniejący zasób w naszym pliku Bicep, szablonie JSON usługi ARM lub specyfikacji szablonu. W końcu stos wdrożenia zarządza nowym zasobem.

Rozważmy nasz plik Bicep z poprzedniej sekcji. Nasz plik definiuje teraz plan usługi App Service, usługę app service, serwer SQL platformy Azure i bazę danych oraz obszar roboczy usługi Log Analytics. Chcemy dodać nowe wystąpienie usługi Application Insights do naszego stosu wdrożenia i skonfigurować usługę app service do korzystania z wystąpienia. Aby dodać nowe wystąpienie usługi Application Insights, musimy dodać jego definicję do pliku Bicep i zaktualizować usługę aplikacji, aby używała nowego wystąpienia.

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

Po zmodyfikowaniu pliku Bicep chcemy zaktualizować stos wdrożenia, aby zmiany wprowadzone w zasobach w pliku Bicep zostały zaimplementowane.

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

Uwaga

Interfejs wiersza polecenia platformy Azure nie ma dedykowanego polecenia w celu zaktualizowania stosu wdrożenia. Użyj polecenia create, aby zaktualizować stos.

Podczas przeprowadzania aktualizacji na stosie zostanie wyświetlony komunikat informujący, że stos już istnieje w bieżącej subskrypcji. Jeśli wartość akcji dla parametru niezarządzanego zmieni się, ostrzeżenie ostrzega o nowych wartościach.

Po zmodyfikowaniu pliku Bicep chcemy zaktualizować stos wdrożenia, aby zmiany wprowadzone w zasobach w pliku Bicep zostały zaimplementowane.

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

Jak widać, proces dodawania istniejącego zasobu lub nowego zasobu jest taki sam.