Erstellen eines virtuellen Computers auf VMware vCenter mithilfe von Azure Arc

In diesem Artikel wird beschrieben, wie Sie einen virtuellen Computer mithilfe von vCenter-Ressourcen über das Azure-Portal bereitstellen.

Erstellen eines virtuellen Computers im Azure-Portal

Sobald Ihr*e Administrator*in eine VMware vCenter-Instanz mit Azure verbunden, VMware vCenter-Ressourcen in Azure dargestellt und Ihnen Berechtigungen für diese Ressourcen erteilt hat, erstellen Sie einen virtuellen Computer.

Voraussetzungen

  • Ein Azure-Abonnement und eine Ressourcengruppe, in der Sie die Rolle „Arc VMware VM contributor“ (Mitwirkender für Arc-fähige VMware-VMs) haben
  • Ein Ressourcenpool/Cluster/Host, für den Sie die Rolle „Private Cloud Resource User“ (Benutzer für private Cloudressourcen) ausüben.
  • Ein VM-Vorlagenressource, für die Sie die Rolle „Arc Private Cloud Resource User“ (Benutzer für private Arc-Cloudressourcen) haben
  • Eine virtuelle Netzwerkressource, für die Sie die Rolle „Arc Private Cloud Resource User“ (Benutzer für private Arc-Cloudressourcen) ausüben.

Führen Sie die folgenden Schritte aus, um eine VM im Azure-Portal zu erstellen:

  1. Navigieren Sie in Ihrem Browser zum Azure-Portal. Navigieren Sie zur Ansicht zum Durchsuchen von VMs. In Azure und auf virtuellen Arc-Computern wird eine einheitliche Suchoberfläche angezeigt.

    Screenshot: Einheitliche Suchoberfläche für Azure Arc-VMs.

  2. Wählen Sie Hinzufügen und dann aus der Dropdownliste Azure Arc-Computer aus.

    Screenshot: Registerkarte „Grundlagen“ zum Erstellen einer Azure Arc-VM.

  3. Wählen Sie das Abonnement und die Ressourcengruppe aus, in der Sie die VM bereitstellen möchten.

  4. Geben Sie den Namen der virtuellen Maschine an, und wählen Sie dann einen benutzerdefinierten Speicherort aus, den Ihr*e Administrator*in für Sie freigegeben hat.

    Wenn mehrere Arten von VMs unterstützt werden, wählen Sie VMware aus der Dropdownliste Virtual machine kind (Art des virtuellen Computers) aus.

  5. Wählen Sie den Ressourcenpool/Cluster/Host aus, in dem die VM bereitstellt werden soll.

  6. Wählen Sie den Datenspeicher aus, den Sie als Speicher verwenden möchten.

  7. Wählen Sie die Vorlage aus, auf dessen Grundlage die VM erstellt werden soll.

    Tipp

    Sie können die Standardwerte der Vorlagen für CPU-Kerne und den Arbeitsspeicher überschreiben.

    Geben Sie einen Benutzernamen und ein Kennwort für das Administratorkonto an, wenn Sie eine Windows-Vorlage ausgewählt haben.

  8. Optional: Ändern Sie die in der Vorlage konfigurierten Datenträger. Beispielsweise können Sie weitere Datenträger hinzufügen oder vorhandene Datenträger aktualisieren. Alle Datenträger und die VM befinden sich im in Schritt 6 ausgewählten Datenspeicher.

  9. Optional: Ändern Sie die in der Vorlage konfigurierten Netzwerkschnittstellen. Beispielsweise können Sie Netzwerkadapter (NIC) hinzufügen oder vorhandene Netzwerkadapter aktualisieren. Sie können auch das Netzwerk ändern, an das dieser Netzwerkadapter angefügt wird, sofern Sie über die entsprechenden Berechtigungen für die Netzwerkressource verfügen.

  10. (Optional) Fügen Sie der VM-Ressource bei Bedarf Tags hinzu.

  11. Wählen Sie Erstellen aus, nachdem Sie alle Eigenschaften überprüft haben. Die Erstellung der VM kann einige Minuten dauern.

