The azure-native:databox:Job resource, part of the Pulumi Azure Native provider, orchestrates physical data transfer between on-premises and Azure Storage using DataBox devices. This guide focuses on three capabilities: import and export job creation, password and encryption configuration, and transfer scope filtering.
DataBox jobs reference existing Azure Storage accounts and coordinate device shipment to your specified address. The examples are intentionally small. Combine them with your own storage accounts, security policies, and operational procedures.
Import data from on-premises to Azure Storage
Organizations moving large datasets to Azure use DataBox when network transfer would take too long or cost too much.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const job = new azure_native.databox.Job("job", {
details: {
contactDetails: {
contactName: "XXXX XXXX",
emailList: ["xxxx@xxxx.xxx"],
phone: "0000000000",
phoneExtension: "",
},
dataImportDetails: [{
accountDetails: {
dataAccountType: "StorageAccount",
storageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
}],
jobDetailsType: "DataBox",
shippingAddress: {
addressType: azure_native.databox.AddressType.Commercial,
city: "XXXX XXXX",
companyName: "XXXX XXXX",
country: "XX",
postalCode: "00000",
stateOrProvince: "XX",
streetAddress1: "XXXX XXXX",
streetAddress2: "XXXX XXXX",
},
},
jobName: "TestJobName1",
location: "westus",
resourceGroupName: "YourResourceGroupName",
sku: {
name: azure_native.databox.SkuName.DataBox,
},
transferType: azure_native.databox.TransferType.ImportToAzure,
});
import pulumi
import pulumi_azure_native as azure_native
job = azure_native.databox.Job("job",
details={
"contact_details": {
"contact_name": "XXXX XXXX",
"email_list": ["xxxx@xxxx.xxx"],
"phone": "0000000000",
"phone_extension": "",
},
"data_import_details": [{
"account_details": {
"data_account_type": "StorageAccount",
"storage_account_id": "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
}],
"job_details_type": "DataBox",
"shipping_address": {
"address_type": azure_native.databox.AddressType.COMMERCIAL,
"city": "XXXX XXXX",
"company_name": "XXXX XXXX",
"country": "XX",
"postal_code": "00000",
"state_or_province": "XX",
"street_address1": "XXXX XXXX",
"street_address2": "XXXX XXXX",
},
},
job_name="TestJobName1",
location="westus",
resource_group_name="YourResourceGroupName",
sku={
"name": azure_native.databox.SkuName.DATA_BOX,
},
transfer_type=azure_native.databox.TransferType.IMPORT_TO_AZURE)
package main
import (
databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
Details: &databox.DataBoxJobDetailsArgs{
ContactDetails: &databox.ContactDetailsArgs{
ContactName: pulumi.String("XXXX XXXX"),
EmailList: pulumi.StringArray{
pulumi.String("xxxx@xxxx.xxx"),
},
Phone: pulumi.String("0000000000"),
PhoneExtension: pulumi.String(""),
},
DataImportDetails: databox.DataImportDetailsArray{
&databox.DataImportDetailsArgs{
AccountDetails: databox.StorageAccountDetails{
DataAccountType: "StorageAccount",
StorageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
},
},
JobDetailsType: pulumi.String("DataBox"),
ShippingAddress: &databox.ShippingAddressArgs{
AddressType: pulumi.String(databox.AddressTypeCommercial),
City: pulumi.String("XXXX XXXX"),
CompanyName: pulumi.String("XXXX XXXX"),
Country: pulumi.String("XX"),
PostalCode: pulumi.String("00000"),
StateOrProvince: pulumi.String("XX"),
StreetAddress1: pulumi.String("XXXX XXXX"),
StreetAddress2: pulumi.String("XXXX XXXX"),
},
},
JobName: pulumi.String("TestJobName1"),
Location: pulumi.String("westus"),
ResourceGroupName: pulumi.String("YourResourceGroupName"),
Sku: &databox.SkuArgs{
Name: pulumi.String(databox.SkuNameDataBox),
},
TransferType: pulumi.String(databox.TransferTypeImportToAzure),
})
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 job = new AzureNative.DataBox.Job("job", new()
{
Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
{
ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
{
ContactName = "XXXX XXXX",
EmailList = new[]
{
"xxxx@xxxx.xxx",
},
Phone = "0000000000",
PhoneExtension = "",
},
DataImportDetails = new[]
{
new AzureNative.DataBox.Inputs.DataImportDetailsArgs
{
AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
{
DataAccountType = "StorageAccount",
StorageAccountId = "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
},
},
JobDetailsType = "DataBox",
ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
{
AddressType = AzureNative.DataBox.AddressType.Commercial,
City = "XXXX XXXX",
CompanyName = "XXXX XXXX",
Country = "XX",
PostalCode = "00000",
StateOrProvince = "XX",
StreetAddress1 = "XXXX XXXX",
StreetAddress2 = "XXXX XXXX",
},
},
JobName = "TestJobName1",
Location = "westus",
ResourceGroupName = "YourResourceGroupName",
Sku = new AzureNative.DataBox.Inputs.SkuArgs
{
Name = AzureNative.DataBox.SkuName.DataBox,
},
TransferType = AzureNative.DataBox.TransferType.ImportToAzure,
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
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 job = new Job("job", JobArgs.builder()
.details(DataBoxJobDetailsArgs.builder()
.contactDetails(ContactDetailsArgs.builder()
.contactName("XXXX XXXX")
.emailList("xxxx@xxxx.xxx")
.phone("0000000000")
.phoneExtension("")
.build())
.dataImportDetails(DataImportDetailsArgs.builder()
.accountDetails(StorageAccountDetailsArgs.builder()
.dataAccountType("StorageAccount")
.storageAccountId("/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
.build())
.build())
.jobDetailsType("DataBox")
.shippingAddress(ShippingAddressArgs.builder()
.addressType("Commercial")
.city("XXXX XXXX")
.companyName("XXXX XXXX")
.country("XX")
.postalCode("00000")
.stateOrProvince("XX")
.streetAddress1("XXXX XXXX")
.streetAddress2("XXXX XXXX")
.build())
.build())
.jobName("TestJobName1")
.location("westus")
.resourceGroupName("YourResourceGroupName")
.sku(SkuArgs.builder()
.name("DataBox")
.build())
.transferType("ImportToAzure")
.build());
}
}
resources:
job:
type: azure-native:databox:Job
properties:
details:
contactDetails:
contactName: XXXX XXXX
emailList:
- xxxx@xxxx.xxx
phone: '0000000000'
phoneExtension: ""
dataImportDetails:
- accountDetails:
dataAccountType: StorageAccount
storageAccountId: /subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
jobDetailsType: DataBox
shippingAddress:
addressType: Commercial
city: XXXX XXXX
companyName: XXXX XXXX
country: XX
postalCode: '00000'
stateOrProvince: XX
streetAddress1: XXXX XXXX
streetAddress2: XXXX XXXX
jobName: TestJobName1
location: westus
resourceGroupName: YourResourceGroupName
sku:
name: DataBox
transferType: ImportToAzure
The transferType property determines data direction (ImportToAzure or ExportFromAzure). The dataImportDetails array specifies destination storage accounts by resource ID. The contactDetails and shippingAddress properties coordinate device delivery and return. The sku property selects device capacity (DataBox, DataBoxDisk, DataBoxHeavy).
Set device and share passwords for data access
Teams that need to control access to the device and its storage shares can specify passwords during job creation.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const job = new azure_native.databox.Job("job", {
details: {
contactDetails: {
contactName: "XXXX XXXX",
emailList: ["xxxx@xxxx.xxx"],
phone: "0000000000",
phoneExtension: "",
},
dataImportDetails: [{
accountDetails: {
dataAccountType: "StorageAccount",
sharePassword: "<sharePassword>",
storageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
}],
devicePassword: "<devicePassword>",
jobDetailsType: "DataBox",
shippingAddress: {
addressType: azure_native.databox.AddressType.Commercial,
city: "XXXX XXXX",
companyName: "XXXX XXXX",
country: "XX",
postalCode: "00000",
stateOrProvince: "XX",
streetAddress1: "XXXX XXXX",
streetAddress2: "XXXX XXXX",
},
},
jobName: "TestJobName1",
location: "westus",
resourceGroupName: "YourResourceGroupName",
sku: {
name: azure_native.databox.SkuName.DataBox,
},
transferType: azure_native.databox.TransferType.ImportToAzure,
});
import pulumi
import pulumi_azure_native as azure_native
job = azure_native.databox.Job("job",
details={
"contact_details": {
"contact_name": "XXXX XXXX",
"email_list": ["xxxx@xxxx.xxx"],
"phone": "0000000000",
"phone_extension": "",
},
"data_import_details": [{
"account_details": {
"data_account_type": "StorageAccount",
"share_password": "<sharePassword>",
"storage_account_id": "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
}],
"device_password": "<devicePassword>",
"job_details_type": "DataBox",
"shipping_address": {
"address_type": azure_native.databox.AddressType.COMMERCIAL,
"city": "XXXX XXXX",
"company_name": "XXXX XXXX",
"country": "XX",
"postal_code": "00000",
"state_or_province": "XX",
"street_address1": "XXXX XXXX",
"street_address2": "XXXX XXXX",
},
},
job_name="TestJobName1",
location="westus",
resource_group_name="YourResourceGroupName",
sku={
"name": azure_native.databox.SkuName.DATA_BOX,
},
transfer_type=azure_native.databox.TransferType.IMPORT_TO_AZURE)
package main
import (
databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
Details: &databox.DataBoxJobDetailsArgs{
ContactDetails: &databox.ContactDetailsArgs{
ContactName: pulumi.String("XXXX XXXX"),
EmailList: pulumi.StringArray{
pulumi.String("xxxx@xxxx.xxx"),
},
Phone: pulumi.String("0000000000"),
PhoneExtension: pulumi.String(""),
},
DataImportDetails: databox.DataImportDetailsArray{
&databox.DataImportDetailsArgs{
AccountDetails: databox.StorageAccountDetails{
DataAccountType: "StorageAccount",
SharePassword: "<sharePassword>",
StorageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
},
},
DevicePassword: pulumi.String("<devicePassword>"),
JobDetailsType: pulumi.String("DataBox"),
ShippingAddress: &databox.ShippingAddressArgs{
AddressType: pulumi.String(databox.AddressTypeCommercial),
City: pulumi.String("XXXX XXXX"),
CompanyName: pulumi.String("XXXX XXXX"),
Country: pulumi.String("XX"),
PostalCode: pulumi.String("00000"),
StateOrProvince: pulumi.String("XX"),
StreetAddress1: pulumi.String("XXXX XXXX"),
StreetAddress2: pulumi.String("XXXX XXXX"),
},
},
JobName: pulumi.String("TestJobName1"),
Location: pulumi.String("westus"),
ResourceGroupName: pulumi.String("YourResourceGroupName"),
Sku: &databox.SkuArgs{
Name: pulumi.String(databox.SkuNameDataBox),
},
TransferType: pulumi.String(databox.TransferTypeImportToAzure),
})
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 job = new AzureNative.DataBox.Job("job", new()
{
Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
{
ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
{
ContactName = "XXXX XXXX",
EmailList = new[]
{
"xxxx@xxxx.xxx",
},
Phone = "0000000000",
PhoneExtension = "",
},
DataImportDetails = new[]
{
new AzureNative.DataBox.Inputs.DataImportDetailsArgs
{
AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
{
DataAccountType = "StorageAccount",
SharePassword = "<sharePassword>",
StorageAccountId = "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
},
},
DevicePassword = "<devicePassword>",
JobDetailsType = "DataBox",
ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
{
AddressType = AzureNative.DataBox.AddressType.Commercial,
City = "XXXX XXXX",
CompanyName = "XXXX XXXX",
Country = "XX",
PostalCode = "00000",
StateOrProvince = "XX",
StreetAddress1 = "XXXX XXXX",
StreetAddress2 = "XXXX XXXX",
},
},
JobName = "TestJobName1",
Location = "westus",
ResourceGroupName = "YourResourceGroupName",
Sku = new AzureNative.DataBox.Inputs.SkuArgs
{
Name = AzureNative.DataBox.SkuName.DataBox,
},
TransferType = AzureNative.DataBox.TransferType.ImportToAzure,
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
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 job = new Job("job", JobArgs.builder()
.details(DataBoxJobDetailsArgs.builder()
.contactDetails(ContactDetailsArgs.builder()
.contactName("XXXX XXXX")
.emailList("xxxx@xxxx.xxx")
.phone("0000000000")
.phoneExtension("")
.build())
.dataImportDetails(DataImportDetailsArgs.builder()
.accountDetails(StorageAccountDetailsArgs.builder()
.dataAccountType("StorageAccount")
.sharePassword("<sharePassword>")
.storageAccountId("/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
.build())
.build())
.devicePassword("<devicePassword>")
.jobDetailsType("DataBox")
.shippingAddress(ShippingAddressArgs.builder()
.addressType("Commercial")
.city("XXXX XXXX")
.companyName("XXXX XXXX")
.country("XX")
.postalCode("00000")
.stateOrProvince("XX")
.streetAddress1("XXXX XXXX")
.streetAddress2("XXXX XXXX")
.build())
.build())
.jobName("TestJobName1")
.location("westus")
.resourceGroupName("YourResourceGroupName")
.sku(SkuArgs.builder()
.name("DataBox")
.build())
.transferType("ImportToAzure")
.build());
}
}
resources:
job:
type: azure-native:databox:Job
properties:
details:
contactDetails:
contactName: XXXX XXXX
emailList:
- xxxx@xxxx.xxx
phone: '0000000000'
phoneExtension: ""
dataImportDetails:
- accountDetails:
dataAccountType: StorageAccount
sharePassword: <sharePassword>
storageAccountId: /subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
devicePassword: <devicePassword>
jobDetailsType: DataBox
shippingAddress:
addressType: Commercial
city: XXXX XXXX
companyName: XXXX XXXX
country: XX
postalCode: '00000'
stateOrProvince: XX
streetAddress1: XXXX XXXX
streetAddress2: XXXX XXXX
jobName: TestJobName1
location: westus
resourceGroupName: YourResourceGroupName
sku:
name: DataBox
transferType: ImportToAzure
The devicePassword property sets the unlock code for the physical device. The sharePassword property controls access to SMB shares on the device. Without these properties, Azure generates random passwords that you retrieve through the portal.
Enable double encryption for compliance requirements
Regulated industries often require multiple layers of encryption for data at rest.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const job = new azure_native.databox.Job("job", {
details: {
contactDetails: {
contactName: "XXXX XXXX",
emailList: ["xxxx@xxxx.xxx"],
phone: "0000000000",
phoneExtension: "",
},
dataImportDetails: [{
accountDetails: {
dataAccountType: "StorageAccount",
storageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
}],
jobDetailsType: "DataBox",
preferences: {
encryptionPreferences: {
doubleEncryption: azure_native.databox.DoubleEncryption.Enabled,
},
},
shippingAddress: {
addressType: azure_native.databox.AddressType.Commercial,
city: "XXXX XXXX",
companyName: "XXXX XXXX",
country: "XX",
postalCode: "00000",
stateOrProvince: "XX",
streetAddress1: "XXXX XXXX",
streetAddress2: "XXXX XXXX",
},
},
jobName: "TestJobName1",
location: "westus",
resourceGroupName: "YourResourceGroupName",
sku: {
name: azure_native.databox.SkuName.DataBox,
},
transferType: azure_native.databox.TransferType.ImportToAzure,
});
import pulumi
import pulumi_azure_native as azure_native
job = azure_native.databox.Job("job",
details={
"contact_details": {
"contact_name": "XXXX XXXX",
"email_list": ["xxxx@xxxx.xxx"],
"phone": "0000000000",
"phone_extension": "",
},
"data_import_details": [{
"account_details": {
"data_account_type": "StorageAccount",
"storage_account_id": "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
}],
"job_details_type": "DataBox",
"preferences": {
"encryption_preferences": {
"double_encryption": azure_native.databox.DoubleEncryption.ENABLED,
},
},
"shipping_address": {
"address_type": azure_native.databox.AddressType.COMMERCIAL,
"city": "XXXX XXXX",
"company_name": "XXXX XXXX",
"country": "XX",
"postal_code": "00000",
"state_or_province": "XX",
"street_address1": "XXXX XXXX",
"street_address2": "XXXX XXXX",
},
},
job_name="TestJobName1",
location="westus",
resource_group_name="YourResourceGroupName",
sku={
"name": azure_native.databox.SkuName.DATA_BOX,
},
transfer_type=azure_native.databox.TransferType.IMPORT_TO_AZURE)
package main
import (
databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
Details: &databox.DataBoxJobDetailsArgs{
ContactDetails: &databox.ContactDetailsArgs{
ContactName: pulumi.String("XXXX XXXX"),
EmailList: pulumi.StringArray{
pulumi.String("xxxx@xxxx.xxx"),
},
Phone: pulumi.String("0000000000"),
PhoneExtension: pulumi.String(""),
},
DataImportDetails: databox.DataImportDetailsArray{
&databox.DataImportDetailsArgs{
AccountDetails: databox.StorageAccountDetails{
DataAccountType: "StorageAccount",
StorageAccountId: "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
},
},
JobDetailsType: pulumi.String("DataBox"),
Preferences: &databox.PreferencesArgs{
EncryptionPreferences: &databox.EncryptionPreferencesArgs{
DoubleEncryption: pulumi.String(databox.DoubleEncryptionEnabled),
},
},
ShippingAddress: &databox.ShippingAddressArgs{
AddressType: pulumi.String(databox.AddressTypeCommercial),
City: pulumi.String("XXXX XXXX"),
CompanyName: pulumi.String("XXXX XXXX"),
Country: pulumi.String("XX"),
PostalCode: pulumi.String("00000"),
StateOrProvince: pulumi.String("XX"),
StreetAddress1: pulumi.String("XXXX XXXX"),
StreetAddress2: pulumi.String("XXXX XXXX"),
},
},
JobName: pulumi.String("TestJobName1"),
Location: pulumi.String("westus"),
ResourceGroupName: pulumi.String("YourResourceGroupName"),
Sku: &databox.SkuArgs{
Name: pulumi.String(databox.SkuNameDataBox),
},
TransferType: pulumi.String(databox.TransferTypeImportToAzure),
})
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 job = new AzureNative.DataBox.Job("job", new()
{
Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
{
ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
{
ContactName = "XXXX XXXX",
EmailList = new[]
{
"xxxx@xxxx.xxx",
},
Phone = "0000000000",
PhoneExtension = "",
},
DataImportDetails = new[]
{
new AzureNative.DataBox.Inputs.DataImportDetailsArgs
{
AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
{
DataAccountType = "StorageAccount",
StorageAccountId = "/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
},
},
JobDetailsType = "DataBox",
Preferences = new AzureNative.DataBox.Inputs.PreferencesArgs
{
EncryptionPreferences = new AzureNative.DataBox.Inputs.EncryptionPreferencesArgs
{
DoubleEncryption = AzureNative.DataBox.DoubleEncryption.Enabled,
},
},
ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
{
AddressType = AzureNative.DataBox.AddressType.Commercial,
City = "XXXX XXXX",
CompanyName = "XXXX XXXX",
Country = "XX",
PostalCode = "00000",
StateOrProvince = "XX",
StreetAddress1 = "XXXX XXXX",
StreetAddress2 = "XXXX XXXX",
},
},
JobName = "TestJobName1",
Location = "westus",
ResourceGroupName = "YourResourceGroupName",
Sku = new AzureNative.DataBox.Inputs.SkuArgs
{
Name = AzureNative.DataBox.SkuName.DataBox,
},
TransferType = AzureNative.DataBox.TransferType.ImportToAzure,
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
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 job = new Job("job", JobArgs.builder()
.details(DataBoxJobDetailsArgs.builder()
.contactDetails(ContactDetailsArgs.builder()
.contactName("XXXX XXXX")
.emailList("xxxx@xxxx.xxx")
.phone("0000000000")
.phoneExtension("")
.build())
.dataImportDetails(DataImportDetailsArgs.builder()
.accountDetails(StorageAccountDetailsArgs.builder()
.dataAccountType("StorageAccount")
.storageAccountId("/subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
.build())
.build())
.jobDetailsType("DataBox")
.preferences(PreferencesArgs.builder()
.encryptionPreferences(EncryptionPreferencesArgs.builder()
.doubleEncryption("Enabled")
.build())
.build())
.shippingAddress(ShippingAddressArgs.builder()
.addressType("Commercial")
.city("XXXX XXXX")
.companyName("XXXX XXXX")
.country("XX")
.postalCode("00000")
.stateOrProvince("XX")
.streetAddress1("XXXX XXXX")
.streetAddress2("XXXX XXXX")
.build())
.build())
.jobName("TestJobName1")
.location("westus")
.resourceGroupName("YourResourceGroupName")
.sku(SkuArgs.builder()
.name("DataBox")
.build())
.transferType("ImportToAzure")
.build());
}
}
resources:
job:
type: azure-native:databox:Job
properties:
details:
contactDetails:
contactName: XXXX XXXX
emailList:
- xxxx@xxxx.xxx
phone: '0000000000'
phoneExtension: ""
dataImportDetails:
- accountDetails:
dataAccountType: StorageAccount
storageAccountId: /subscriptions/YourSubscriptionId/resourcegroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
jobDetailsType: DataBox
preferences:
encryptionPreferences:
doubleEncryption: Enabled
shippingAddress:
addressType: Commercial
city: XXXX XXXX
companyName: XXXX XXXX
country: XX
postalCode: '00000'
stateOrProvince: XX
streetAddress1: XXXX XXXX
streetAddress2: XXXX XXXX
jobName: TestJobName1
location: westus
resourceGroupName: YourResourceGroupName
sku:
name: DataBox
transferType: ImportToAzure
The preferences property configures optional job behaviors. The encryptionPreferences block enables doubleEncryption, which combines hardware-based encryption on the device with software-based encryption in Azure Storage. This satisfies compliance requirements for layered data protection.
Export data from Azure Storage to on-premises
Organizations that need to move data out of Azure for archival or migration use DataBox to export blobs and files.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const job = new azure_native.databox.Job("job", {
details: {
contactDetails: {
contactName: "XXXX XXXX",
emailList: ["xxxx@xxxx.xxx"],
phone: "0000000000",
phoneExtension: "",
},
dataExportDetails: [{
accountDetails: {
dataAccountType: "StorageAccount",
storageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
transferConfiguration: {
transferAllDetails: {
include: {
dataAccountType: azure_native.databox.DataAccountType.StorageAccount,
transferAllBlobs: true,
transferAllFiles: true,
},
},
transferConfigurationType: azure_native.databox.TransferConfigurationType.TransferAll,
},
}],
jobDetailsType: "DataBox",
shippingAddress: {
addressType: azure_native.databox.AddressType.Commercial,
city: "XXXX XXXX",
companyName: "XXXX XXXX",
country: "XX",
postalCode: "00000",
stateOrProvince: "XX",
streetAddress1: "XXXX XXXX",
streetAddress2: "XXXX XXXX",
},
},
jobName: "TestJobName1",
location: "westus",
resourceGroupName: "YourResourceGroupName",
sku: {
name: azure_native.databox.SkuName.DataBox,
},
transferType: azure_native.databox.TransferType.ExportFromAzure,
});
import pulumi
import pulumi_azure_native as azure_native
job = azure_native.databox.Job("job",
details={
"contact_details": {
"contact_name": "XXXX XXXX",
"email_list": ["xxxx@xxxx.xxx"],
"phone": "0000000000",
"phone_extension": "",
},
"data_export_details": [{
"account_details": {
"data_account_type": "StorageAccount",
"storage_account_id": "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
"transfer_configuration": {
"transfer_all_details": {
"include": {
"data_account_type": azure_native.databox.DataAccountType.STORAGE_ACCOUNT,
"transfer_all_blobs": True,
"transfer_all_files": True,
},
},
"transfer_configuration_type": azure_native.databox.TransferConfigurationType.TRANSFER_ALL,
},
}],
"job_details_type": "DataBox",
"shipping_address": {
"address_type": azure_native.databox.AddressType.COMMERCIAL,
"city": "XXXX XXXX",
"company_name": "XXXX XXXX",
"country": "XX",
"postal_code": "00000",
"state_or_province": "XX",
"street_address1": "XXXX XXXX",
"street_address2": "XXXX XXXX",
},
},
job_name="TestJobName1",
location="westus",
resource_group_name="YourResourceGroupName",
sku={
"name": azure_native.databox.SkuName.DATA_BOX,
},
transfer_type=azure_native.databox.TransferType.EXPORT_FROM_AZURE)
package main
import (
databox "github.com/pulumi/pulumi-azure-native-sdk/databox/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := databox.NewJob(ctx, "job", &databox.JobArgs{
Details: &databox.DataBoxJobDetailsArgs{
ContactDetails: &databox.ContactDetailsArgs{
ContactName: pulumi.String("XXXX XXXX"),
EmailList: pulumi.StringArray{
pulumi.String("xxxx@xxxx.xxx"),
},
Phone: pulumi.String("0000000000"),
PhoneExtension: pulumi.String(""),
},
DataExportDetails: databox.DataExportDetailsArray{
&databox.DataExportDetailsArgs{
AccountDetails: databox.StorageAccountDetails{
DataAccountType: "StorageAccount",
StorageAccountId: "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
TransferConfiguration: &databox.TransferConfigurationArgs{
TransferAllDetails: &databox.TransferConfigurationTransferAllDetailsArgs{
Include: &databox.TransferAllDetailsArgs{
DataAccountType: pulumi.String(databox.DataAccountTypeStorageAccount),
TransferAllBlobs: pulumi.Bool(true),
TransferAllFiles: pulumi.Bool(true),
},
},
TransferConfigurationType: pulumi.String(databox.TransferConfigurationTypeTransferAll),
},
},
},
JobDetailsType: pulumi.String("DataBox"),
ShippingAddress: &databox.ShippingAddressArgs{
AddressType: pulumi.String(databox.AddressTypeCommercial),
City: pulumi.String("XXXX XXXX"),
CompanyName: pulumi.String("XXXX XXXX"),
Country: pulumi.String("XX"),
PostalCode: pulumi.String("00000"),
StateOrProvince: pulumi.String("XX"),
StreetAddress1: pulumi.String("XXXX XXXX"),
StreetAddress2: pulumi.String("XXXX XXXX"),
},
},
JobName: pulumi.String("TestJobName1"),
Location: pulumi.String("westus"),
ResourceGroupName: pulumi.String("YourResourceGroupName"),
Sku: &databox.SkuArgs{
Name: pulumi.String(databox.SkuNameDataBox),
},
TransferType: pulumi.String(databox.TransferTypeExportFromAzure),
})
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 job = new AzureNative.DataBox.Job("job", new()
{
Details = new AzureNative.DataBox.Inputs.DataBoxJobDetailsArgs
{
ContactDetails = new AzureNative.DataBox.Inputs.ContactDetailsArgs
{
ContactName = "XXXX XXXX",
EmailList = new[]
{
"xxxx@xxxx.xxx",
},
Phone = "0000000000",
PhoneExtension = "",
},
DataExportDetails = new[]
{
new AzureNative.DataBox.Inputs.DataExportDetailsArgs
{
AccountDetails = new AzureNative.DataBox.Inputs.StorageAccountDetailsArgs
{
DataAccountType = "StorageAccount",
StorageAccountId = "/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName",
},
TransferConfiguration = new AzureNative.DataBox.Inputs.TransferConfigurationArgs
{
TransferAllDetails = new AzureNative.DataBox.Inputs.TransferConfigurationTransferAllDetailsArgs
{
Include = new AzureNative.DataBox.Inputs.TransferAllDetailsArgs
{
DataAccountType = AzureNative.DataBox.DataAccountType.StorageAccount,
TransferAllBlobs = true,
TransferAllFiles = true,
},
},
TransferConfigurationType = AzureNative.DataBox.TransferConfigurationType.TransferAll,
},
},
},
JobDetailsType = "DataBox",
ShippingAddress = new AzureNative.DataBox.Inputs.ShippingAddressArgs
{
AddressType = AzureNative.DataBox.AddressType.Commercial,
City = "XXXX XXXX",
CompanyName = "XXXX XXXX",
Country = "XX",
PostalCode = "00000",
StateOrProvince = "XX",
StreetAddress1 = "XXXX XXXX",
StreetAddress2 = "XXXX XXXX",
},
},
JobName = "TestJobName1",
Location = "westus",
ResourceGroupName = "YourResourceGroupName",
Sku = new AzureNative.DataBox.Inputs.SkuArgs
{
Name = AzureNative.DataBox.SkuName.DataBox,
},
TransferType = AzureNative.DataBox.TransferType.ExportFromAzure,
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.databox.Job;
import com.pulumi.azurenative.databox.JobArgs;
import com.pulumi.azurenative.databox.inputs.SkuArgs;
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 job = new Job("job", JobArgs.builder()
.details(DataBoxJobDetailsArgs.builder()
.contactDetails(ContactDetailsArgs.builder()
.contactName("XXXX XXXX")
.emailList("xxxx@xxxx.xxx")
.phone("0000000000")
.phoneExtension("")
.build())
.dataExportDetails(DataExportDetailsArgs.builder()
.accountDetails(StorageAccountDetailsArgs.builder()
.dataAccountType("StorageAccount")
.storageAccountId("/subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName")
.build())
.transferConfiguration(TransferConfigurationArgs.builder()
.transferAllDetails(TransferConfigurationTransferAllDetailsArgs.builder()
.include(TransferAllDetailsArgs.builder()
.dataAccountType("StorageAccount")
.transferAllBlobs(true)
.transferAllFiles(true)
.build())
.build())
.transferConfigurationType("TransferAll")
.build())
.build())
.jobDetailsType("DataBox")
.shippingAddress(ShippingAddressArgs.builder()
.addressType("Commercial")
.city("XXXX XXXX")
.companyName("XXXX XXXX")
.country("XX")
.postalCode("00000")
.stateOrProvince("XX")
.streetAddress1("XXXX XXXX")
.streetAddress2("XXXX XXXX")
.build())
.build())
.jobName("TestJobName1")
.location("westus")
.resourceGroupName("YourResourceGroupName")
.sku(SkuArgs.builder()
.name("DataBox")
.build())
.transferType("ExportFromAzure")
.build());
}
}
resources:
job:
type: azure-native:databox:Job
properties:
details:
contactDetails:
contactName: XXXX XXXX
emailList:
- xxxx@xxxx.xxx
phone: '0000000000'
phoneExtension: ""
dataExportDetails:
- accountDetails:
dataAccountType: StorageAccount
storageAccountId: /subscriptions/YourSubscriptionId/resourceGroups/YourResourceGroupName/providers/Microsoft.Storage/storageAccounts/YourStorageAccountName
transferConfiguration:
transferAllDetails:
include:
dataAccountType: StorageAccount
transferAllBlobs: true
transferAllFiles: true
transferConfigurationType: TransferAll
jobDetailsType: DataBox
shippingAddress:
addressType: Commercial
city: XXXX XXXX
companyName: XXXX XXXX
country: XX
postalCode: '00000'
stateOrProvince: XX
streetAddress1: XXXX XXXX
streetAddress2: XXXX XXXX
jobName: TestJobName1
location: westus
resourceGroupName: YourResourceGroupName
sku:
name: DataBox
transferType: ExportFromAzure
The dataExportDetails array specifies source storage accounts and transfer scope. The transferConfiguration property controls what data moves: transferAllBlobs and transferAllFiles copy everything, while other options (not shown) allow filtering by container, blob prefix, or file path.
Beyond these examples
These snippets focus on specific job-level features: import and export workflows, password management and encryption preferences, and transfer configuration for selective data movement. They’re intentionally minimal rather than full data migration solutions.
The examples reference pre-existing infrastructure such as Azure Storage accounts (by resource ID) and resource groups and subscriptions. They focus on configuring the job rather than provisioning storage or managing the full device lifecycle.
To keep things focused, common job patterns are omitted, including:
- Job monitoring and status tracking
- Device return logistics and tracking
- Data validation and verification options
- Multiple storage account destinations
- Managed identity configuration
- Tags for cost allocation and organization
These omissions are intentional: the goal is to illustrate how each job feature is wired, not provide drop-in migration modules. See the DataBox Job resource reference for all available configuration options.
Let's configure Azure Data Box Jobs
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Job Configuration & Transfer Types
ImportToAzure) copy data from the physical device to Azure Storage. Export jobs (ExportFromAzure) copy data from Azure Storage to the physical device.transferType to ImportToAzure and use details.dataImportDetails with accountDetails.storageAccountId pointing to your target storage account.transferType to ExportFromAzure and use details.dataExportDetails with accountDetails and transferConfiguration to specify what data to export.transferConfiguration with transferConfigurationType set to TransferAll and configure transferAllDetails.include to specify transferAllBlobs and transferAllFiles.Security & Encryption
details.devicePassword for the device and accountDetails.sharePassword for the storage share.details.preferences.encryptionPreferences.doubleEncryption to Enabled.Resource Management
location, jobName, and resourceGroupName are immutable and cannot be modified after the job is created.pulumi package add azure-native databox [ApiVersion].