Udostępnij przez


Szybki start: tworzenie maszyny wirtualnej Azure Operator Nexus przy użyciu szablonu Azure Resource Manager (szablon ARM)

  • Wdróż maszynę wirtualną platformy Azure Nexus przy użyciu szablonu usługi Azure Resource Manager.

Ten przewodnik Szybki start ułatwia rozpoczęcie pracy z maszynami wirtualnymi Nexus w celu hostowania funkcji sieci wirtualnej (VNFs). Wykonując kroki opisane w tym przewodniku, możesz szybko i łatwo utworzyć niestandardową maszynę wirtualną Nexus spełniającą określone potrzeby i wymagania. Niezależnie od tego, czy jesteś początkującym, czy ekspertem w dziedzinie sieci Nexus, ten przewodnik jest tutaj, aby pomóc. Dowiesz się, co musisz wiedzieć, aby tworzyć i dostosowywać maszyny wirtualne Nexus do hostowania funkcji sieci wirtualnej.

Zanim rozpoczniesz

Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

  • Zainstaluj najnowszą wersję niezbędnych rozszerzeń interfejsu wiersza polecenia platformy Azure.

  • Jeśli masz wiele subskrypcji platformy Azure, wybierz odpowiedni identyfikator subskrypcji, w którym zasoby mają być rozliczane przy użyciu az account polecenia .

  • Przed kontynuowaniem tworzenia maszyny wirtualnej upewnij się, że obraz kontenera do użycia jest tworzony zgodnie z instrukcjami.

  • Utwórz grupę zasobów przy użyciu polecenia az group create. Grupa zasobów platformy Azure to grupa logiczna, w której zasoby platformy Azure są wdrażane i zarządzane. Podczas tworzenia grupy zasobów zostanie wyświetlony monit o określenie lokalizacji. Ta lokalizacja to lokalizacja magazynu metadanych grupy zasobów i lokalizacja, w której zasoby są uruchamiane na platformie Azure, jeśli nie określisz innego regionu podczas tworzenia zasobów. W poniższym przykładzie tworzona jest grupa zasobów o nazwie myResourceGroup w lokalizacji eastus.

    az group create --name myResourceGroup --location eastus
    

    Poniższy przykład danych wyjściowych przypomina pomyślne utworzenie grupy zasobów:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  • Aby wdrożyć plik Bicep lub szablon usługi ARM, musisz posiadać uprawnienia do zapisu w zasobach, które wdrażasz, oraz dostęp do wszystkich operacji na typie zasobu Microsoft.Resources/deployments. Na przykład do wdrożenia klastra potrzebne są uprawnienia Microsoft.NetworkCloud/virtualMachines/write i Microsoft.Resources/deployments/*. Aby uzyskać listę ról i uprawnień, zobacz Role wbudowane platformy Azure.

  • Potrzebny jest identyfikator zasobu klastra Nexus operatora platformy custom location Azure.

  • Musisz utworzyć różne sieci zgodnie z określonymi wymaganiami dotyczącymi obciążenia i niezbędne jest posiadanie odpowiednich adresów IP dostępnych dla obciążeń. Aby zapewnić bezproblemową implementację, zaleca się skonsultowanie się z odpowiednimi zespołami pomocy technicznej w celu uzyskania pomocy.

Przegląd szablonu

Przed wdrożeniem szablonu maszyny wirtualnej przejrzyjmy zawartość, aby zrozumieć jej strukturę.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vmName": {
            "type": "string",
            "metadata": {
                "description": "The name of Nexus virtual machine"
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "The Azure region where the VM is to be deployed"
            },
            "defaultValue": "[resourceGroup().location]"
        },
        "extendedLocation": {
            "type": "string",
            "metadata": {
                "description": "The custom location of the Nexus instance"
            }
        },
        "tags": {
            "type": "object",
            "metadata": {
                "description": "The metadata tags to be associated with the cluster resource"
            },
            "defaultValue": {}
        },
        "adminUsername": {
            "type": "string",
            "defaultValue": "azureuser",
            "maxLength": 32,
            "minLength": 1,
            "metadata": {
                "description": "The name of the administrator to which the ssh public keys will be added into the authorized keys."
            }
        },
        "bootMethod": {
            "type": "string",
            "defaultValue": "UEFI",
            "allowedValues": [
                "UEFI",
                "BIOS"
            ],
            "metadata": {
                "description": "Selects the boot method for the virtual machine."
            }
        },
        "cloudServicesNetworkId": {
            "type": "string",
            "metadata": {
                "description": "The Cloud Services Network attachment ARM ID to attach to virtual machine."
            }
        },
        "cpuCores": {
            "type": "int",
            "defaultValue": 2,
            "metadata": {
                "description": "Number of CPU cores for the virtual machine. Choose a value between 2 and 46."
            }
        },
        "memorySizeGB": {
            "type": "int",
            "defaultValue": 4,
            "metadata": {
                "description": "The memory size of the virtual machine in GiB (max 224 GiB)"
            }
        },
        "networkAttachments": {
            "type": "array",
            "metadata": {
                "description": "The list of network attachments to the virtual machine."
            }
            /*
            {
                "attachedNetworkId": "string",
                "defaultGateway": "True"/"False",
                "ipAllocationMethod": "Dynamic"/"Static"/"Disabled",
                "ipv4Address": "string",
                "ipv6Address": "string",
                "networkAttachmentName": "string"
            }
            */
        },
        "networkDataContent": {
            "type": "string",
            "metadata": {
                "description": "The Base64 encoded cloud-init network data."
            },
            "defaultValue": ""
        },
        "placementHints": {
            "type": "array",
            "metadata": {
                "description": "The placement hints for the virtual machine."
            },
            "defaultValue": []
            /*
            {
                "hintType": "Affinity",
                "resourceId": "string",
                "schedulingExecution": "Hard",
                "scope": "Rack"
            }
            */
        },
        "sshPublicKeys": {
            "type": "array",
            "metadata": {
                "description": "The list of SSH public keys for the virtual machine."
            }
            /*
            {
                "keyData": "string"
            }
            */
        },
        "storageProfile": {
            "type": "object",
            "metadata": {
                "description": "StorageProfile represents information about a disk."
            },
            "defaultValue": {
                "osDisk": {
                    "createOption": "Ephemeral",
                    "deleteOption": "Delete",
                    "diskSizeGB": 64
                }
            }
        },
        "userDataContent": {
            "type": "string",
            "metadata": {
                "description": "The Base64 encoded cloud-init user data."
            },
            "defaultValue": ""
        },
        "vmDeviceModel": {
            "type": "string",
            "defaultValue": "T2",
            "allowedValues": [
                "T1",
                "T2"
            ],
            "metadata": {
                "description": "The type of the device model to use."
            }
        },
        "vmImage": {
            "type": "string",
            "metadata": {
                "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."
            }
        },
        "vmImageRepositoryCredentials": {
            "type": "object",
            "metadata": {
                "description": "Credentials used to login to the image repository."
            },
            "defaultValue": {}
            /*
                "password": "string",
                "registryUrl": "string",
                "username": "string"
            */
        }
    },
    "resources": [
        {
            "type": "Microsoft.NetworkCloud/virtualMachines",
            "apiVersion": "2025-09-01",
            "name": "[parameters('vmName')]",
            "location": "[parameters('location')]",
            "extendedLocation": {
                "type": "CustomLocation",
                "name": "[parameters('extendedLocation')]"
            },
            "tags": "[parameters('tags')]",
            "properties": {
                "adminUsername": "[if(empty(parameters('adminUsername')), json('null'), parameters('adminUsername'))]",
                "bootMethod": "[if(empty(parameters('bootMethod')), json('null'), parameters('bootMethod'))]",
                "cloudServicesNetworkAttachment": {
                    "attachedNetworkId": "[parameters('cloudServicesNetworkId')]",
                    "ipAllocationMethod": "Dynamic"
                },
                "cpuCores": "[parameters('cpuCores')]",
                "memorySizeGB": "[parameters('memorySizeGB')]",
                "networkDataContent": "[if(empty(parameters('networkDataContent')), json('null'), parameters('networkDataContent'))]",
                "networkAttachments": "[if(empty(parameters('networkAttachments')), json('null'), parameters('networkAttachments'))]",
                "placementHints": "[if(empty(parameters('placementHints')), json('null'), parameters('placementHints'))]",
                "sshPublicKeys": "[if(empty(parameters('sshPublicKeys')), json('null'), parameters('sshPublicKeys'))]",
                "storageProfile": "[if(empty(parameters('storageProfile')), json('null'), parameters('storageProfile'))]",
                "userDataContent": "[if(empty(parameters('userDataContent')), json('null'), parameters('userDataContent'))]",
                "vmDeviceModel": "[if(empty(parameters('vmDeviceModel')), json('null'), parameters('vmDeviceModel'))]",
                "vmImage": "[if(empty(parameters('vmImage')), json('null'), parameters('vmImage'))]",
                "vmImageRepositoryCredentials": "[if(empty(parameters('vmImageRepositoryCredentials')), json('null'), parameters('vmImageRepositoryCredentials'))]"
            }
        }
    ]
}