In diesem Artikel wird beschrieben, wie Sie einen virtuellen Computer mithilfe von vCenter-Ressourcen und einer Bicep-Vorlage bereitstellen.

Erstellen eines Arc-VMware-Computers mithilfe einer Bicep-Vorlage

Die folgende Bicep-Vorlage kann zum Erstellen eines Arc-VMware-Computers verwendet werden. Hier finden Sie eine Liste der verfügbaren Vorlagen für Azure Resource Manager (ARM), Bicep und Terraform für VMware-Ressourcen mit Arc-Unterstützung. Um einen anderen Arc-Vorgang auszulösen, konvertieren Sie die entsprechende ARM-Vorlage in eine Bicep-Vorlage.

// Parameters
param vmName string = 'contoso-vm'
param vmAdminPassword string = 'examplepassword!#'
param vCenterId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso-rg/providers/Microsoft.ConnectedVMwarevSphere/vcenters/contoso-vcenter'
param templateId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso-rg/providers/Microsoft.ConnectedVMwarevSphere/VirtualMachineTemplates/contoso-template-win22'
param resourcePoolId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso-rg/providers/Microsoft.ConnectedVMwarevSphere/ResourcePools/contoso-respool'
param datastoreId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso-rg/providers/Microsoft.ConnectedVMwarevSphere/Datastores/contoso-datastore'
param networkId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso-rg/providers/Microsoft.ConnectedVMwarevSphere/VirtualNetworks/contoso-network'
param extendedLocation object = {
  type: 'customLocation'
  name: '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso-rg/providers/Microsoft.ExtendedLocation/customLocations/contoso-customlocation'
}
param ipSettings object = {
  allocationMethod: 'static'
  gateway: ['172.24.XXX.1']
  ipAddress: '172.24.XXX.105'
  subnetMask: '255.255.255.0'
  dnsServers: ['172.24.XXX.9']
}

resource contosoMachine 'Microsoft.HybridCompute/machines@2023-10-03-preview' = {
  name: vmName
  location:'westeurope'
  kind:'VMware'
  properties:{}
  tags: {
    foo: 'bar'
  }
}

resource vm 'Microsoft.ConnectedVMwarevSphere/virtualMachineInstances@2023-12-01' = {
  name: 'default'
  scope: contosoMachine
  extendedLocation: extendedLocation
  properties: {
    hardwareProfile: {
      memorySizeMB: 4096
      numCPUs: 2
    }
    osProfile: {
      computerName: vmName
      adminPassword: vmAdminPassword
    }
    placementProfile: {
      resourcePoolId: resourcePoolId
      datastoreId: datastoreId
    }
    infrastructureProfile: {
      templateId: templateId
      vCenterId: vCenterId
    }
    networkProfile: {
      networkInterfaces: [
        {
          nicType: 'vmxnet3'
          ipSettings: ipSettings
          networkId: networkId
          name: 'VLAN103NIC'
          powerOnBoot: 'enabled'
        }
      ]
    }
  }
}

// Outputs
output vmId string = vm.id

In diesem Artikel wird beschrieben, wie Sie einen virtuellen Computer mithilfe von vCenter-Ressourcen und einer Terraform-Vorlage bereitstellen.

Erstellen eines Arc-VMware-Computers mit Terraform

Voraussetzungen

  • Azure-Abonnement: Vergewissern Sie sich, dass Sie ein aktives Azure-Abonnement besitzen.
  • Terraform: Installieren Sie Terraform auf Ihrem Computer.
  • Azure CLI: Installieren Sie die Azure CLI, um Ressourcen zu authentifizieren und zu verwalten.

Führen Sie die folgenden Schritte aus, um einen Arc-VMware-Computer mithilfe von Terraform zu erstellen. Die beiden folgenden Szenarien werden in diesem Artikel abgedeckt:

  1. Führen Sie für VMs, die im vCenter-Bestand ermittelt werden, die Aktivierung im Azure-Vorgang aus, und installieren Sie Arc-Agents.
  2. Erstellen Sie eine neue Arc-VMware-VM mit Vorlagen, Ressourcenpool, Datenspeicher, und installieren Sie Arc-Agents.

Szenario 1

Führen Sie für VMs, die im vCenter-Bestand ermittelt werden, die Aktivierung im Azure-Vorgang aus, und installieren Sie Arc-Agents.

Schritt 1: Definieren von Variablen in einer Datei vom Typ „variables.tf“

Erstellen Sie eine Datei mit dem Namen „variables.tf“, und definieren Sie alle erforderlichen Variablen.

variable "subscription_id" {
  description = "The subscription ID for the Azure account."
  type        = string
}

variable "resource_group_name" {
  description = "The name of the resource group."
  type        = string
}

variable "location" {
  description = "The location/region where the resources will be created."
  type        = string
}

variable "machine_name" {
  description = "The name of the machine."
  type        = string
}

variable "inventory_item_id" {
  description = "The ID of the Inventory Item for the VM."
  type        = string
}

variable "custom_location_id" {
  description = "The ID of the custom location."
  type        = string
}

variable "vm_username" {
  description = "The admin username for the VM."
  type        = string
}

variable "vm_password" {
  description = "The admin password for the VM."
  type        = string
}

variable "resource_group_name" {
  description = "The name of the resource group."
  type        = string
}

variable "location" {
  description = "The location/region where the resources will be created."
  type        = string
}

variable "machine_name" {
  description = "The name of the machine."
  type        = string
}

variable "vm_username" {
  description = "The admin username for the VM."
  type        = string
}

variable "vm_password" {
  description = "The admin password for the VM."
  type        = string
}

variable "inventory_id" {
  description = "The Inventory ID for the VM."
  type        = string
}

variable "vcenter_id" {
  description = "The ID of the vCenter."
  type        = string
}

variable "custom_location_id" {
  description = "The ID of the custom location."
  type        = string
}

Schritt 2: Erstellen einer TFVARS-Datei

Erstellen Sie eine Datei mit dem Namen CreateVMwareVM.tfvars, und geben Sie Beispielwerte für die Variablen an.

subscription_id      = "your-subscription-id"
resource_group_name  = "your-resource-group"
location             = "eastus"
machine_name         = "test_machine0001"
inventory_item_id    = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.ConnectedVMwarevSphere/VCenters/your-vcenter-id/InventoryItems/your-inventory-item-id"
custom_location_id   = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.ExtendedLocation/customLocations/your-custom-location-id"
vm_username          = "Administrator"
vm_password          = " The admin password for the VM "

Schritt 3: Ändern der Konfiguration zur Verwendung von Variablen

Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0"
    }
    azapi = {
      source  = "azure/azapi"
      version = ">= 1.0.0"
    }
  }
}

# Configure the AzureRM provider with the subscription ID
provider "azurerm" {
  features {}
  subscription_id = var.subscription_id
}

# Configure the AzAPI provider with the subscription ID
provider "azapi" {
  subscription_id = var.subscription_id
}

# Retrieve the resource group details
data "azurerm_resource_group" "example" {
  name = var.resource_group_name
}

# Create a VMware machine resource in Azure
resource "azapi_resource" "test_machine0001" {
  schema_validation_enabled = false
  parent_id = data.azurerm_resource_group.example.id
  type = "Microsoft.HybridCompute/machines@2023-06-20-preview"
  name = var.machine_name
  location = data.azurerm_resource_group.example.location
  body = jsonencode({
      kind = "VMware"
      identity = {
        type = "SystemAssigned"
      }
  })
}

# Create a Virtual Machine instance using the VMware machine and Inventory Item ID
resource "azapi_resource" "test_inventory_vm0001" {
  schema_validation_enabled = false
  type = "Microsoft.ConnectedVMwarevSphere/VirtualMachineInstances@2023-10-01"
  name = "default"
  parent_id = azapi_resource.test_machine0001.id
  body = jsonencode({
      properties = {
          infrastructureProfile = {
            inventoryItemId = var.inventory_item_id
          }
      }
      extendedLocation = {
        type = "CustomLocation"
        name = var.custom_location_id
      }
  })
  depends_on = [azapi_resource.test_machine0001]
}

