Ajouter des ressources à une pile de déploiement

Effectué

L’application de dépôts continue d’évoluer tout au long du développement. L’équipe ajoute des ressources et teste des fonctionnalités quotidiennement. L’observabilité est ajoutée à l’application avec un espace de travail Log Analytics existant et une nouvelle instance Application Insights. Vous souhaitez continuer à gérer les ressources en tant qu’unité atomique unique. Vous devez en savoir plus sur l’ajout de ressources existantes et nouvelles à une pile de déploiement.

Dans cette unité, vous allez apprendre à ajouter des ressources existantes et nouvelles à une pile de déploiement en tant que ressources managées.

Remarque

Les commandes de cette unité sont présentées pour illustrer les concepts. N’exécutez pas encore les commandes. Vous allez bientôt mettre en pratique ce que vous apprenez ici.

Ajouter une ressource existante

Les ressources utilisées par une application changent au fil du temps. Comment mettre à jour une pile de déploiement pour inclure une ressource déjà existante dans Azure ?

Bicep vous permet de définir une ressource qui existe déjà dans Azure. La définition d’une ressource existante est similaire à la définition d’une nouvelle ressource avec de légères différences. Par exemple, vous pouvez définir une ressource existante dans une déclaration de ressource à l’aide du mot clé existing :

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

Lorsque nous ajoutons une ressource existante en tant que ressource managée à une pile de déploiement, nous n’avons pas besoin d’utiliser ce mot clé existing. Nous devons simplement définir la ressource existante dans notre fichier Bicep, notre modèle ARM JSON ou notre spécification de modèle. À la fin, la pile de déploiement gère la ressource existante.

Prenons le fichier Bicep de la dernière unité. Notre fichier définit un plan App Service, une application web, et un serveur et une base de données Azure SQL. Nous voulons ajouter un espace de travail Log Analytics existant à notre pile de déploiement. L’espace de travail se trouve dans le même groupe de ressources que nos ressources managées.

Pour ajouter l’espace de travail Log Analytics existant, nous devons ajouter sa définition à notre fichier Bicep. Notez que nous n’avons pas besoin d’inclure de code décrivant l’espace de travail en tant que ressource existante.

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

Avec le fichier Bicep modifié, nous souhaitons mettre à jour la pile de déploiement afin que les modifications apportées aux ressources du fichier Bicep soient implémentées.

Pour mettre à jour une pile de déploiement à l’aide d’Azure CLI, utilisez la commande 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

Avec le fichier Bicep modifié, nous souhaitons mettre à jour la pile de déploiement afin que les modifications apportées aux ressources du fichier Bicep soient implémentées.

Pour mettre à jour une pile de déploiement à l’aide d’Azure PowerShell, utilisez la commande Set-AzResourceGroupDeploymentStack.

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

Ajouter une nouvelle ressource managée

Le processus d’ajout d’une nouvelle ressource à une pile de déploiement est identique à l’ajout d’une ressource existante à la pile. Nous devons simplement définir la ressource existante dans notre fichier Bicep, notre modèle ARM JSON ou notre spécification de modèle. À la fin, la pile de déploiement gère la nouvelle ressource.

Prenons le fichier Bicep de la section précédente. Notre fichier définit désormais un plan App Service, un service d’application, un serveur et une base de données Azure SQL, ainsi qu’un espace de travail Log Analytics. Nous voulons ajouter une nouvelle instance Application Insights à notre pile de déploiement et configurer le service d’application, afin d’utiliser l’instance. Pour ajouter la nouvelle instance Application Insights, nous devons ajouter sa définition à notre fichier Bicep et mettre à jour le service d’application, afin d’utiliser la nouvelle instance.

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

Avec le fichier Bicep modifié, nous souhaitons mettre à jour la pile de déploiement afin que les modifications apportées aux ressources du fichier Bicep soient implémentées.

Pour mettre à jour une pile de déploiement à l’aide d’Azure CLI, utilisez la commande 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

Remarque

Azure CLI ne dispose pas d’une commande spécifique pour mettre à jour une pile de déploiement. Utilisez la commande create pour mettre à jour la pile.

Lorsque vous effectuez une mise à jour de la pile, vous recevez un message qui indique que la pile existe déjà dans l’abonnement actif. Si la valeur de l’action sur un paramètre non managé change, l’avertissement vous signale de nouvelles valeurs.

Avec le fichier Bicep modifié, nous souhaitons mettre à jour la pile de déploiement afin que les modifications apportées aux ressources du fichier Bicep soient implémentées.

Pour mettre à jour une pile de déploiement à l’aide d’Azure PowerShell, utilisez la commande Set-AzResourceGroupDeploymentStack.

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

Comme vous pouvez le voir, le processus d’ajout d’une ressource existante ou d’une nouvelle ressource est le même.