Exercice – Déploiement de ressources dans plusieurs étendues avec des modules
Notes
Cet exercice nécessite un abonnement Azure. À défaut, vous pouvez créer un abonnement gratuit.
L’équipe R&D vous a demandé votre aide pour créer un réseau virtuel dans l’abonnement Project Teddybear. Or, vous savez que vous allez seconder l’équipe sur d’autres abonnements à l’avenir. Vous décidez donc d’étendre votre modèle Bicep réutilisable pour déployer un réseau virtuel que les membres de l’équipe pourront utiliser.
Dans cet exercice, vous allez mettre à jour le modèle que vous avez commencé à construire dans le dernier exercice.
Pendant ce processus, vous allez :
- Mettre à jour le modèle étendu à l’abonnement pour créer un groupe de ressources
- Créer un module Bicep distinct avec un réseau virtuel et utiliser des paramètres pour contrôler la façon dont le réseau virtuel est configuré
- Mettre à jour le modèle pour déployer le module dans le groupe de ressources
- Déployez le modèle.
Pour mener à bien cet exercice, vous devez disposer de l’autorisation de déployer des ressources dont l’étendue est délimitée par l’abonnement. Si vous ne pouvez pas répondre à cet impératif avec votre compte Azure actuel, vous pouvez obtenir un essai gratuit pour créer un abonnement Azure et un locataire. Vous pouvez également ignorer les étapes de déploiement de cet exercice.
Créer un groupe de ressources
Dans Visual Studio Code, ouvrez le fichier main.bicep que vous avez créé dans l’exercice précédent.
Sous les définitions de variables actuelles, ajoutez la définition de variable suivante :
var resourceGroupName = 'ToyNetworking'
En bas du fichier, ajoutez la définition de ressource suivante :
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = { name: resourceGroupName location: deployment().location }
Comme vous pouvez le constater, le groupe de ressources est défini comme n’importe quelle autre ressource. Un groupe de ressources constitue une ressource étendue à l’abonnement qui peut être déployée et gérée dans des fichiers Bicep pour lesquels
targetScope
est égal àsubscription
.Enregistrez les modifications du fichier.
Ajout d’un module pour créer un réseau virtuel
Vous allez maintenant créer un module Bicep pour le réseau virtuel de l’équipe R&D. Vous déploierez les ressources du module dans le groupe de ressources plus tard dans cet exercice.
Dans Visual Studio Code, créez un nouveau dossier appelé modules dans le même dossier que celui où vous avez créé votre fichier main.bicep.
Dans le dossier modules, créez et enregistrez un fichier appelé virtualNetwork.bicep.
Dans le fichier virtualNetwork.bicep, ajoutez le contenu suivant :
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Comme vous pouvez le constater, aucun
targetScope
n’est spécifié pour ce module. Ce n’est en effet pas nécessaire lorsque le fichier Bicep cible un groupe de ressources.Enregistrez les modifications du fichier.
Utilisation du module dans le déploiement de l’abonnement
Vous pouvez maintenant indiquer à Bicep de déployer le module dans le groupe de ressources.
Dans le fichier main.bicep dans Visual Studio Code, ajoutez les définitions de paramètre suivantes sous la ligne
targetScope
:param virtualNetworkName string param virtualNetworkAddressPrefix string
Ces paramètres rendent le modèle réutilisable. Chaque fois que l’équipe R&D a besoin d’un nouvel abonnement, vous pouvez créer un réseau virtuel avec un nom et une plage d’adresses IP uniques.
En bas du fichier, ajoutez la définition de module suivante :
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Comme vous pouvez le constater, le
scope
du module est spécifié explicitement. Bicep comprend que les ressources du module doivent être déployées dans le groupe de ressources créé plus tôt dans le fichier.
Vérification du modèle
Votre fichier main.bicep se présente ainsi :
targetScope = 'subscription'
param virtualNetworkName string
param virtualNetworkAddressPrefix string
var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'
var resourceGroupName = 'ToyNetworking'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
name: policyDefinitionName
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
allOf: [
{
field: 'type'
equals: 'Microsoft.Compute/virtualMachines'
}
{
anyOf: [
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_F*'
}
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_G*'
}
]
}
]
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
name: policyAssignmentName
properties: {
policyDefinitionId: policyDefinition.id
}
}
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = {
name: resourceGroupName
location: deployment().location
}
module virtualNetwork 'modules/virtualNetwork.bicep' = {
scope: resourceGroup
name: 'virtualNetwork'
params: {
virtualNetworkName: virtualNetworkName
virtualNetworkAddressPrefix: virtualNetworkAddressPrefix
}
}
Votre fichier modules/virtualNetwork.bicep se présente ainsi :
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Si l’un des fichiers ne correspond pas, copiez l’exemple ou ajustez votre modèle.
Déployer le modèle sur Azure
Dans le terminal Visual Studio Code, déployez le modèle en utilisant les commandes Azure CLI suivantes :
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today
virtualNetworkName="rnd-vnet-001"
virtualNetworkAddressPrefix="10.0.0.0/24"
az deployment sub create \
--name $deploymentName \
--location westus \
--template-file $templateFile \
--parameters virtualNetworkName=$virtualNetworkName \
virtualNetworkAddressPrefix=$virtualNetworkAddressPrefix
Dans le terminal Visual Studio Code, déployez le modèle en utilisant les commandes Azure PowerShell suivantes :
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"
$virtualNetworkName = 'rnd-vnet-001'
$virtualNetworkAddressPrefix = '10.0.0.0/24'
New-AzSubscriptionDeployment `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile `
-virtualNetworkName $virtualNetworkName `
-virtualNetworkAddressPrefix $virtualNetworkAddressPrefix
Comme vous pouvez le constater, des valeurs sont transmises pour les paramètres virtualNetworkName
et virtualNetworkAddressPrefix
. Si une autre équipe R&D vous demande de lui préparer un abonnement, vous pouvez modifier ces valeurs pour lui fournir son propre réseau virtuel.
Le déploiement peut prendre une ou deux minutes. Une notification de déploiement réussi s’affiche ensuite.
Vérifier le déploiement
Vous allez maintenant vérifier le groupe de ressources et le déploiement que le module a créés.
Accédez au portail Azure.
Dans le volet gauche, sélectionnez Groupes de ressources. Comme vous pouvez le constater, le groupe de ressources ToyNetworking a été créé.
Sélectionnez le groupe de ressources ToyNetworking. Comme vous pouvez le constater, le module a bien été déployé dans le groupe de ressources, et le réseau virtuel a été créé :
Nettoyer les ressources
Vous avez déployé les ressources étendues à l’abonnement (notamment un groupe de ressources). Vous avez par ailleurs utilisé un module pour déployer la ressource dans le groupe de ressources que vous avez créé. Vous pouvez supprimer les ressources de stratégie et le groupe de ressources que vous avez créés.
Attention
Cette commande supprime définitivement le groupe de ressources nommé ToyNetworking et toutes ses ressources. Si vous avez déployé autre chose dans ce groupe de ressources, ignorez cette étape.
subscriptionId=$(az account show --query 'id' --output tsv)
az policy assignment delete --name 'DenyFandGSeriesVMs' --scope "/subscriptions/$subscriptionId"
az policy definition delete --name 'DenyFandGSeriesVMs' --subscription $subscriptionId
az group delete --name ToyNetworking
$subscriptionId = (Get-AzContext).Subscription.Id
Remove-AzPolicyAssignment -Name 'DenyFandGSeriesVMs' -Scope "/subscriptions/$subscriptionId"
Remove-AzPolicyDefinition -Name 'DenyFandGSeriesVMs' -SubscriptionId $subscriptionId
Remove-AzResourceGroup -Name ToyNetworking