Ostrzeżenie

Dane użytkownika nie są szyfrowane, a żaden proces na maszynie wirtualnej może wykonywać zapytania dotyczące tych danych. Nie należy przechowywać poufnych informacji w danych użytkownika. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące zabezpieczeń i szyfrowania danych platformy Azure.

Po przejrzeniu i zapisaniu pliku szablonu o nazwie virtual-machine-arm-template.jsonprzejdź do następnej sekcji, aby wdrożyć szablon.

Maszyny wirtualne z tożsamościami zarządzanymi

Utwórz maszynę wirtualną przy użyciu przypisanej przez system lub przypisanej przez użytkownika tożsamości zarządzanej. Aby dodać tożsamość zarządzaną do maszyny wirtualnej, wersja interfejsu API musi być 2025-07-01-preview lub nowsza. Element apiVersion można wypełnić wartością 2025-07-01-preview, 2025-09-01 lub dowolną przyszłą wersją interfejsu API.

Ważne

Jeśli nie określisz tożsamości zarządzanej podczas tworzenia maszyny wirtualnej, nie możesz włączyć obsługi tożsamości zarządzanej, aktualizując maszynę wirtualną po aprowizacji.

apiVersion Zaktualizuj element dla zasobu maszyny wirtualnej w virtual-machine-arm-template.json pliku .

