Configure Azure VMware Solution Addons

The azure-native:avs:Addon resource, part of the Pulumi Azure Native provider, enables optional VMware capabilities on an Azure VMware Solution private cloud. This guide focuses on four addon types: HCX for workload migration, Site Recovery Manager for DR orchestration, vSphere Replication for VM-level protection, and Azure Arc for hybrid management.

Addons attach to an existing Azure VMware Solution private cloud within a resource group. The examples are intentionally small. Combine them with your own private cloud infrastructure and networking configuration.

Enable HCX for workload migration

Teams migrating VMware workloads to Azure VMware Solution typically start with HCX, which provides live migration, network extension, and disaster recovery capabilities.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const addon = new azure_native.avs.Addon("addon", {
    addonName: "hcx",
    addonType: azure_native.avs.AddonType.HCX,
    privateCloudName: "cloud1",
    resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native

addon = azure_native.avs.Addon("addon",
    addon_name="hcx",
    addon_type=azure_native.avs.AddonType.HCX,
    private_cloud_name="cloud1",
    resource_group_name="group1")
package main

import (
	avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
			AddonName:         pulumi.String("hcx"),
			AddonType:         pulumi.String(avs.AddonTypeHCX),
			PrivateCloudName:  pulumi.String("cloud1"),
			ResourceGroupName: pulumi.String("group1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var addon = new AzureNative.AVS.Addon("addon", new()
    {
        AddonName = "hcx",
        AddonType = AzureNative.AVS.AddonType.HCX,
        PrivateCloudName = "cloud1",
        ResourceGroupName = "group1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var addon = new Addon("addon", AddonArgs.builder()
            .addonName("hcx")
            .addonType("HCX")
            .privateCloudName("cloud1")
            .resourceGroupName("group1")
            .build());

    }
}
resources:
  addon:
    type: azure-native:avs:Addon
    properties:
      addonName: hcx
      addonType: HCX
      privateCloudName: cloud1
      resourceGroupName: group1

The addonType property specifies which VMware capability to enable. Setting it to “HCX” provisions VMware HCX on your private cloud, enabling workload mobility between on-premises and Azure environments. The addon attaches to the private cloud specified by privateCloudName within the given resource group.

Enable Site Recovery Manager for disaster recovery

Organizations implementing disaster recovery for VMware workloads use Site Recovery Manager to orchestrate failover and failback operations between sites.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const addon = new azure_native.avs.Addon("addon", {
    addonName: "srm",
    addonType: azure_native.avs.AddonType.SRM,
    privateCloudName: "cloud1",
    resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native

addon = azure_native.avs.Addon("addon",
    addon_name="srm",
    addon_type=azure_native.avs.AddonType.SRM,
    private_cloud_name="cloud1",
    resource_group_name="group1")
package main

import (
	avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
			AddonName:         pulumi.String("srm"),
			AddonType:         pulumi.String(avs.AddonTypeSRM),
			PrivateCloudName:  pulumi.String("cloud1"),
			ResourceGroupName: pulumi.String("group1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var addon = new AzureNative.AVS.Addon("addon", new()
    {
        AddonName = "srm",
        AddonType = AzureNative.AVS.AddonType.SRM,
        PrivateCloudName = "cloud1",
        ResourceGroupName = "group1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var addon = new Addon("addon", AddonArgs.builder()
            .addonName("srm")
            .addonType("SRM")
            .privateCloudName("cloud1")
            .resourceGroupName("group1")
            .build());

    }
}
resources:
  addon:
    type: azure-native:avs:Addon
    properties:
      addonName: srm
      addonType: SRM
      privateCloudName: cloud1
      resourceGroupName: group1

Site Recovery Manager (SRM) provides automated DR orchestration for VMware environments. The addonType “SRM” provisions the SRM appliance on your private cloud, enabling you to define recovery plans and automate failover procedures. SRM typically works alongside vSphere Replication for data protection.

Enable vSphere Replication for VM-level replication

vSphere Replication provides VM-level replication capabilities for disaster recovery and data protection without requiring shared storage.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const addon = new azure_native.avs.Addon("addon", {
    addonName: "vr",
    addonType: azure_native.avs.AddonType.VR,
    privateCloudName: "cloud1",
    resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native

addon = azure_native.avs.Addon("addon",
    addon_name="vr",
    addon_type=azure_native.avs.AddonType.VR,
    private_cloud_name="cloud1",
    resource_group_name="group1")
package main

import (
	avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
			AddonName:         pulumi.String("vr"),
			AddonType:         pulumi.String(avs.AddonTypeVR),
			PrivateCloudName:  pulumi.String("cloud1"),
			ResourceGroupName: pulumi.String("group1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var addon = new AzureNative.AVS.Addon("addon", new()
    {
        AddonName = "vr",
        AddonType = AzureNative.AVS.AddonType.VR,
        PrivateCloudName = "cloud1",
        ResourceGroupName = "group1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var addon = new Addon("addon", AddonArgs.builder()
            .addonName("vr")
            .addonType("VR")
            .privateCloudName("cloud1")
            .resourceGroupName("group1")
            .build());

    }
}
resources:
  addon:
    type: azure-native:avs:Addon
    properties:
      addonName: vr
      addonType: VR
      privateCloudName: cloud1
      resourceGroupName: group1

The “VR” addon type enables vSphere Replication, which replicates individual VMs to a recovery site. Unlike array-based replication, vSphere Replication operates at the hypervisor level, providing flexibility in recovery point objectives and target locations. It’s commonly paired with Site Recovery Manager for complete DR automation.

Enable Azure Arc integration for hybrid management

Azure Arc integration extends Azure management capabilities to AVS private clouds, enabling unified governance and monitoring across hybrid environments.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const addon = new azure_native.avs.Addon("addon", {
    addonName: "arc",
    addonType: azure_native.avs.AddonType.Arc,
    privateCloudName: "cloud1",
    resourceGroupName: "group1",
});
import pulumi
import pulumi_azure_native as azure_native

addon = azure_native.avs.Addon("addon",
    addon_name="arc",
    addon_type=azure_native.avs.AddonType.ARC,
    private_cloud_name="cloud1",
    resource_group_name="group1")
package main

import (
	avs "github.com/pulumi/pulumi-azure-native-sdk/avs/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := avs.NewAddon(ctx, "addon", &avs.AddonArgs{
			AddonName:         pulumi.String("arc"),
			AddonType:         pulumi.String(avs.AddonTypeArc),
			PrivateCloudName:  pulumi.String("cloud1"),
			ResourceGroupName: pulumi.String("group1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var addon = new AzureNative.AVS.Addon("addon", new()
    {
        AddonName = "arc",
        AddonType = AzureNative.AVS.AddonType.Arc,
        PrivateCloudName = "cloud1",
        ResourceGroupName = "group1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.avs.Addon;
import com.pulumi.azurenative.avs.AddonArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var addon = new Addon("addon", AddonArgs.builder()
            .addonName("arc")
            .addonType("Arc")
            .privateCloudName("cloud1")
            .resourceGroupName("group1")
            .build());

    }
}
resources:
  addon:
    type: azure-native:avs:Addon
    properties:
      addonName: arc
      addonType: Arc
      privateCloudName: cloud1
      resourceGroupName: group1

The “Arc” addon type connects your private cloud to Azure Arc, bringing Azure management tools to your VMware environment. This enables consistent policy enforcement, monitoring, and security across both Azure-native and VMware resources. Arc integration provides a unified control plane for hybrid infrastructure.

Beyond these examples

These snippets focus on specific addon capabilities: VMware migration and mobility (HCX), disaster recovery orchestration (SRM, vSphere Replication), and hybrid management (Azure Arc). They’re intentionally minimal rather than complete DR or migration solutions.

The examples reference pre-existing infrastructure such as an Azure VMware Solution private cloud and resource group. They focus on enabling addon capabilities rather than configuring the underlying private cloud or networking.

To keep things focused, common addon patterns are omitted, including:

  • Addon-specific configuration properties beyond type
  • License key management for commercial addons
  • Addon version selection and upgrades
  • Integration with on-premises VMware environments

These omissions are intentional: the goal is to illustrate how each addon type is enabled, not provide drop-in migration or DR modules. See the AVS Addon resource reference for all available configuration options.

Let's configure Azure VMware Solution Addons

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Configuration & Addon Types
What addon types are available for Azure VMware Solution?
Four addon types are supported: Arc, HCX, SRM, and VR. Specify the type using the addonType property.
What properties can't be changed after creating an addon?
Three properties are immutable: addonName, privateCloudName, and resourceGroupName. Changing any of these requires replacing the resource.
API Versions & Import
How do I use a different API version for this resource?
Generate a local SDK package using the CLI command pulumi package add azure-native avs [ApiVersion]. Available versions include 2022-05-01, 2023-03-01, and 2024-09-01.
How do I import an existing addon?
Use the import command with the resource path: pulumi import azure-native:avs:Addon <name> /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AVS/privateClouds/{privateCloudName}/addons/{addonName}

Using a different cloud?

Explore compute guides for other cloud providers: