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
Immutability & Configuration
recordType, relativeRecordSetName, resourceGroupName, and zoneName properties are immutable. Changing any of these requires destroying and recreating the record set.ttl property to specify the time-to-live in seconds. Examples in the schema use 3600 seconds (1 hour).Record Types & Features
recordType property and provide the corresponding record data (e.g., aRecords for A records, cnameRecord for CNAME).targetResource creates an alias record pointing to another Azure resource (like a Traffic Manager profile). trafficManagementProfile specifically references a Traffic Manager profile for DNS-based traffic routing. Both enable advanced routing scenarios.targetResource property with the Azure resource ID. For example, to alias to a Traffic Manager profile, set targetResource.id to the profile’s resource ID.Operations & Outputs
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/dnsZones/{zoneName}/{recordType}/{relativeRecordSetName}fqdn output provides the fully qualified domain name of the record set, computed by Azure DNS. Use this to reference the complete DNS name in other resources.