...
"resources": [
    {
        "type": "Microsoft.NetworkCloud/virtualMachines",
        "apiVersion": "2025-09-01", // Update the API version here
        ...
    }
  ]
...

Do pliku virtual-machine-arm-template.json dodaj właściwość identity do definicji zasobu maszyny wirtualnej.

W przypadku tożsamości zarządzanej System-Assigned użyj następującego fragmentu kodu:

"identity": {
  "type": "SystemAssigned"
}

W przypadku tożsamości zarządzanej przypisanej przez użytkownika użyj następującego fragmentu kodu:

"identity": {
  "type": "UserAssigned",
  "userAssignedIdentities": {
    "/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identity-name}": {}
  }
}

Wdrażanie szablonu

  1. Utwórz plik o nazwie virtual-machine-parameters.json i dodaj wymagane parametry w formacie JSON. Poniższy przykład można użyć jako punktu początkowego. Zastąp wartości własnymi.
{
  "$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. Wdrażanie szablonu.
az deployment group create \
  --resource-group myResourceGroup \
  --template-file virtual-machine-arm-template.json \
  --parameters @virtual-machine-parameters.json

Przeglądanie wdrożonych zasobów

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

Po zakończeniu wdrażania możesz wyświetlić zasoby przy użyciu interfejsu wiersza polecenia lub witryny Azure Portal.

Aby wyświetlić szczegóły klastra myNexusVirtualMachine w myResourceGroup grupie zasobów, wykonaj następujące czynności

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

Uprzątnij zasoby

Gdy grupa zasobów nie będzie już potrzebna, usuń grupę zasobów. Grupa zasobów i wszystkie zasoby w grupie zasobów zostaną usunięte.

Użyj polecenia az group delete , aby usunąć grupę zasobów, maszynę wirtualną i wszystkie powiązane zasoby z wyjątkiem zasobów sieciowych Operator Nexus.

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

Dalsze kroki

Maszyna wirtualna Nexus została pomyślnie utworzona! Teraz możesz użyć maszyny wirtualnej do hostowania funkcji sieci wirtualnej (VNFs).