The azure-native:storagemover:Endpoint resource, part of the Pulumi Azure Native provider, defines source and destination endpoints for Azure Storage Mover migration jobs. This guide focuses on three capabilities: Azure Storage destinations (Blob Container and File Share), on-premises NFS and SMB sources, and Key Vault credential management.
Endpoints belong to a Storage Mover resource and reference existing storage accounts, on-premises servers, or Key Vault secrets. The examples are intentionally small. Combine them with your own Storage Mover configuration, job definitions, and agent deployment.
Define a Blob Container endpoint for Azure Storage
Migration jobs often target Azure Blob Storage as the destination for object data.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const endpoint = new azure_native.storagemover.Endpoint("endpoint", {
endpointName: "examples-endpointName",
properties: {
blobContainerName: "examples-blobcontainer",
description: "Example Storage Blob Container Endpoint Description",
endpointType: "AzureStorageBlobContainer",
storageAccountResourceId: "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa",
},
resourceGroupName: "examples-rg",
storageMoverName: "examples-storageMoverName",
});
import pulumi
import pulumi_azure_native as azure_native
endpoint = azure_native.storagemover.Endpoint("endpoint",
endpoint_name="examples-endpointName",
properties={
"blob_container_name": "examples-blobcontainer",
"description": "Example Storage Blob Container Endpoint Description",
"endpoint_type": "AzureStorageBlobContainer",
"storage_account_resource_id": "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa",
},
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.NewEndpoint(ctx, "endpoint", &storagemover.EndpointArgs{
EndpointName: pulumi.String("examples-endpointName"),
Properties: &storagemover.AzureStorageBlobContainerEndpointPropertiesArgs{
BlobContainerName: pulumi.String("examples-blobcontainer"),
Description: pulumi.String("Example Storage Blob Container Endpoint Description"),
EndpointType: pulumi.String("AzureStorageBlobContainer"),
StorageAccountResourceId: pulumi.String("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa"),
},
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 endpoint = new AzureNative.StorageMover.Endpoint("endpoint", new()
{
EndpointName = "examples-endpointName",
Properties = new AzureNative.StorageMover.Inputs.AzureStorageBlobContainerEndpointPropertiesArgs
{
BlobContainerName = "examples-blobcontainer",
Description = "Example Storage Blob Container Endpoint Description",
EndpointType = "AzureStorageBlobContainer",
StorageAccountResourceId = "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa",
},
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.Endpoint;
import com.pulumi.azurenative.storagemover.EndpointArgs;
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 endpoint = new Endpoint("endpoint", EndpointArgs.builder()
.endpointName("examples-endpointName")
.properties(AzureStorageBlobContainerEndpointPropertiesArgs.builder()
.blobContainerName("examples-blobcontainer")
.description("Example Storage Blob Container Endpoint Description")
.endpointType("AzureStorageBlobContainer")
.storageAccountResourceId("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa")
.build())
.resourceGroupName("examples-rg")
.storageMoverName("examples-storageMoverName")
.build());
}
}
resources:
endpoint:
type: azure-native:storagemover:Endpoint
properties:
endpointName: examples-endpointName
properties:
blobContainerName: examples-blobcontainer
description: Example Storage Blob Container Endpoint Description
endpointType: AzureStorageBlobContainer
storageAccountResourceId: /subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa
resourceGroupName: examples-rg
storageMoverName: examples-storageMoverName
The endpointType property specifies “AzureStorageBlobContainer” to indicate this endpoint routes data to Blob Storage. The storageAccountResourceId points to your storage account, and blobContainerName identifies the target container. The endpoint must belong to a Storage Mover resource specified by storageMoverName.
Define an SMB File Share endpoint for Azure Files
Teams migrating file server data to Azure Files use SMB File Share endpoints to preserve file share semantics.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const endpoint = new azure_native.storagemover.Endpoint("endpoint", {
endpointName: "examples-endpointName",
properties: {
description: "Example Storage File Share Endpoint Description",
endpointType: "AzureStorageSmbFileShare",
fileShareName: "examples-fileshare",
storageAccountResourceId: "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa",
},
resourceGroupName: "examples-rg",
storageMoverName: "examples-storageMoverName",
});
import pulumi
import pulumi_azure_native as azure_native
endpoint = azure_native.storagemover.Endpoint("endpoint",
endpoint_name="examples-endpointName",
properties={
"description": "Example Storage File Share Endpoint Description",
"endpoint_type": "AzureStorageSmbFileShare",
"file_share_name": "examples-fileshare",
"storage_account_resource_id": "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa",
},
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.NewEndpoint(ctx, "endpoint", &storagemover.EndpointArgs{
EndpointName: pulumi.String("examples-endpointName"),
Properties: &storagemover.AzureStorageSmbFileShareEndpointPropertiesArgs{
Description: pulumi.String("Example Storage File Share Endpoint Description"),
EndpointType: pulumi.String("AzureStorageSmbFileShare"),
FileShareName: pulumi.String("examples-fileshare"),
StorageAccountResourceId: pulumi.String("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa"),
},
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 endpoint = new AzureNative.StorageMover.Endpoint("endpoint", new()
{
EndpointName = "examples-endpointName",
Properties = new AzureNative.StorageMover.Inputs.AzureStorageSmbFileShareEndpointPropertiesArgs
{
Description = "Example Storage File Share Endpoint Description",
EndpointType = "AzureStorageSmbFileShare",
FileShareName = "examples-fileshare",
StorageAccountResourceId = "/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa",
},
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.Endpoint;
import com.pulumi.azurenative.storagemover.EndpointArgs;
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 endpoint = new Endpoint("endpoint", EndpointArgs.builder()
.endpointName("examples-endpointName")
.properties(AzureStorageSmbFileShareEndpointPropertiesArgs.builder()
.description("Example Storage File Share Endpoint Description")
.endpointType("AzureStorageSmbFileShare")
.fileShareName("examples-fileshare")
.storageAccountResourceId("/subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa")
.build())
.resourceGroupName("examples-rg")
.storageMoverName("examples-storageMoverName")
.build());
}
}
resources:
endpoint:
type: azure-native:storagemover:Endpoint
properties:
endpointName: examples-endpointName
properties:
description: Example Storage File Share Endpoint Description
endpointType: AzureStorageSmbFileShare
fileShareName: examples-fileshare
storageAccountResourceId: /subscriptions/60bcfc77-6589-4da2-b7fd-f9ec9322cf95/resourceGroups/examples-rg/providers/Microsoft.Storage/storageAccounts/examplesa
resourceGroupName: examples-rg
storageMoverName: examples-storageMoverName
Setting endpointType to “AzureStorageSmbFileShare” configures the endpoint for Azure Files. The fileShareName property identifies the target file share within the storage account. This endpoint type maintains file metadata and permissions during migration.
Connect to on-premises NFS exports as sources
Migrations from on-premises NAS systems typically start with NFS endpoints that point to existing network exports.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const endpoint = new azure_native.storagemover.Endpoint("endpoint", {
endpointName: "examples-endpointName",
properties: {
description: "Example NFS Mount Endpoint Description",
endpointType: "NfsMount",
"export": "examples-exportName",
host: "0.0.0.0",
},
resourceGroupName: "examples-rg",
storageMoverName: "examples-storageMoverName",
});
import pulumi
import pulumi_azure_native as azure_native
endpoint = azure_native.storagemover.Endpoint("endpoint",
endpoint_name="examples-endpointName",
properties={
"description": "Example NFS Mount Endpoint Description",
"endpoint_type": "NfsMount",
"export": "examples-exportName",
"host": "0.0.0.0",
},
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.NewEndpoint(ctx, "endpoint", &storagemover.EndpointArgs{
EndpointName: pulumi.String("examples-endpointName"),
Properties: &storagemover.NfsMountEndpointPropertiesArgs{
Description: pulumi.String("Example NFS Mount Endpoint Description"),
EndpointType: pulumi.String("NfsMount"),
Export: pulumi.String("examples-exportName"),
Host: pulumi.String("0.0.0.0"),
},
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 endpoint = new AzureNative.StorageMover.Endpoint("endpoint", new()
{
EndpointName = "examples-endpointName",
Properties = new AzureNative.StorageMover.Inputs.NfsMountEndpointPropertiesArgs
{
Description = "Example NFS Mount Endpoint Description",
EndpointType = "NfsMount",
Export = "examples-exportName",
Host = "0.0.0.0",
},
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.Endpoint;
import com.pulumi.azurenative.storagemover.EndpointArgs;
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 endpoint = new Endpoint("endpoint", EndpointArgs.builder()
.endpointName("examples-endpointName")
.properties(NfsMountEndpointPropertiesArgs.builder()
.description("Example NFS Mount Endpoint Description")
.endpointType("NfsMount")
.export("examples-exportName")
.host("0.0.0.0")
.build())
.resourceGroupName("examples-rg")
.storageMoverName("examples-storageMoverName")
.build());
}
}
resources:
endpoint:
type: azure-native:storagemover:Endpoint
properties:
endpointName: examples-endpointName
properties:
description: Example NFS Mount Endpoint Description
endpointType: NfsMount
export: examples-exportName
host: 0.0.0.0
resourceGroupName: examples-rg
storageMoverName: examples-storageMoverName
The endpointType “NfsMount” indicates this endpoint reads from an NFS server. The host property specifies the server address, and export identifies the NFS export path. The Storage Mover agent must have network access to the NFS server.
Connect to SMB shares with Key Vault credentials
Windows file servers and SMB-based NAS systems require authenticated access using credentials stored in Azure Key Vault.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const endpoint = new azure_native.storagemover.Endpoint("endpoint", {
endpointName: "examples-endpointName",
properties: {
credentials: {
passwordUri: "https://examples-azureKeyVault.vault.azure.net/secrets/examples-password",
type: "AzureKeyVaultSmb",
usernameUri: "https://examples-azureKeyVault.vault.azure.net/secrets/examples-username",
},
description: "Example SMB Mount Endpoint Description",
endpointType: "SmbMount",
host: "0.0.0.0",
shareName: "examples-shareName",
},
resourceGroupName: "examples-rg",
storageMoverName: "examples-storageMoverName",
});
import pulumi
import pulumi_azure_native as azure_native
endpoint = azure_native.storagemover.Endpoint("endpoint",
endpoint_name="examples-endpointName",
properties={
"credentials": {
"password_uri": "https://examples-azureKeyVault.vault.azure.net/secrets/examples-password",
"type": "AzureKeyVaultSmb",
"username_uri": "https://examples-azureKeyVault.vault.azure.net/secrets/examples-username",
},
"description": "Example SMB Mount Endpoint Description",
"endpoint_type": "SmbMount",
"host": "0.0.0.0",
"share_name": "examples-shareName",
},
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.NewEndpoint(ctx, "endpoint", &storagemover.EndpointArgs{
EndpointName: pulumi.String("examples-endpointName"),
Properties: &storagemover.SmbMountEndpointPropertiesArgs{
Credentials: &storagemover.AzureKeyVaultSmbCredentialsArgs{
PasswordUri: pulumi.String("https://examples-azureKeyVault.vault.azure.net/secrets/examples-password"),
Type: pulumi.String("AzureKeyVaultSmb"),
UsernameUri: pulumi.String("https://examples-azureKeyVault.vault.azure.net/secrets/examples-username"),
},
Description: pulumi.String("Example SMB Mount Endpoint Description"),
EndpointType: pulumi.String("SmbMount"),
Host: pulumi.String("0.0.0.0"),
ShareName: pulumi.String("examples-shareName"),
},
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 endpoint = new AzureNative.StorageMover.Endpoint("endpoint", new()
{
EndpointName = "examples-endpointName",
Properties = new AzureNative.StorageMover.Inputs.SmbMountEndpointPropertiesArgs
{
Credentials = new AzureNative.StorageMover.Inputs.AzureKeyVaultSmbCredentialsArgs
{
PasswordUri = "https://examples-azureKeyVault.vault.azure.net/secrets/examples-password",
Type = "AzureKeyVaultSmb",
UsernameUri = "https://examples-azureKeyVault.vault.azure.net/secrets/examples-username",
},
Description = "Example SMB Mount Endpoint Description",
EndpointType = "SmbMount",
Host = "0.0.0.0",
ShareName = "examples-shareName",
},
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.Endpoint;
import com.pulumi.azurenative.storagemover.EndpointArgs;
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 endpoint = new Endpoint("endpoint", EndpointArgs.builder()
.endpointName("examples-endpointName")
.properties(SmbMountEndpointPropertiesArgs.builder()
.credentials(Map.ofEntries(
Map.entry("passwordUri", "https://examples-azureKeyVault.vault.azure.net/secrets/examples-password"),
Map.entry("type", "AzureKeyVaultSmb"),
Map.entry("usernameUri", "https://examples-azureKeyVault.vault.azure.net/secrets/examples-username")
))
.description("Example SMB Mount Endpoint Description")
.endpointType("SmbMount")
.host("0.0.0.0")
.shareName("examples-shareName")
.build())
.resourceGroupName("examples-rg")
.storageMoverName("examples-storageMoverName")
.build());
}
}
resources:
endpoint:
type: azure-native:storagemover:Endpoint
properties:
endpointName: examples-endpointName
properties:
credentials:
passwordUri: https://examples-azureKeyVault.vault.azure.net/secrets/examples-password
type: AzureKeyVaultSmb
usernameUri: https://examples-azureKeyVault.vault.azure.net/secrets/examples-username
description: Example SMB Mount Endpoint Description
endpointType: SmbMount
host: 0.0.0.0
shareName: examples-shareName
resourceGroupName: examples-rg
storageMoverName: examples-storageMoverName
For SMB sources, the credentials block references Key Vault secrets containing the username and password. The passwordUri and usernameUri properties point to specific secrets. At runtime, Storage Mover retrieves these credentials to authenticate with the SMB server specified by host and shareName.
Beyond these examples
These snippets focus on specific endpoint features: Azure Storage destinations (Blob Container and File Share), on-premises sources (NFS and SMB mounts), and Key Vault credential integration. They’re intentionally minimal rather than complete migration configurations.
The examples reference pre-existing infrastructure such as Storage Mover resources, storage accounts with containers or file shares, on-premises NFS or SMB servers, and Azure Key Vault with stored credentials. They focus on defining endpoints rather than provisioning the surrounding infrastructure.
To keep things focused, common endpoint patterns are omitted, including:
- NFS version selection (nfsVersion property)
- Endpoint lifecycle management (updates, deletion)
- Job definitions that use these endpoints
- Agent registration and network connectivity
These omissions are intentional: the goal is to illustrate how each endpoint type is wired, not provide drop-in migration solutions. See the Storage Mover Endpoint resource reference for all available configuration options.
Let's configure Azure Storage Mover Endpoints
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Endpoint Types & Configuration
AzureStorageBlobContainer), Azure Storage SMB File Share (AzureStorageSmbFileShare), NFS Mount (NfsMount), and SMB Mount (SmbMount).endpointType to AzureStorageBlobContainer and provide blobContainerName and storageAccountResourceId. For File Share, use AzureStorageSmbFileShare with fileShareName and storageAccountResourceId.host and export properties, while SMB Mount requires host, shareName, and credentials (stored in Azure Key Vault).Security & Credentials
credentials with type AzureKeyVaultSmb, providing passwordUri and usernameUri pointing to Key Vault secrets.Resource Management
endpointName, resourceGroupName, and storageMoverName. You’ll need to recreate the endpoint to change these.pulumi package add azure-native storagemover [ApiVersion]. Available versions include 2023-03-01, 2023-07-01-preview, 2023-10-01, and 2025-07-01.