Partager via


Démarrage rapide : Créer une machine virtuelle Azure Operator Nexus à l’aide de Bicep

  • Déployer une machine virtuelle Azure Nexus à l’aide de Bicep

Ce guide de démarrage rapide est conçu pour vous aider à commencer à utiliser des machines virtuelles Nexus pour héberger des fonctions de réseau virtuel (VNF). En suivant les étapes décrites dans ce guide, vous pouvez rapidement et facilement créer une machine virtuelle Nexus personnalisée répondant à vos besoins et exigences spécifiques. Que vous soyez débutant ou expert en réseau Nexus, ce guide est ici pour vous aider. Vous apprenez tout ce dont vous avez besoin pour créer et personnaliser des machines virtuelles Nexus pour héberger des fonctions de réseau virtuel.

Avant de commencer

Si vous n’avez pas de compte Azure, créez un compte gratuit avant de commencer.

  • Installez la dernière version des extensions Azure CLI nécessaires.

  • Si vous avez plusieurs abonnements Azure, sélectionnez l’ID d’abonnement approprié dans lequel les ressources doivent être facturées à l’aide de la az account commande.

  • Avant de poursuivre la création d’une machine virtuelle, assurez-vous que l’image conteneur à utiliser est créée conformément aux instructions.

  • Créez un groupe de ressources à l’aide de la commande az group create. Un groupe de ressources Azure est un groupe logique dans lequel des ressources Azure sont déployées et gérées. Lorsque vous créez un groupe de ressources, vous êtes invité à spécifier un emplacement. Cet emplacement est l'emplacement de stockage des métadonnées de votre groupe de ressources et l'endroit où vos ressources s'exécutent dans Azure si vous ne spécifiez pas une autre région lors de la création de la ressource. L’exemple suivant crée un groupe de ressources nommé myResourceGroup à l’emplacement eastus.

    az group create --name myResourceGroup --location eastus
    

    L’exemple de sortie suivant ressemble à la création réussie du groupe de ressources :

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  • Pour déployer un fichier Bicep ou un modèle ARM, vous devez disposer d’un accès en écriture aux ressources que vous déployez et un accès à toutes les opérations sur le type de ressource Microsoft.Resources/deployments. Par exemple, pour déployer un cluster, vous avez besoin des autorisations Microsoft.NetworkCloud/virtualMachines/write et Microsoft.Resources/deployments/*. Pour obtenir la liste des rôles et autorisations, consultez Rôles intégrés Azure.

  • Vous avez besoin de l’ID de ressource custom location de votre cluster Nexus d’opérateur Azure.

  • Vous devez créer différents réseaux en fonction de vos besoins en charge de travail spécifiques, et il est essentiel d’avoir les adresses IP appropriées disponibles pour vos charges de travail. Pour garantir une implémentation fluide, il est conseillé de consulter les équipes de support pertinentes pour obtenir de l’aide.

Vérifier le modèle

Avant de déployer le modèle de machine virtuelle, examinons le contenu pour comprendre sa structure.

@description('The name of Nexus virtual machine')
param vmName string

@description('The Azure region where the VM is to be deployed')
param location string = resourceGroup().location

@description('The custom location of the Nexus instance')
param extendedLocation string

@description('The metadata tags to be associated with the cluster resource')
param tags object = {}

@description('The name of the administrator to which the ssh public keys will be added into the authorized keys.')
@minLength(1)
@maxLength(32)
param adminUsername string = 'azureuser'

@description('Selects the boot method for the virtual machine.')
@allowed([
  'UEFI'
  'BIOS'
])
param bootMethod string = 'UEFI'

@description('The Cloud Services Network attachment ARM ID to attach to virtual machine.')
param cloudServicesNetworkId string

@description('Number of CPU cores for the virtual machine. Choose a value between 2 and 46.')
param cpuCores int = 2

@description('The memory size of the virtual machine in GiB (max 224 GiB)')
param memorySizeGB int = 4

@description('The list of network attachments to the virtual machine.')
param networkAttachments array

// {
//   attachedNetworkId: "string"
//   defaultGateway: "True"/"False"
//   ipAllocationMethod: "Dynamic"/"Static","Disabled"
//   ipv4Address: "string"
//   ipv6Address: "string"
//   networkAttachmentName: "string"
// }

@description('The Base64 encoded cloud-init network data.')
param networkData string = ''

@description('The placement hints for the virtual machine.')
param placementHints array = []
// {
//   hintType: "Affinity/AntiAffinity"
//   resourceId: string
//   schedulingExecution: "Hard/Soft"
//   scope: "Rack/Machine"
// }

@description('The list of SSH public keys for the virtual machine.')
param sshPublicKeys array
// {
//   keyData: 'string'
// }

@description('StorageProfile represents information about a disk.')
param storageProfile object = {
  osDisk: {
    createOption: 'Ephemeral'
    deleteOption: 'Delete'
    diskSizeGB: 64
  }
}

@description('The Base64 encoded cloud-init user data.')
param userData string = ''

@description('The type of the device model to use.')
@allowed([
  'T1'
  'T2'
])
param vmDeviceModel string = 'T2'

@description('The virtual machine image that is currently provisioned to the OS disk, using the full URL and tag notation used to pull the image.')
param vmImage string

@description('Credentials used to login to the image repository.')
param vmImageRepositoryCredentials object = {}
// password: "string"
// registryUrl: "string"
// username: "string"

resource vm 'Microsoft.NetworkCloud/virtualMachines@2025-09-01' = {
  name: vmName
  location: location
  extendedLocation: {
    type: 'CustomLocation'
    name: extendedLocation
  }
  tags: tags
  properties: {
    adminUsername: (empty(adminUsername) ? null : adminUsername)
    bootMethod: (empty(bootMethod) ? null : bootMethod)
    cloudServicesNetworkAttachment: {
      attachedNetworkId: cloudServicesNetworkId
      ipAllocationMethod: 'Dynamic'
    }
    cpuCores: cpuCores
    memorySizeGB: memorySizeGB
    networkData: (empty(networkData) ? null : networkData)
    networkAttachments: (empty(networkAttachments) ? null : networkAttachments)
    placementHints: (empty(placementHints) ? null : placementHints)
    sshPublicKeys: (empty(sshPublicKeys) ? null : sshPublicKeys)
    storageProfile: (empty(storageProfile) ? null : storageProfile)
    userData: (empty(userData) ? null : userData)
    vmDeviceModel: (empty(vmDeviceModel) ? null : vmDeviceModel)
    vmImage: (empty(vmImage) ? null : vmImage)
    vmImageRepositoryCredentials: (empty(vmImageRepositoryCredentials) ? null : vmImageRepositoryCredentials)
  }
}

Avertissement

Les données utilisateur ne sont pas chiffrées et tout processus sur la machine virtuelle peut interroger ces données. Vous ne devez pas stocker d’informations confidentielles dans les données utilisateur. Pour plus d’informations, consultez les meilleures pratiques de sécurité et de chiffrement des données Azure.

Passez en revue et enregistrez le fichier de modèle nommé virtual-machine-bicep-file.bicep, puis passez à la section suivante et déployez le modèle.

Machines virtuelles avec identités managées

Créez la machine virtuelle avec une identité gérée attribuée par le système ou par l'utilisateur. Pour ajouter une identité managée à la machine virtuelle, la version de l’API doit être 2025-07-01-preview ou ultérieure. Il apiVersion peut être rempli avec 2025-07-01-preview, 2025-09-01 ou toute version ultérieure de l’API.

Important

Si vous ne spécifiez pas d’identité managée lors de la création de la machine virtuelle, vous ne pouvez pas activer la prise en charge des identités managées en mettant à jour la machine virtuelle après l’approvisionnement.

Veillez à mettre à jour la version de ressource de la ressource de machine virtuelle dans le virtual-machine-bicep-file.bicep fichier.

Ajoutez la section identity avec type défini à SystemAssigned au fichier Bicep :

resource vm 'Microsoft.NetworkCloud/virtualMachines@2025-09-01' = {
  name: vmName
  ...
  properties: {
    ...
    identity: {
      type: "SystemAssigned"
    }
  }
}

Pour l’identité managée affectée par l’utilisateur, la ressource doit être créée avant de pouvoir être affectée à la machine virtuelle. Mettez à jour le fichier Bicep avec la section identitytype est défini sur UserAssigned, et incluez la propriété userAssignedIdentities avec l'ID de l'identité gérée assignée par l'utilisateur.

resource vm 'Microsoft.NetworkCloud/virtualMachines@2025-09-01' = {
  name: vmName
  ...
  properties: {
    ...
    identity: {
      type: "UserAssigned",
      userAssignedIdentities: {
        "/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-name}": {}
      }
    }
  }
}

Déployer le modèle

  1. Créez un fichier nommé virtual-machine-parameters.json et ajoutez les paramètres requis au format JSON. Vous pouvez utiliser l’exemple suivant comme point de départ. Remplacez les valeurs par vos propres valeurs.
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vmName": {
      "value": "myNexusVirtualMachine"
    },
    "location": {
      "value": "eastus"
    },
    "extendedLocation": {
      "value": "/subscriptions/<subscription>/resourcegroups/<cluster-managed-resource-group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
    },
    "cloudServicesNetworkId": {
      "value": "/subscriptions/<subscription>/resourceGroups/<network-resource-group>/providers/Microsoft.NetworkCloud/cloudServicesNetworks/<csn-name>"
    },
    "networkAttachments": {
      "value": [
        {
          "attachedNetworkId": "/subscriptions/<subscription>/resourceGroups/<network-resource-group>/providers/Microsoft.NetworkCloud/l3Networks/<l3network-name>",
          "ipAllocationMethod": "Dynamic",
          "defaultGateway": "True",
          "networkAttachmentName": "mgmt0"
        }
      ]
    },
    "sshPublicKeys": {
      "value": [
        {
          "keyData": "ssh-rsa AAAAB3...."
        }
      ]
    },
    "vmImage": {
      "value": "<Image ACR URL>"
    },
    "vmImageRepositoryCredentials": {
      "value": {
        "password": "********************",
        "registryUrl": "<ACR registry URL>",
        "username": "<ACR user name>"
      }
    }
  }
}
  1. Déployez le modèle.
az deployment group create \
  --resource-group myResourceGroup
  --template-file virtual-machine-bicep-file.bicep
  --parameters @virtual-machine-parameters.json

Passer en revue les ressources déployées

az deployment group show --resource-group myResourceGroup --name <deployment-name>

Une fois le déploiement terminé, vous pouvez afficher les ressources à l’aide de l’interface CLI ou du portail Azure.

Pour afficher les détails du cluster dans le myNexusVirtualMachine groupe de myResourceGroup ressources, exécutez ce qui suit :

az networkcloud virtualmachine show --name myNexusVirtualMachine --resource-group myResourceGroup

Nettoyer les ressources

Quand vous n’en avez plus besoin, supprimez le groupe de ressources. Le groupe de ressources et toutes les ressources du groupe de ressources sont supprimées.

Utilisez la commande az group delete pour supprimer le groupe de ressources, la machine virtuelle et toutes les ressources associées, à l’exception des ressources réseau Nexus de l’opérateur.

az group delete --name myResourceGroup --yes --no-wait

Étapes suivantes

La machine virtuelle Nexus est créée avec succès ! Vous pouvez maintenant utiliser la machine virtuelle pour héberger des fonctions de réseau virtuel (VNF).