Exercice : Déployer des ressources de manière conditionnelle

Effectué

Notes

La première fois que vous activez un bac à sable et que vous acceptez les conditions d’utilisation, votre compte Microsoft est associé à un nouveau répertoire Azure appelé Microsoft Learn Sandbox (bac à sable Microsoft Learn). Vous êtes également ajouté à un abonnement spécial nommé Abonnement Concierge.

Vous devez déployer les ressources de votre entreprise de jouets dans divers environnements et vous souhaitez utiliser des paramètres et des conditions pour contrôler ce qui est déployé dans chaque environnement.

Dans cet exercice, vous créez un serveur logique Azure SQL et une base de données. Vous ajoutez ensuite des paramètres d’audit pour vérifier l’activation de l’audit, mais vous souhaitez l’activer uniquement lorsque vous effectuez le déploiement dans un environnement de production. À des fins d’audit, vous devez avoir un compte de stockage, que vous déployez également uniquement lorsque vous déployez des ressources dans un environnement de production.

Pendant ce processus, vous allez :

  • Créer un fichier Bicep qui définit un serveur logique avec une base de données.
  • Ajouter un compte de stockage et des paramètres d’audit SQL, chacun d’eux étant déployé avec une condition.
  • Configurer une infrastructure pour votre environnement de développement, puis vérifier le résultat.
  • Redéployer votre infrastructure dans votre environnement de production, puis examiner les modifications.

Cet exercice utilise l’extension Bicep pour Visual Studio Code. Assurez-vous d’installer cette extension dans Visual Studio Code.

Créer un modèle Bicep avec un serveur logique et une base de données

  1. Ouvrez Visual Studio Code.

  2. Créez un fichier nommé main.bicep.

  3. Enregistrez le fichier vide afin que Visual Studio Code charge les outils Bicep.

    Vous pouvez soit sélectionner Fichier>Enregistrer sous, soit Ctrl+S dans Windows (⌘+S sur macOS). Veillez à mémoriser l’emplacement où vous avez enregistré le fichier. Par exemple, vous pouvez créer un dossier templates où l’enregistrer.

  4. Pour définir un serveur logique et une base de données, ajoutez le contenu suivant au fichier, ainsi que les paramètres et les variables dont ces ressources ont besoin. Entrez ces informations vous-même au lieu d’effectuer un copier-coller afin de voir comment les outils vous aident à écrire vos fichiers Bicep.

    @description('The Azure region into which the resources should be deployed.')
    param location string
    
    @secure()
    @description('The administrator login username for the SQL server.')
    param sqlServerAdministratorLogin string
    
    @secure()
    @description('The administrator login password for the SQL server.')
    param sqlServerAdministratorLoginPassword string
    
    @description('The name and tier of the SQL database SKU.')
    param sqlDatabaseSku object = {
      name: 'Standard'
      tier: 'Standard'
    }
    
    var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
    var sqlDatabaseName = 'TeddyBear'
    
    resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdministratorLogin
        administratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }
    
    resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: sqlDatabaseSku
    }
    

    Notez que tous les paramètres incluent des éléments décoratifs @description, ce qui les rend plus faciles à utiliser. Notez également que les paramètres sqlServerAdministratorLogin et sqlServerAdministratorLoginPassword ont l’élément décoratif @secure appliqué. Cela indique à Bicep que ces valeurs de paramètre sont sensibles. Azure n’imprime pas les valeurs sensibles dans les journaux.

Ajout d’un compte de stockage

Dans les paramètres d’audit des serveurs logiques, vous devez spécifier un compte de stockage pour contenir les données d’audit. Vous allez mettre à jour votre fichier Bicep pour créer ce compte de stockage, mais uniquement lorsque l’audit sera activé.

  1. Sous les déclarations de paramètres, ajoutez les paramètres suivants :

    @description('The name of the environment. This must be Development or Production.')
    @allowed([
      'Development'
      'Production'
    ])
    param environmentName string = 'Development'
    
    @description('The name of the audit storage account SKU.')
    param auditStorageAccountSkuName string = 'Standard_LRS'
    
  2. Sous les déclarations de variables, ajoutez les variables suivantes :

    var auditingEnabled = environmentName == 'Production'
    var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
    

    Notez que vous créez une variable appelée auditingEnabled, que vous utiliserez comme condition de déploiement des ressources d’audit. Lorsque vous créez une variable comme celle-ci, vous rendez votre code Bicep plus clair et facile à lire. Toute personne qui examine les conditions de vos ressources comprendra ce qui se passe.

    Notez également que la variable auditStorageAccountName utilise une fonction appelée take(). Les noms de compte de stockage ont une longueur maximale de 24 caractères. Par conséquent, cette fonction tronque la fin de la chaîne pour garantir que le nom est valide.

  3. En bas du fichier, sous les ressources, ajoutez la définition de ressource suivante pour le compte de stockage :

    resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
      name: auditStorageAccountName
      location: location
      sku: {
        name: auditStorageAccountSkuName
      }
      kind: 'StorageV2'  
    }
    

    Notez que les définitions pour le compte de stockage incluent le mot clé if, qui spécifie une condition de déploiement.

