The azure-native:storagemover:Agent resource, part of the Pulumi Azure Native provider, registers Azure Arc-enabled machines as Storage Mover agents that execute migration jobs. This guide focuses on three capabilities: agent registration with Arc machines, bandwidth throttling schedules, and multi-window time policies.
Agents require Azure Arc-enabled machines and an existing Storage Mover resource. The examples are intentionally small. Combine them with your own Arc infrastructure and Storage Mover deployments.
Register an agent with a Storage Mover
Storage Mover agents run on-premises or in Azure VMs to execute migration jobs, connecting Arc-enabled machines to Storage Mover resources.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const agent = new azure_native.storagemover.Agent("agent", {
agentName: "examples-agentName",
arcResourceId: "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
arcVmUuid: "3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
resourceGroupName: "examples-rg",
storageMoverName: "examples-storageMoverName",
});
import pulumi
import pulumi_azure_native as azure_native
agent = azure_native.storagemover.Agent("agent",
agent_name="examples-agentName",
arc_resource_id="/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
arc_vm_uuid="3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
resource_group_name="examples-rg",
storage_mover_name="examples-storageMoverName")
package main
import (
storagemover "github.com/pulumi/pulumi-azure-native-sdk/storagemover/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storagemover.NewAgent(ctx, "agent", &storagemover.AgentArgs{
AgentName: pulumi.String("examples-agentName"),
ArcResourceId: pulumi.String("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName"),
ArcVmUuid: pulumi.String("3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9"),
ResourceGroupName: pulumi.String("examples-rg"),
StorageMoverName: pulumi.String("examples-storageMoverName"),
})
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 agent = new AzureNative.StorageMover.Agent("agent", new()
{
AgentName = "examples-agentName",
ArcResourceId = "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
ArcVmUuid = "3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
ResourceGroupName = "examples-rg",
StorageMoverName = "examples-storageMoverName",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.storagemover.Agent;
import com.pulumi.azurenative.storagemover.AgentArgs;
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 agent = new Agent("agent", AgentArgs.builder()
.agentName("examples-agentName")
.arcResourceId("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName")
.arcVmUuid("3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9")
.resourceGroupName("examples-rg")
.storageMoverName("examples-storageMoverName")
.build());
}
}
resources:
agent:
type: azure-native:storagemover:Agent
properties:
agentName: examples-agentName
arcResourceId: /subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName
arcVmUuid: 3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9
resourceGroupName: examples-rg
storageMoverName: examples-storageMoverName
The arcResourceId property points to your Azure Arc-enabled machine’s full resource path. The arcVmUuid identifies the specific VM instance. Together, these bind the agent to the Arc machine. The storageMoverName specifies which Storage Mover resource manages this agent.
Throttle bandwidth during business hours
Migration jobs can saturate WAN links during business hours, affecting production traffic.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const agent = new azure_native.storagemover.Agent("agent", {
agentName: "examples-agentName",
arcResourceId: "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
arcVmUuid: "3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
description: "Example Agent Description",
resourceGroupName: "examples-rg",
storageMoverName: "examples-storageMoverName",
uploadLimitSchedule: {
weeklyRecurrences: [{
days: [azure_native.storagemover.DayOfWeek.Monday],
endTime: {
hour: 18,
minute: 30,
},
limitInMbps: 2000,
startTime: {
hour: 9,
minute: 0,
},
}],
},
});
import pulumi
import pulumi_azure_native as azure_native
agent = azure_native.storagemover.Agent("agent",
agent_name="examples-agentName",
arc_resource_id="/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
arc_vm_uuid="3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
description="Example Agent Description",
resource_group_name="examples-rg",
storage_mover_name="examples-storageMoverName",
upload_limit_schedule={
"weekly_recurrences": [{
"days": [azure_native.storagemover.DayOfWeek.MONDAY],
"end_time": {
"hour": 18,
"minute": 30,
},
"limit_in_mbps": 2000,
"start_time": {
"hour": 9,
"minute": 0,
},
}],
})
package main
import (
storagemover "github.com/pulumi/pulumi-azure-native-sdk/storagemover/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storagemover.NewAgent(ctx, "agent", &storagemover.AgentArgs{
AgentName: pulumi.String("examples-agentName"),
ArcResourceId: pulumi.String("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName"),
ArcVmUuid: pulumi.String("3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9"),
Description: pulumi.String("Example Agent Description"),
ResourceGroupName: pulumi.String("examples-rg"),
StorageMoverName: pulumi.String("examples-storageMoverName"),
UploadLimitSchedule: &storagemover.UploadLimitScheduleArgs{
WeeklyRecurrences: storagemover.UploadLimitWeeklyRecurrenceArray{
&storagemover.UploadLimitWeeklyRecurrenceArgs{
Days: storagemover.DayOfWeekArray{
storagemover.DayOfWeekMonday,
},
EndTime: &storagemover.TimeArgs{
Hour: pulumi.Int(18),
Minute: pulumi.Float64(30),
},
LimitInMbps: pulumi.Int(2000),
StartTime: &storagemover.TimeArgs{
Hour: pulumi.Int(9),
Minute: pulumi.Float64(0),
},
},
},
},
})
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 agent = new AzureNative.StorageMover.Agent("agent", new()
{
AgentName = "examples-agentName",
ArcResourceId = "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
ArcVmUuid = "3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
Description = "Example Agent Description",
ResourceGroupName = "examples-rg",
StorageMoverName = "examples-storageMoverName",
UploadLimitSchedule = new AzureNative.StorageMover.Inputs.UploadLimitScheduleArgs
{
WeeklyRecurrences = new[]
{
new AzureNative.StorageMover.Inputs.UploadLimitWeeklyRecurrenceArgs
{
Days = new[]
{
AzureNative.StorageMover.DayOfWeek.Monday,
},
EndTime = new AzureNative.StorageMover.Inputs.TimeArgs
{
Hour = 18,
Minute = 30,
},
LimitInMbps = 2000,
StartTime = new AzureNative.StorageMover.Inputs.TimeArgs
{
Hour = 9,
Minute = 0,
},
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.storagemover.Agent;
import com.pulumi.azurenative.storagemover.AgentArgs;
import com.pulumi.azurenative.storagemover.inputs.UploadLimitScheduleArgs;
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 agent = new Agent("agent", AgentArgs.builder()
.agentName("examples-agentName")
.arcResourceId("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName")
.arcVmUuid("3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9")
.description("Example Agent Description")
.resourceGroupName("examples-rg")
.storageMoverName("examples-storageMoverName")
.uploadLimitSchedule(UploadLimitScheduleArgs.builder()
.weeklyRecurrences(UploadLimitWeeklyRecurrenceArgs.builder()
.days("Monday")
.endTime(TimeArgs.builder()
.hour(18)
.minute(30.0)
.build())
.limitInMbps(2000)
.startTime(TimeArgs.builder()
.hour(9)
.minute(0.0)
.build())
.build())
.build())
.build());
}
}
resources:
agent:
type: azure-native:storagemover:Agent
properties:
agentName: examples-agentName
arcResourceId: /subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName
arcVmUuid: 3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9
description: Example Agent Description
resourceGroupName: examples-rg
storageMoverName: examples-storageMoverName
uploadLimitSchedule:
weeklyRecurrences:
- days:
- Monday
endTime:
hour: 18
minute: 30
limitInMbps: 2000
startTime:
hour: 9
minute: 0
The uploadLimitSchedule property defines when bandwidth limits apply. Each weeklyRecurrences entry specifies days, start and end times, and a bandwidth cap in Mbps. Here, the agent limits uploads to 2000 Mbps (2 Gbps) on Mondays from 9:00 AM to 6:30 PM. Outside this window, the agent uses available bandwidth without restriction.
Schedule overnight and weekend bandwidth windows
Organizations often need different bandwidth limits for business hours versus off-hours, requiring schedules that span midnight.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const agent = new azure_native.storagemover.Agent("agent", {
agentName: "examples-agentName",
arcResourceId: "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
arcVmUuid: "3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
resourceGroupName: "examples-rg",
storageMoverName: "examples-storageMoverName",
uploadLimitSchedule: {
weeklyRecurrences: [
{
days: [
azure_native.storagemover.DayOfWeek.Monday,
azure_native.storagemover.DayOfWeek.Tuesday,
azure_native.storagemover.DayOfWeek.Wednesday,
azure_native.storagemover.DayOfWeek.Thursday,
azure_native.storagemover.DayOfWeek.Friday,
azure_native.storagemover.DayOfWeek.Saturday,
azure_native.storagemover.DayOfWeek.Sunday,
],
endTime: {
hour: 24,
minute: 0,
},
limitInMbps: 2000,
startTime: {
hour: 18,
minute: 0,
},
},
{
days: [
azure_native.storagemover.DayOfWeek.Monday,
azure_native.storagemover.DayOfWeek.Tuesday,
azure_native.storagemover.DayOfWeek.Wednesday,
azure_native.storagemover.DayOfWeek.Thursday,
azure_native.storagemover.DayOfWeek.Friday,
azure_native.storagemover.DayOfWeek.Saturday,
azure_native.storagemover.DayOfWeek.Sunday,
],
endTime: {
hour: 9,
minute: 0,
},
limitInMbps: 2000,
startTime: {
hour: 0,
minute: 0,
},
},
],
},
});
import pulumi
import pulumi_azure_native as azure_native
agent = azure_native.storagemover.Agent("agent",
agent_name="examples-agentName",
arc_resource_id="/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
arc_vm_uuid="3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
resource_group_name="examples-rg",
storage_mover_name="examples-storageMoverName",
upload_limit_schedule={
"weekly_recurrences": [
{
"days": [
azure_native.storagemover.DayOfWeek.MONDAY,
azure_native.storagemover.DayOfWeek.TUESDAY,
azure_native.storagemover.DayOfWeek.WEDNESDAY,
azure_native.storagemover.DayOfWeek.THURSDAY,
azure_native.storagemover.DayOfWeek.FRIDAY,
azure_native.storagemover.DayOfWeek.SATURDAY,
azure_native.storagemover.DayOfWeek.SUNDAY,
],
"end_time": {
"hour": 24,
"minute": 0,
},
"limit_in_mbps": 2000,
"start_time": {
"hour": 18,
"minute": 0,
},
},
{
"days": [
azure_native.storagemover.DayOfWeek.MONDAY,
azure_native.storagemover.DayOfWeek.TUESDAY,
azure_native.storagemover.DayOfWeek.WEDNESDAY,
azure_native.storagemover.DayOfWeek.THURSDAY,
azure_native.storagemover.DayOfWeek.FRIDAY,
azure_native.storagemover.DayOfWeek.SATURDAY,
azure_native.storagemover.DayOfWeek.SUNDAY,
],
"end_time": {
"hour": 9,
"minute": 0,
},
"limit_in_mbps": 2000,
"start_time": {
"hour": 0,
"minute": 0,
},
},
],
})
package main
import (
storagemover "github.com/pulumi/pulumi-azure-native-sdk/storagemover/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storagemover.NewAgent(ctx, "agent", &storagemover.AgentArgs{
AgentName: pulumi.String("examples-agentName"),
ArcResourceId: pulumi.String("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName"),
ArcVmUuid: pulumi.String("3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9"),
ResourceGroupName: pulumi.String("examples-rg"),
StorageMoverName: pulumi.String("examples-storageMoverName"),
UploadLimitSchedule: &storagemover.UploadLimitScheduleArgs{
WeeklyRecurrences: storagemover.UploadLimitWeeklyRecurrenceArray{
&storagemover.UploadLimitWeeklyRecurrenceArgs{
Days: storagemover.DayOfWeekArray{
storagemover.DayOfWeekMonday,
storagemover.DayOfWeekTuesday,
storagemover.DayOfWeekWednesday,
storagemover.DayOfWeekThursday,
storagemover.DayOfWeekFriday,
storagemover.DayOfWeekSaturday,
storagemover.DayOfWeekSunday,
},
EndTime: &storagemover.TimeArgs{
Hour: pulumi.Int(24),
Minute: pulumi.Float64(0),
},
LimitInMbps: pulumi.Int(2000),
StartTime: &storagemover.TimeArgs{
Hour: pulumi.Int(18),
Minute: pulumi.Float64(0),
},
},
&storagemover.UploadLimitWeeklyRecurrenceArgs{
Days: storagemover.DayOfWeekArray{
storagemover.DayOfWeekMonday,
storagemover.DayOfWeekTuesday,
storagemover.DayOfWeekWednesday,
storagemover.DayOfWeekThursday,
storagemover.DayOfWeekFriday,
storagemover.DayOfWeekSaturday,
storagemover.DayOfWeekSunday,
},
EndTime: &storagemover.TimeArgs{
Hour: pulumi.Int(9),
Minute: pulumi.Float64(0),
},
LimitInMbps: pulumi.Int(2000),
StartTime: &storagemover.TimeArgs{
Hour: pulumi.Int(0),
Minute: pulumi.Float64(0),
},
},
},
},
})
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 agent = new AzureNative.StorageMover.Agent("agent", new()
{
AgentName = "examples-agentName",
ArcResourceId = "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName",
ArcVmUuid = "3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9",
ResourceGroupName = "examples-rg",
StorageMoverName = "examples-storageMoverName",
UploadLimitSchedule = new AzureNative.StorageMover.Inputs.UploadLimitScheduleArgs
{
WeeklyRecurrences = new[]
{
new AzureNative.StorageMover.Inputs.UploadLimitWeeklyRecurrenceArgs
{
Days = new[]
{
AzureNative.StorageMover.DayOfWeek.Monday,
AzureNative.StorageMover.DayOfWeek.Tuesday,
AzureNative.StorageMover.DayOfWeek.Wednesday,
AzureNative.StorageMover.DayOfWeek.Thursday,
AzureNative.StorageMover.DayOfWeek.Friday,
AzureNative.StorageMover.DayOfWeek.Saturday,
AzureNative.StorageMover.DayOfWeek.Sunday,
},
EndTime = new AzureNative.StorageMover.Inputs.TimeArgs
{
Hour = 24,
Minute = 0,
},
LimitInMbps = 2000,
StartTime = new AzureNative.StorageMover.Inputs.TimeArgs
{
Hour = 18,
Minute = 0,
},
},
new AzureNative.StorageMover.Inputs.UploadLimitWeeklyRecurrenceArgs
{
Days = new[]
{
AzureNative.StorageMover.DayOfWeek.Monday,
AzureNative.StorageMover.DayOfWeek.Tuesday,
AzureNative.StorageMover.DayOfWeek.Wednesday,
AzureNative.StorageMover.DayOfWeek.Thursday,
AzureNative.StorageMover.DayOfWeek.Friday,
AzureNative.StorageMover.DayOfWeek.Saturday,
AzureNative.StorageMover.DayOfWeek.Sunday,
},
EndTime = new AzureNative.StorageMover.Inputs.TimeArgs
{
Hour = 9,
Minute = 0,
},
LimitInMbps = 2000,
StartTime = new AzureNative.StorageMover.Inputs.TimeArgs
{
Hour = 0,
Minute = 0,
},
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.storagemover.Agent;
import com.pulumi.azurenative.storagemover.AgentArgs;
import com.pulumi.azurenative.storagemover.inputs.UploadLimitScheduleArgs;
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 agent = new Agent("agent", AgentArgs.builder()
.agentName("examples-agentName")
.arcResourceId("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName")
.arcVmUuid("3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9")
.resourceGroupName("examples-rg")
.storageMoverName("examples-storageMoverName")
.uploadLimitSchedule(UploadLimitScheduleArgs.builder()
.weeklyRecurrences(
UploadLimitWeeklyRecurrenceArgs.builder()
.days(
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday")
.endTime(TimeArgs.builder()
.hour(24)
.minute(0.0)
.build())
.limitInMbps(2000)
.startTime(TimeArgs.builder()
.hour(18)
.minute(0.0)
.build())
.build(),
UploadLimitWeeklyRecurrenceArgs.builder()
.days(
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday")
.endTime(TimeArgs.builder()
.hour(9)
.minute(0.0)
.build())
.limitInMbps(2000)
.startTime(TimeArgs.builder()
.hour(0)
.minute(0.0)
.build())
.build())
.build())
.build());
}
}
resources:
agent:
type: azure-native:storagemover:Agent
properties:
agentName: examples-agentName
arcResourceId: /subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.HybridCompute/machines/examples-hybridComputeName
arcVmUuid: 3bb2c024-eba9-4d18-9e7a-1d772fcc5fe9
resourceGroupName: examples-rg
storageMoverName: examples-storageMoverName
uploadLimitSchedule:
weeklyRecurrences:
- days:
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
- Sunday
endTime:
hour: 24
minute: 0
limitInMbps: 2000
startTime:
hour: 18
minute: 0
- days:
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
- Sunday
endTime:
hour: 9
minute: 0
limitInMbps: 2000
startTime:
hour: 0
minute: 0
Multiple weeklyRecurrences entries create complex schedules. The first recurrence limits bandwidth from 6 PM to midnight (hour 24) daily. The second recurrence continues the limit from midnight to 9 AM. Together, they create an overnight window where uploads are capped at 2 Gbps, leaving daytime hours unrestricted.
Beyond these examples
These snippets focus on specific agent-level features: agent registration with Arc-enabled machines, bandwidth throttling schedules, and multi-window time-based policies. They’re intentionally minimal rather than full migration deployments.
The examples reference pre-existing infrastructure such as Azure Arc-enabled machines, Storage Mover resources, and resource groups and subscriptions. They focus on configuring the agent rather than provisioning Arc or Storage Mover infrastructure.
To keep things focused, common agent patterns are omitted, including:
- Agent status monitoring (agentStatus, lastStatusUpdate)
- Hardware reporting (memoryInMB, numberOfCores, uptimeInSeconds)
- Network diagnostics (localIPAddress)
- Time zone configuration (timeZone)
These omissions are intentional: the goal is to illustrate how each agent feature is wired, not provide drop-in migration modules. See the Storage Mover Agent resource reference for all available configuration options.
Let's configure Azure Storage Mover Agents
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Agent Setup & Requirements
arcResourceId (the fully qualified resource ID of the Hybrid Compute machine) and arcVmUuid (the VM UUID), along with agentName, resourceGroupName, and storageMoverName.arcResourceId and arcVmUuid are required properties pointing to a Microsoft.HybridCompute/machines resource.Configuration & Immutability
arcResourceId, arcVmUuid, agentName, resourceGroupName, and storageMoverName. Changing any of these requires recreating the agent.description and uploadLimitSchedule are not marked as immutable and can be updated after creation.Bandwidth Management
uploadLimitSchedule with weeklyRecurrences specifying days, startTime, endTime, and limitInMbps. For example, to limit to 2000 Mbps on Mondays from 9:00 to 18:30, set those values in a recurrence.weeklyRecurrences: one from evening to midnight (with endTime.hour set to 24), and another from midnight (with startTime.hour set to 0) to morning. The schedule uses the agent’s local time zone.Monitoring & Status
agentStatus, agentVersion, localIPAddress, memoryInMB, numberOfCores, timeZone, uptimeInSeconds, and lastStatusUpdate as computed output properties.