# Install Arc agent on the VM
resource "azapi_resource" "guestAgent" {
  type      = "Microsoft.ConnectedVMwarevSphere/virtualMachineInstances/guestAgents@2023-10-01"
  parent_id = azapi_resource.test_inventory_vm0001.id
  name      = "default"
  body = jsonencode({
    properties = {
      credentials = {
        username = var.vm_username
        password = var.vm_password
      }
      provisioningAction = "install"
    }
  })
  schema_validation_enabled = false
  ignore_missing_property   = false
  depends_on = [azapi_resource.test_inventory_vm0001]
}

Schritt 4: Ausführen von Terraform-Befehlen

Verwenden Sie das Flag „-var-file“, um die Datei vom Typ .tfvars in Terraform-Befehlen zu übergeben.

  1. Initialisieren von Terraform (sofern noch nicht geschehen): terraform init
  2. Überprüfen der Konfiguration: terraform validate -var-file="CreateVMwareVM.tfvars"
  3. Planen der Änderungen: terraform plan -var-file="CreateVMwareVM.tfvars"
  4. Übernehmen der Änderungen: terraform apply -var-file="CreateVMwareVM.tfvars"

Bestätigen Sie die Eingabeaufforderung, indem Sie „Yes“ eingeben, um die Änderungen anzuwenden.

Bewährte Methoden

  • Verwenden der Quellcodeverwaltung: Nutzen Sie die Quellcodeverwaltung (z. B. Git) für Ihre Terraform-Konfigurationsdateien, um Änderungen im Laufe der Zeit nachzuverfolgen.
  • Sorgfältiges Überprüfen von Plänen: Überprüfen Sie immer die Ausgabe des Terraform-Plans, bevor Sie Änderungen anwenden, um sicherzustellen, dass Sie verstehen, welche Änderungen vorgenommen werden.
  • Zustandsverwaltung: Sichern Sie regelmäßig Ihre Terraform-Zustandsdateien, um Datenverluste zu vermeiden.

Indem Sie diese Schritte ausführen, können Sie HCRP- und Arc-VMware-VMs in Azure mithilfe von Terraform effektiv erstellen und verwalten und Gast-Agents auf den erstellten VMs installieren.

Szenario 2

Erstellen Sie eine neue Arc-VMware-VM mit Vorlagen, Ressourcenpool, Datenspeicher, und installieren Sie Arc-Agents.

Schritt 1: Definieren von Variablen in einer Datei vom Typ „variables.tf“

Erstellen Sie eine Datei mit dem Namen „variables.tf“, und definieren Sie alle erforderlichen Variablen.

variable "subscription_id" {
  description = "The subscription ID for the Azure account."
  type        = string
}

variable "resource_group_name" {
  description = "The name of the resource group."
  type        = string
}

variable "location" {
  description = "The location/region where the resources will be created."
  type        = string
}

variable "machine_name" {
  description = "The name of the machine."
  type        = string
}

variable "vm_username" {
  description = "The admin username for the VM."
  type        = string
}

variable "vm_password" {
  description = "The admin password for the VM."
  type        = string
}

variable "template_id" {
  description = "The ID of the VM template."
  type        = string
}

variable "vcenter_id" {
  description = "The ID of the vCenter."
  type        = string
}

variable "resource_pool_id" {
  description = "The ID of the resource pool."
  type        = string
}

variable "datastore_id" {
  description = "The ID of the datastore."
  type        = string
}

variable "custom_location_id" {
  description = "The ID of the custom location."
  type        = string
}

Schritt 2: Erstellen einer TFVARS-Datei

Erstellen Sie eine Datei mit dem Namen CreateVMwareVM.tfvars, und geben Sie Beispielwerte für die Variablen an.

subscription_id      = "your-subscription-id"
resource_group_name  = "your-resource-group"
location             = "eastus"
machine_name         = "test_machine0002"
vm_username          = "Administrator"
vm_password          = "*********"
template_id          = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.ConnectedVMwarevSphere/virtualmachinetemplates/your-template-id"
vcenter_id           = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.ConnectedVMwarevSphere/VCenters/your-vcenter-id"
resource_pool_id     = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.ConnectedVMwarevSphere/resourcepools/your-resource-pool-id"
datastore_id         = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.ConnectedVMwarevSphere/datastores/your-datastore-id"
custom_location_id   = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.ExtendedLocation/customLocations/your-custom-location-id"

