The azure-native:dns:RecordSet resource, part of the Pulumi Azure Native provider, defines DNS record sets that map domain names to IP addresses, mail servers, or other Azure resources within a DNS zone. This guide focuses on two capabilities: standard DNS record types (A, AAAA, CNAME, MX, TXT) and Traffic Manager integration via alias records.
Record sets belong to DNS zones that must exist before creating records. Some configurations reference Traffic Manager profiles for intelligent routing. The examples are intentionally small. Combine them with your own DNS zones and routing infrastructure.
Create an A record for IPv4 address resolution
Most DNS configurations start with A records that map hostnames to IPv4 addresses, enabling clients to resolve domain names to server IPs.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const recordSet = new azure_native.dns.RecordSet("recordSet", {
aRecords: [{
ipv4Address: "127.0.0.1",
}],
metadata: {
key1: "value1",
},
recordType: "A",
relativeRecordSetName: "record1",
resourceGroupName: "rg1",
ttl: 3600,
zoneName: "zone1",
});
import pulumi
import pulumi_azure_native as azure_native
record_set = azure_native.dns.RecordSet("recordSet",
a_records=[{
"ipv4_address": "127.0.0.1",
}],
metadata={
"key1": "value1",
},
record_type="A",
relative_record_set_name="record1",
resource_group_name="rg1",
ttl=3600,
zone_name="zone1")
package main
import (
dns "github.com/pulumi/pulumi-azure-native-sdk/dns/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := dns.NewRecordSet(ctx, "recordSet", &dns.RecordSetArgs{
ARecords: dns.ARecordArray{
&dns.ARecordArgs{
Ipv4Address: pulumi.String("127.0.0.1"),
},
},
Metadata: pulumi.StringMap{
"key1": pulumi.String("value1"),
},
RecordType: pulumi.String("A"),
RelativeRecordSetName: pulumi.String("record1"),
ResourceGroupName: pulumi.String("rg1"),
Ttl: pulumi.Float64(3600),
ZoneName: pulumi.String("zone1"),
})
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 recordSet = new AzureNative.Dns.RecordSet("recordSet", new()
{
ARecords = new[]
{
new AzureNative.Dns.Inputs.ARecordArgs
{
Ipv4Address = "127.0.0.1",
},
},
Metadata =
{
{ "key1", "value1" },
},
RecordType = "A",
RelativeRecordSetName = "record1",
ResourceGroupName = "rg1",
Ttl = 3600,
ZoneName = "zone1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.dns.RecordSet;
import com.pulumi.azurenative.dns.RecordSetArgs;
import com.pulumi.azurenative.dns.inputs.ARecordArgs;
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 recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.aRecords(ARecordArgs.builder()
.ipv4Address("127.0.0.1")
.build())
.metadata(Map.of("key1", "value1"))
.recordType("A")
.relativeRecordSetName("record1")
.resourceGroupName("rg1")
.ttl(3600.0)
.zoneName("zone1")
.build());
}
}
resources:
recordSet:
type: azure-native:dns:RecordSet
properties:
aRecords:
- ipv4Address: 127.0.0.1
metadata:
key1: value1
recordType: A
relativeRecordSetName: record1
resourceGroupName: rg1
ttl: 3600
zoneName: zone1
When a client queries the hostname, DNS returns the IPv4 address specified in ipv4Address. The recordType property identifies this as an A record, while relativeRecordSetName sets the hostname within the zone. The ttl property controls how long resolvers cache the result (3600 seconds here). The metadata property adds key-value tags for organization.
Create an AAAA record for IPv6 address resolution
IPv6-enabled services require AAAA records to map hostnames to 128-bit IPv6 addresses.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const recordSet = new azure_native.dns.RecordSet("recordSet", {
aaaaRecords: [{
ipv6Address: "::1",
}],
metadata: {
key1: "value1",
},
recordType: "AAAA",
relativeRecordSetName: "record1",
resourceGroupName: "rg1",
ttl: 3600,
zoneName: "zone1",
});
import pulumi
import pulumi_azure_native as azure_native
record_set = azure_native.dns.RecordSet("recordSet",
aaaa_records=[{
"ipv6_address": "::1",
}],
metadata={
"key1": "value1",
},
record_type="AAAA",
relative_record_set_name="record1",
resource_group_name="rg1",
ttl=3600,
zone_name="zone1")
package main
import (
dns "github.com/pulumi/pulumi-azure-native-sdk/dns/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := dns.NewRecordSet(ctx, "recordSet", &dns.RecordSetArgs{
AaaaRecords: dns.AaaaRecordArray{
&dns.AaaaRecordArgs{
Ipv6Address: pulumi.String("::1"),
},
},
Metadata: pulumi.StringMap{
"key1": pulumi.String("value1"),
},
RecordType: pulumi.String("AAAA"),
RelativeRecordSetName: pulumi.String("record1"),
ResourceGroupName: pulumi.String("rg1"),
Ttl: pulumi.Float64(3600),
ZoneName: pulumi.String("zone1"),
})
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 recordSet = new AzureNative.Dns.RecordSet("recordSet", new()
{
AaaaRecords = new[]
{
new AzureNative.Dns.Inputs.AaaaRecordArgs
{
Ipv6Address = "::1",
},
},
Metadata =
{
{ "key1", "value1" },
},
RecordType = "AAAA",
RelativeRecordSetName = "record1",
ResourceGroupName = "rg1",
Ttl = 3600,
ZoneName = "zone1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.dns.RecordSet;
import com.pulumi.azurenative.dns.RecordSetArgs;
import com.pulumi.azurenative.dns.inputs.AaaaRecordArgs;
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 recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.aaaaRecords(AaaaRecordArgs.builder()
.ipv6Address("::1")
.build())
.metadata(Map.of("key1", "value1"))
.recordType("AAAA")
.relativeRecordSetName("record1")
.resourceGroupName("rg1")
.ttl(3600.0)
.zoneName("zone1")
.build());
}
}
resources:
recordSet:
type: azure-native:dns:RecordSet
properties:
aaaaRecords:
- ipv6Address: ::1
metadata:
key1: value1
recordType: AAAA
relativeRecordSetName: record1
resourceGroupName: rg1
ttl: 3600
zoneName: zone1
The aaaaRecords array holds IPv6 addresses in standard notation. The recordType changes to “AAAA” to indicate IPv6 resolution. Otherwise, the structure mirrors A records: relativeRecordSetName, ttl, and metadata work identically.
Create a CNAME record for domain aliasing
CNAME records create aliases that point one domain name to another, commonly used for subdomains or service endpoints.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const recordSet = new azure_native.dns.RecordSet("recordSet", {
cnameRecord: {
cname: "contoso.com",
},
metadata: {
key1: "value1",
},
recordType: "CNAME",
relativeRecordSetName: "record1",
resourceGroupName: "rg1",
ttl: 3600,
zoneName: "zone1",
});
import pulumi
import pulumi_azure_native as azure_native
record_set = azure_native.dns.RecordSet("recordSet",
cname_record={
"cname": "contoso.com",
},
metadata={
"key1": "value1",
},
record_type="CNAME",
relative_record_set_name="record1",
resource_group_name="rg1",
ttl=3600,
zone_name="zone1")
package main
import (
dns "github.com/pulumi/pulumi-azure-native-sdk/dns/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := dns.NewRecordSet(ctx, "recordSet", &dns.RecordSetArgs{
CnameRecord: &dns.CnameRecordArgs{
Cname: pulumi.String("contoso.com"),
},
Metadata: pulumi.StringMap{
"key1": pulumi.String("value1"),
},
RecordType: pulumi.String("CNAME"),
RelativeRecordSetName: pulumi.String("record1"),
ResourceGroupName: pulumi.String("rg1"),
Ttl: pulumi.Float64(3600),
ZoneName: pulumi.String("zone1"),
})
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 recordSet = new AzureNative.Dns.RecordSet("recordSet", new()
{
CnameRecord = new AzureNative.Dns.Inputs.CnameRecordArgs
{
Cname = "contoso.com",
},
Metadata =
{
{ "key1", "value1" },
},
RecordType = "CNAME",
RelativeRecordSetName = "record1",
ResourceGroupName = "rg1",
Ttl = 3600,
ZoneName = "zone1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.dns.RecordSet;
import com.pulumi.azurenative.dns.RecordSetArgs;
import com.pulumi.azurenative.dns.inputs.CnameRecordArgs;
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 recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.cnameRecord(CnameRecordArgs.builder()
.cname("contoso.com")
.build())
.metadata(Map.of("key1", "value1"))
.recordType("CNAME")
.relativeRecordSetName("record1")
.resourceGroupName("rg1")
.ttl(3600.0)
.zoneName("zone1")
.build());
}
}
resources:
recordSet:
type: azure-native:dns:RecordSet
properties:
cnameRecord:
cname: contoso.com
metadata:
key1: value1
recordType: CNAME
relativeRecordSetName: record1
resourceGroupName: rg1
ttl: 3600
zoneName: zone1
The cnameRecord property specifies the target domain in the cname field. When clients query the alias, DNS returns the canonical name, which they then resolve separately. CNAME records cannot coexist with other record types at the same name.
Create MX records for email routing
Email delivery requires MX records that specify mail servers and their priority order.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const recordSet = new azure_native.dns.RecordSet("recordSet", {
metadata: {
key1: "value1",
},
mxRecords: [{
exchange: "mail.contoso.com",
preference: 0,
}],
recordType: "MX",
relativeRecordSetName: "record1",
resourceGroupName: "rg1",
ttl: 3600,
zoneName: "zone1",
});
import pulumi
import pulumi_azure_native as azure_native
record_set = azure_native.dns.RecordSet("recordSet",
metadata={
"key1": "value1",
},
mx_records=[{
"exchange": "mail.contoso.com",
"preference": 0,
}],
record_type="MX",
relative_record_set_name="record1",
resource_group_name="rg1",
ttl=3600,
zone_name="zone1")
package main
import (
dns "github.com/pulumi/pulumi-azure-native-sdk/dns/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := dns.NewRecordSet(ctx, "recordSet", &dns.RecordSetArgs{
Metadata: pulumi.StringMap{
"key1": pulumi.String("value1"),
},
MxRecords: dns.MxRecordArray{
&dns.MxRecordArgs{
Exchange: pulumi.String("mail.contoso.com"),
Preference: pulumi.Int(0),
},
},
RecordType: pulumi.String("MX"),
RelativeRecordSetName: pulumi.String("record1"),
ResourceGroupName: pulumi.String("rg1"),
Ttl: pulumi.Float64(3600),
ZoneName: pulumi.String("zone1"),
})
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 recordSet = new AzureNative.Dns.RecordSet("recordSet", new()
{
Metadata =
{
{ "key1", "value1" },
},
MxRecords = new[]
{
new AzureNative.Dns.Inputs.MxRecordArgs
{
Exchange = "mail.contoso.com",
Preference = 0,
},
},
RecordType = "MX",
RelativeRecordSetName = "record1",
ResourceGroupName = "rg1",
Ttl = 3600,
ZoneName = "zone1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.dns.RecordSet;
import com.pulumi.azurenative.dns.RecordSetArgs;
import com.pulumi.azurenative.dns.inputs.MxRecordArgs;
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 recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.metadata(Map.of("key1", "value1"))
.mxRecords(MxRecordArgs.builder()
.exchange("mail.contoso.com")
.preference(0)
.build())
.recordType("MX")
.relativeRecordSetName("record1")
.resourceGroupName("rg1")
.ttl(3600.0)
.zoneName("zone1")
.build());
}
}
resources:
recordSet:
type: azure-native:dns:RecordSet
properties:
metadata:
key1: value1
mxRecords:
- exchange: mail.contoso.com
preference: 0
recordType: MX
relativeRecordSetName: record1
resourceGroupName: rg1
ttl: 3600
zoneName: zone1
The mxRecords array lists mail servers with their exchange hostnames and preference values. Lower preference numbers indicate higher priority; mail servers attempt delivery in priority order. Multiple MX records provide redundancy if the primary server is unavailable.
Create TXT records for verification and metadata
TXT records store arbitrary text data, commonly used for domain verification, SPF records, and DKIM signatures.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const recordSet = new azure_native.dns.RecordSet("recordSet", {
metadata: {
key1: "value1",
},
recordType: "TXT",
relativeRecordSetName: "record1",
resourceGroupName: "rg1",
ttl: 3600,
txtRecords: [{
value: [
"string1",
"string2",
],
}],
zoneName: "zone1",
});
import pulumi
import pulumi_azure_native as azure_native
record_set = azure_native.dns.RecordSet("recordSet",
metadata={
"key1": "value1",
},
record_type="TXT",
relative_record_set_name="record1",
resource_group_name="rg1",
ttl=3600,
txt_records=[{
"value": [
"string1",
"string2",
],
}],
zone_name="zone1")
package main
import (
dns "github.com/pulumi/pulumi-azure-native-sdk/dns/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := dns.NewRecordSet(ctx, "recordSet", &dns.RecordSetArgs{
Metadata: pulumi.StringMap{
"key1": pulumi.String("value1"),
},
RecordType: pulumi.String("TXT"),
RelativeRecordSetName: pulumi.String("record1"),
ResourceGroupName: pulumi.String("rg1"),
Ttl: pulumi.Float64(3600),
TxtRecords: dns.TxtRecordArray{
&dns.TxtRecordArgs{
Value: pulumi.StringArray{
pulumi.String("string1"),
pulumi.String("string2"),
},
},
},
ZoneName: pulumi.String("zone1"),
})
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 recordSet = new AzureNative.Dns.RecordSet("recordSet", new()
{
Metadata =
{
{ "key1", "value1" },
},
RecordType = "TXT",
RelativeRecordSetName = "record1",
ResourceGroupName = "rg1",
Ttl = 3600,
TxtRecords = new[]
{
new AzureNative.Dns.Inputs.TxtRecordArgs
{
Value = new[]
{
"string1",
"string2",
},
},
},
ZoneName = "zone1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.dns.RecordSet;
import com.pulumi.azurenative.dns.RecordSetArgs;
import com.pulumi.azurenative.dns.inputs.TxtRecordArgs;
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 recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.metadata(Map.of("key1", "value1"))
.recordType("TXT")
.relativeRecordSetName("record1")
.resourceGroupName("rg1")
.ttl(3600.0)
.txtRecords(TxtRecordArgs.builder()
.value(
"string1",
"string2")
.build())
.zoneName("zone1")
.build());
}
}
resources:
recordSet:
type: azure-native:dns:RecordSet
properties:
metadata:
key1: value1
recordType: TXT
relativeRecordSetName: record1
resourceGroupName: rg1
ttl: 3600
txtRecords:
- value:
- string1
- string2
zoneName: zone1
The txtRecords array holds text values. Each record can contain multiple strings in the value array, which DNS concatenates during resolution. Services like Google Workspace and Microsoft 365 use TXT records to verify domain ownership before enabling features.
Route traffic through Azure Traffic Manager with alias records
Applications that need geographic distribution or failover can use alias records to point DNS names directly at Traffic Manager profiles.
import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";
const recordSet = new azure_native.dns.RecordSet("recordSet", {
metadata: {
key1: "value1",
},
recordType: "A",
relativeRecordSetName: "record1",
resourceGroupName: "rg1",
targetResource: {
id: "/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2",
},
ttl: 3600,
zoneName: "zone1",
});
import pulumi
import pulumi_azure_native as azure_native
record_set = azure_native.dns.RecordSet("recordSet",
metadata={
"key1": "value1",
},
record_type="A",
relative_record_set_name="record1",
resource_group_name="rg1",
target_resource={
"id": "/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2",
},
ttl=3600,
zone_name="zone1")
package main
import (
dns "github.com/pulumi/pulumi-azure-native-sdk/dns/v3"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := dns.NewRecordSet(ctx, "recordSet", &dns.RecordSetArgs{
Metadata: pulumi.StringMap{
"key1": pulumi.String("value1"),
},
RecordType: pulumi.String("A"),
RelativeRecordSetName: pulumi.String("record1"),
ResourceGroupName: pulumi.String("rg1"),
TargetResource: &dns.SubResourceArgs{
Id: pulumi.String("/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2"),
},
Ttl: pulumi.Float64(3600),
ZoneName: pulumi.String("zone1"),
})
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 recordSet = new AzureNative.Dns.RecordSet("recordSet", new()
{
Metadata =
{
{ "key1", "value1" },
},
RecordType = "A",
RelativeRecordSetName = "record1",
ResourceGroupName = "rg1",
TargetResource = new AzureNative.Dns.Inputs.SubResourceArgs
{
Id = "/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2",
},
Ttl = 3600,
ZoneName = "zone1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.dns.RecordSet;
import com.pulumi.azurenative.dns.RecordSetArgs;
import com.pulumi.azurenative.dns.inputs.SubResourceArgs;
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 recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.metadata(Map.of("key1", "value1"))
.recordType("A")
.relativeRecordSetName("record1")
.resourceGroupName("rg1")
.targetResource(SubResourceArgs.builder()
.id("/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2")
.build())
.ttl(3600.0)
.zoneName("zone1")
.build());
}
}
resources:
recordSet:
type: azure-native:dns:RecordSet
properties:
metadata:
key1: value1
recordType: A
relativeRecordSetName: record1
resourceGroupName: rg1
targetResource:
id: /subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2
ttl: 3600
zoneName: zone1
The targetResource property references a Traffic Manager profile by its Azure resource ID. Instead of resolving to a static IP, the DNS query returns the Traffic Manager endpoint, which then routes traffic based on configured policies (geographic, performance, priority). This eliminates the need to update DNS records when backend IPs change.
Beyond these examples
These snippets focus on specific record set features: standard DNS record types (A, AAAA, CNAME, MX, TXT), Traffic Manager integration via alias records, and TTL and metadata configuration. They’re intentionally minimal rather than full DNS zone configurations.
The examples reference pre-existing infrastructure such as DNS zones (zoneName), resource groups (resourceGroupName), and Traffic Manager profiles (for alias examples). They focus on configuring the record set rather than provisioning the surrounding DNS infrastructure.
To keep things focused, common record set patterns are omitted, including:
- Advanced record types (CAA, DS, NAPTR, PTR, SOA, SRV, TLSA)
- Traffic management profiles (trafficManagementProfile property)
- Multiple records in a single record set
- Record set import and etag-based updates
These omissions are intentional: the goal is to illustrate how each record type is wired, not provide drop-in DNS modules. See the RecordSet resource reference for all available configuration options.
Let's configure Azure DNS Record Sets
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Record Types & Configuration
recordType property and populate the corresponding record array (e.g., aRecords for A records, mxRecords for MX records).ttl property to specify the time-to-live in seconds. The examples show a common value of 3600 seconds (1 hour).metadata property with key-value pairs. For example, metadata: { key1: "value1" } as shown in the examples.Immutability & Updates
recordType, relativeRecordSetName, resourceGroupName, and zoneName properties are immutable. To change any of these, you must delete and recreate the record set.recordType is immutable. You must delete the record set and create a new one with the desired record type.Aliasing & Traffic Management
targetResource references any Azure resource, while trafficManagementProfile specifically references Azure Traffic Manager profiles. Use targetResource for general aliasing and trafficManagementProfile when integrating with Traffic Manager.trafficManagementProfile property with the Traffic Manager profile’s resource ID. Don’t specify record data arrays (like aRecords) when using alias records.Import & Management
pulumi import azure-native:dns:RecordSet <name> /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/dnsZones/{zoneName}/{recordType}/{relativeRecordSetName}ttl, aRecords) are what you configure. Output properties (like fqdn, provisioningState, etag) are computed by Azure and returned after creation. You can reference output properties but cannot set them directly.