Ajouter des paramètres d’audit

  1. Sous la ressource de compte de stockage que vous venez d’ajouter, ajoutez les éléments suivants :

    resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
      parent: sqlServer
      name: 'default'
      properties: {
        state: 'Enabled'
        storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
        storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
      }
    }
    

    Notez que la définition comprend la même condition if que le compte de stockage. En outre, les propriétés storageEndpoint et storageAccountAccessKey utilisent l’opérateur ternaire point d’interrogation (?) pour garantir que leurs valeurs sont toujours valides. Si vous ne le faites pas, Azure Resource Manager évalue les valeurs de l’expression avant d’évaluer la condition de déploiement des ressources et renvoie une erreur, car le compte de stockage est introuvable.

  2. Enregistrez les modifications du fichier.

Vérifier votre fichier Bicep

Une fois que vous avez effectué toutes les modifications précédentes, votre fichier Bicep doit ressembler à l’exemple suivant :

@description('The Azure region into which the resources should be deployed.')
param location string

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
  name: 'Standard'
  tier: 'Standard'
}

@description('The name of the environment. This must be Development or Production.')
@allowed([
  'Development'
  'Production'
])
param environmentName string = 'Development'

@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'

var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

Si ce n’est pas le cas, copiez l’exemple ou ajustez votre modèle pour qu’il corresponde à l’exemple.

Déployer le modèle Bicep sur Azure

Pour déployer ce modèle sur Azure, vous devez vous connecter à votre compte Azure à partir du terminal Visual Studio Code. Veillez à installer Azure CLI sans oublier de vous connecter avec le même compte que celui utilisé pour activer le bac à sable.

  1. Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.

  2. Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est bash, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec l’option bash affichée.

  3. Si un interpréteur de commandes autre que bash apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis Azure Cloud Shell (Bash).

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec la liste déroulante de l’interpréteur de commande affichée et l’option Git Bash par défaut sélectionnée.

  4. Dans la liste des interpréteurs de commandes de terminal, sélectionnez bash.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec le terminal bash sélectionné.

  5. Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :

    cd templates
    

Installer Bicep

Exécutez la commande suivante pour vous assurer de disposer de la dernière version de Bicep :

az bicep install && az bicep upgrade

Connexion à Azure

  1. Dans le terminal Visual Studio Code, connectez-vous à Azure en exécutant la commande suivante :

    az login
    
  2. Dans le navigateur qui s’ouvre, connectez-vous à votre compte Azure.

    Le terminal Visual Studio Code affiche la liste des abonnements associés à ce compte.

  3. Définissez l’abonnement par défaut pour toutes les commandes Azure CLI que vous exécutez dans cette session.

    az account set --subscription "Concierge Subscription"
    

    Notes

    Si vous avez utilisé plusieurs bacs à sable récemment, le terminal risque d’afficher plusieurs instances de l’abonnement Concierge. Dans ce cas, utilisez les deux étapes suivantes pour en définir un comme l’abonnement par défaut. Si la commande précédente a réussi et qu’un seul abonnement Concierge est listé, ignorez les deux étapes suivantes.

  4. Obtenez les ID des abonnements Concierge.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. Définissez l’abonnement par défaut en utilisant l’ID d’abonnement. Remplacez {your subscription ID} par l’ID du dernier abonnement Concierge.

    az account set --subscription {your subscription ID}
    

Définir le groupe de ressources par défaut

Quand vous utilisez Azure CLI, vous pouvez définir le groupe de ressources par défaut et omettre le paramètre du reste des commandes Azure CLI dans cet exercice. Définissez le paramètre par défaut sur le groupe de ressources qui est créé pour vous dans l’environnement de bac à sable.

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

Déployer le modèle sur Azure à l’aide d’Azure CLI

Dans le terminal Visual Studio Code, déployez le modèle Bicep sur Azure en exécutant le code suivant. Notez que vous définissez explicitement le paramètre location sur westus3.