Schritt 3: Ändern der Konfiguration zur Verwendung von Variablen

Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0"
    }
    azapi = {
      source  = "azure/azapi"
      version = ">= 1.0.0"
    }
  }
}

# Configure the AzureRM provider with the subscription ID
provider "azurerm" {
  features {}
  subscription_id = var.subscription_id
}

# Configure the AzAPI provider with the subscription ID
provider "azapi" {
  subscription_id = var.subscription_id
}

# Retrieve the resource group details
data "azurerm_resource_group" "example" {
  name = var.resource_group_name
}

# Create a VMware machine resource in Azure
resource "azapi_resource" "test_machine0002" {
  schema_validation_enabled = false
  parent_id = data.azurerm_resource_group.example.id
  type = "Microsoft.HybridCompute/machines@2023-06-20-preview"
  name = var.machine_name
  location = data.azurerm_resource_group.example.location
  body = jsonencode({
      kind = "VMware"
      identity = {
        type = "SystemAssigned"
      }
  })
}

# Create a Virtual Machine instance using the VMware machine created above
resource "azapi_resource" "test_vm0002" {
  schema_validation_enabled = false
  type = "Microsoft.ConnectedVMwarevSphere/VirtualMachineInstances@2023-10-01"
  name = "default"
  parent_id = azapi_resource.test_machine0002.id
  body = jsonencode({
      properties = {
          infrastructureProfile = {
            templateId = var.template_id
            vCenterId = var.vcenter_id
          }

          placementProfile = {
            resourcePoolId = var.resource_pool_id
            datastoreId = var.datastore_id
          }

          osProfile = {
            adminPassword = var.vm_password
          }
      }
      extendedLocation = {
        type = "CustomLocation"
        name = var.custom_location_id
      }
  })
  depends_on = [azapi_resource.test_machine0002]
}

# Create a guest agent for the VM instance
resource "azapi_resource" "guestAgent" {
  type      = "Microsoft.ConnectedVMwarevSphere/virtualMachineInstances/guestAgents@2023-10-01"
  parent_id = azapi_resource.test_vm0002.id
  name      = "default"
  body = jsonencode({
    properties = {
      credentials = {
        username = var.vm_username
        password = var.vm_password
      }
      provisioningAction = "install"
    }
  })
  schema_validation_enabled = false
  ignore_missing_property   = false
  depends_on = [azapi_resource.test_vm0002]
}

Schritt 4: Ausführen von Terraform-Befehlen

Verwenden Sie das Flag „-var-file“, um die Datei vom Typ .tfvars in Terraform-Befehlen zu übergeben.

  1. Initialisieren von Terraform (sofern noch nicht geschehen): terraform init
  2. Überprüfen der Konfiguration: terraform validate -var-file="CreateVMwareVM.tfvars"
  3. Planen der Änderungen: terraform plan -var-file="CreateVMwareVM.tfvars"
  4. Übernehmen der Änderungen: terraform apply -var-file="CreateVMwareVM.tfvars"

Bestätigen Sie die Eingabeaufforderung, indem Sie „Yes“ eingeben, um die Änderungen anzuwenden.

Bewährte Methoden

  • Verwenden der Quellcodeverwaltung: Nutzen Sie die Quellcodeverwaltung (z. B. Git) für Ihre Terraform-Konfigurationsdateien, um Änderungen im Laufe der Zeit nachzuverfolgen.
  • Sorgfältiges Überprüfen von Plänen: Überprüfen Sie immer die Ausgabe des Terraform-Plans, bevor Sie Änderungen anwenden, um sicherzustellen, dass Sie verstehen, welche Änderungen vorgenommen werden.
  • Zustandsverwaltung: Sichern Sie regelmäßig Ihre Terraform-Zustandsdateien, um Datenverluste zu vermeiden.

Nächste Schritte

Ausführen von Vorgängen auf VMware-VMs in Azure.