az deployment group create --template-file main.bicep --parameters location=westus3

Pour déployer ce modèle sur Azure, connectez-vous à votre compte Azure à partir du terminal Visual Studio Code. Vérifiez que vous avez installé Azure PowerShell et connectez-vous au même compte que celui qui a activé le bac à sable.

  1. Dans le menu Terminal, sélectionnez Nouveau terminal. La fenêtre de terminal s’ouvre généralement dans la moitié inférieure de votre écran.

  2. Si l’interpréteur de commandes affiché sur le côté droit de la fenêtre de terminal est powershell ou pwsh, il s’agit du bon interpréteur de commandes qui est ouvert et vous pouvez passer à la section suivante.

    Capture d’écran de la fenêtre de terminal Visual Studio Code, avec l’option pwsh indiquée dans la liste déroulante de l’interpréteur de commande.

  3. Si un shell autre que powershell ou pwsh apparaît, sélectionnez la flèche déroulante des interpréteurs de commandes, puis PowerShell.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec la liste déroulante de l’interpréteur de commande affichée avec PowerShell sélectionné.

  4. Dans la liste d’interpréteurs de commandes de terminal, sélectionnez powershell ou pwsh.

    Capture d’écran de la fenêtre de terminal Visual Studio Code avec le terminal PowerShell sélectionné.

  5. Dans le terminal, accédez au répertoire où vous avez enregistré votre modèle. Par exemple, si vous avez enregistré votre modèle dans le dossier templates, vous pouvez utiliser la commande suivante :

    Set-Location -Path templates
    

Installer l’interface CLI Bicep

Pour utiliser Bicep à partir d’Azure PowerShell, installez l’interface CLI de Bicep.

Connectez-vous à Azure en utilisant Azure PowerShell

  1. Dans le terminal Visual Studio Code, exécutez la commande suivante :

    Connect-AzAccount
    

    Un navigateur s’ouvre pour vous permettre de vous connecter à votre compte Azure.

  2. Une fois que vous êtes connecté à Azure, le terminal affiche une liste des abonnements associés à ce compte.

    Si vous avez activé le bac à sable, un abonnement appelé Abonnement Concierge s’affiche. Utilisez-le pour le reste de l’exercice.

  3. Définissez l’abonnement par défaut pour toutes les commandes Azure PowerShell que vous exécutez dans cette session.

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    Notes

    Si vous avez utilisé plusieurs bacs à sable récemment, le terminal risque d’afficher plusieurs instances de l’abonnement Concierge. Dans ce cas, utilisez les deux étapes suivantes pour en définir un comme l’abonnement par défaut. Si la commande précédente a réussi et qu’un seul abonnement Concierge est listé, ignorez les deux étapes suivantes.

  4. Obtenir l’ID d’abonnement. L’exécution de la commande suivante liste vos abonnements et leurs ID. Recherchez Concierge Subscription, puis copiez l’ID de la deuxième colonne. Il doit ressembler à ceci : aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  5. Remplacez votre abonnement actif par l’abonnement Concierge. Veillez à remplacer {Votre ID d’abonnement} par celui que vous avez copié.

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

Définir votre groupe de ressources par défaut

Vous pouvez définir le groupe de ressources par défaut et omettre le paramètre du reste des commandes Azure PowerShell dans cet exercice. Définissez ce paramètre par défaut sur le groupe de ressources créé pour vous dans l’environnement de bac à sable.

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

Déployer le modèle sur Azure à l’aide d’Azure PowerShell

Dans le terminal Visual Studio Code, déployez le modèle sur Azure en exécutant la commande Azure PowerShell suivante. Ce processus peut prendre quelques minutes. Vous aurez alors un déploiement réussi.

New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3

Vous êtes invité à entrer les valeurs des paramètres sqlServerAdministratorLogin et sqlServerAdministratorLoginPassword lorsque vous exécutez le déploiement.

Conseil

Lorsque vous entrez les paramètres sécurisés, les valeurs que vous choisissez doivent respecter certaines règles :

  • sqlServerAdministratorLogin ne doit pas être un nom de connexion facile à deviner, tel que admin ou root. Il ne peut contenir que des caractères alphanumériques et doit commencer par une lettre.
  • sqlServerAdministratorLoginPassword doit comporter au moins huit caractères et inclure des lettres minuscules, des lettres majuscules, des chiffres et des symboles. Pour plus d’informations sur la complexité des mots de passe, consultez la Stratégie de mot de passe pour Azure SQL.

Si les valeurs des paramètres ne satisfont pas aux exigences, Azure SQL ne déploiera pas votre serveur logique.

Veillez également à noter l’identifiant et le mot de passe que vous indiquez. Vous les utiliserez à nouveau prochainement.

Étant donné que vous n’avez pas spécifié de valeur pour le paramètre environmentName, la valeur par défaut Development est utilisée.

Attendez que le déploiement se termine. Si votre déploiement échoue avec un message indiquant qu’un emplacement n’accepte pas la création de nouveaux serveurs Windows Azure SQL Database, sélectionnez une autre région comme eastus ou eastus2.

Vérifier le déploiement

Utilisez le portail Azure pour inspecter les ressources que vous déployez et pour inspecter les résultats de chaque déploiement.

  1. Accédez au portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable en procédant ainsi :

    a. Sélectionnez votre avatar en haut à droite.
    b. Sélectionnez Changer de répertoire. Dans la liste, sélectionnez le répertoire Microsoft Learn Sandbox (Bac à sable Microsoft Learn).

  2. Dans le volet de gauche, sélectionnez Groupes de ressources.

  3. Sélectionnez [nom du groupe de ressources du bac à sable].

  4. Dans la section Vue d’ensemble, vous pouvez voir qu’un déploiement a réussi. Vous pouvez également voir qu’un serveur logique et une base de données SQL sont déployés, mais que le compte de stockage pour l’audit n’est pas déployé.

    Notes

    Le compte de stockage dont le nom commence par cloudshell n’est pas lié à votre déploiement et a été créé par le bac à sable Learn.

    Capture d’écran du volet de présentation du groupe de ressources dans le portail Azure, avec une section qui affiche un déploiement réussi.

  5. À côté de Déploiements, sélectionnez 1 réussi pour afficher les détails du déploiement.

    Capture d’écran du volet de présentation du groupe de ressources dans le portail Azure, affichant des détails supplémentaires sur le déploiement réussi.

  6. Sélectionnez le déploiement appelé main pour afficher les ressources qui ont été déployées, puis sélectionnez Détails du déploiement pour développer les informations.

    Dans ce cas, un serveur logique et une base de données SQL sont déployés. Notez que le compte de stockage et les paramètres d’audit ne figurent pas dans la liste des ressources.

    Capture d’écran du volet de présentation du groupe de ressources dans le portail Azure pour le déploiement spécifique, avec un serveur logique et une ressource de base de données.

  7. Laissez la page ouverte dans votre navigateur. Vous allez à nouveau vérifier les déploiements plus tard.

Redéployer pour l’environnement de production

Dans le déploiement précédent, la valeur par défaut du paramètre environmentName a été utilisée, ce qui signifie qu’elle était définie sur Development.

À présent, vous définissez explicitement la valeur de paramètre sur Production. En effectuant cette modification, vous vous attendez à ce que le compte de stockage à des fins d’audit soit déployé, et l’audit sera activé sur le serveur logique.

Déployer le modèle pour l’environnement de production

Dans le terminal Visual Studio Code, déployez le modèle Bicep sur Azure en exécutant le code suivant :

az deployment group create --template-file main.bicep --parameters environmentName=Production location=westus3

Dans le terminal Visual Studio Code, déployez le modèle sur Azure en exécutant la commande Azure PowerShell suivante :

New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3

Attention

Veillez à utiliser les mêmes identifiant et mot de passe que ceux que vous avez utilisés précédemment, ou le déploiement ne se terminera pas correctement.

Après une minute ou deux, le déploiement devrait se terminer avec succès.

Vérifier le redéploiement

Pour effectuer cet exercice, vérifiez que le redéploiement s’est terminé correctement et que l’audit a été activé.

  1. Revenez au portail Azure et accédez à votre groupe de ressources. Si vous avez déjà ouvert le groupe de ressources, sélectionnez Actualiser.

    Vous devriez voir qu’un compte de stockage supplémentaire a été déployé à des fins d’audit.

    Capture d’écran du volet de présentation du groupe de ressources dans le portail Azure, indiquant qu’un compte de stockage est déployé pour l’audit.

  2. Sélectionnez votre serveur logique (recherchez la ressource avec le type SQL Server).

  3. Dans le champ de recherche, entrez Audit. Sélectionnez Audit sous Sécurité.

    Capture d’écran de l’interface du portail Azure pour le serveur logique, montrant le champ de recherche avec l’audit entré.

  4. Vérifiez que l’audit a été activé pour ce serveur logique.

    Capture d’écran de l’interface du portail Azure pour le serveur logique, indiquant que la configuration de l’audit est activée.