Record Set
Example Usage
Binding a DNS name to the ephemeral IP of a new instance:
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Instance;
import com.pulumi.gcp.compute.InstanceArgs;
import com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;
import com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;
import com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;
import com.pulumi.gcp.dns.ManagedZone;
import com.pulumi.gcp.dns.ManagedZoneArgs;
import com.pulumi.gcp.dns.RecordSet;
import com.pulumi.gcp.dns.RecordSetArgs;
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 frontendInstance = new Instance("frontendInstance", InstanceArgs.builder()
.machineType("g1-small")
.zone("us-central1-b")
.bootDisk(InstanceBootDiskArgs.builder()
.initializeParams(InstanceBootDiskInitializeParamsArgs.builder()
.image("debian-cloud/debian-11")
.build())
.build())
.networkInterfaces(InstanceNetworkInterfaceArgs.builder()
.network("default")
.accessConfigs()
.build())
.build());
var prod = new ManagedZone("prod", ManagedZoneArgs.builder()
.dnsName("prod.mydomain.com.")
.build());
var frontendRecordSet = new RecordSet("frontendRecordSet", RecordSetArgs.builder()
.name(prod.dnsName().applyValue(dnsName -> String.format("frontend.%s", dnsName)))
.type("A")
.ttl(300)
.managedZone(prod.name())
.rrdatas(frontendInstance.networkInterfaces().applyValue(networkInterfaces -> networkInterfaces[0].accessConfigs()[0].natIp()))
.build());
}
}Adding an A record
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.dns.ManagedZone;
import com.pulumi.gcp.dns.ManagedZoneArgs;
import com.pulumi.gcp.dns.RecordSet;
import com.pulumi.gcp.dns.RecordSetArgs;
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 prod = new ManagedZone("prod", ManagedZoneArgs.builder()
.dnsName("prod.mydomain.com.")
.build());
var recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.name(prod.dnsName().applyValue(dnsName -> String.format("backend.%s", dnsName)))
.managedZone(prod.name())
.type("A")
.ttl(300)
.rrdatas("8.8.8.8")
.build());
}
}Adding an MX record
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.dns.ManagedZone;
import com.pulumi.gcp.dns.ManagedZoneArgs;
import com.pulumi.gcp.dns.RecordSet;
import com.pulumi.gcp.dns.RecordSetArgs;
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 prod = new ManagedZone("prod", ManagedZoneArgs.builder()
.dnsName("prod.mydomain.com.")
.build());
var mx = new RecordSet("mx", RecordSetArgs.builder()
.name(prod.dnsName())
.managedZone(prod.name())
.type("MX")
.ttl(3600)
.rrdatas(
"1 aspmx.l.google.com.",
"5 alt1.aspmx.l.google.com.",
"5 alt2.aspmx.l.google.com.",
"10 alt3.aspmx.l.google.com.",
"10 alt4.aspmx.l.google.com.")
.build());
}
}Adding an SPF record
Quotes ("") must be added around your rrdatas for a SPF record. Otherwise rrdatas string gets split on spaces.
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.dns.ManagedZone;
import com.pulumi.gcp.dns.ManagedZoneArgs;
import com.pulumi.gcp.dns.RecordSet;
import com.pulumi.gcp.dns.RecordSetArgs;
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 prod = new ManagedZone("prod", ManagedZoneArgs.builder()
.dnsName("prod.mydomain.com.")
.build());
var spf = new RecordSet("spf", RecordSetArgs.builder()
.name(prod.dnsName().applyValue(dnsName -> String.format("frontend.%s", dnsName)))
.managedZone(prod.name())
.type("TXT")
.ttl(300)
.rrdatas("\"v=spf1 ip4:111.111.111.111 include:backoff.email-example.com -all\"")
.build());
}
}Adding a CNAME record
The list of rrdatas should only contain a single string corresponding to the Canonical Name intended.
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.dns.ManagedZone;
import com.pulumi.gcp.dns.ManagedZoneArgs;
import com.pulumi.gcp.dns.RecordSet;
import com.pulumi.gcp.dns.RecordSetArgs;
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 prod = new ManagedZone("prod", ManagedZoneArgs.builder()
.dnsName("prod.mydomain.com.")
.build());
var cname = new RecordSet("cname", RecordSetArgs.builder()
.name(prod.dnsName().applyValue(dnsName -> String.format("frontend.%s", dnsName)))
.managedZone(prod.name())
.type("CNAME")
.ttl(300)
.rrdatas("frontend.mydomain.com.")
.build());
}
}Geolocation
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.dns.RecordSet;
import com.pulumi.gcp.dns.RecordSetArgs;
import com.pulumi.gcp.dns.inputs.RecordSetRoutingPolicyArgs;
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 geo = new RecordSet("geo", RecordSetArgs.builder()
.name(String.format("backend.%s", google_dns_managed_zone.prod().dns_name()))
.managedZone(google_dns_managed_zone.prod().name())
.type("A")
.ttl(300)
.routingPolicy(RecordSetRoutingPolicyArgs.builder()
.geos(
RecordSetRoutingPolicyGeoArgs.builder()
.location("asia-east1")
.rrdatas("10.128.1.1")
.build(),
RecordSetRoutingPolicyGeoArgs.builder()
.location("us-central1")
.rrdatas("10.130.1.1")
.build())
.build())
.build());
}
}Primary-Backup
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.dns.ManagedZone;
import com.pulumi.gcp.dns.ManagedZoneArgs;
import com.pulumi.gcp.compute.RegionBackendService;
import com.pulumi.gcp.compute.RegionBackendServiceArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.ForwardingRule;
import com.pulumi.gcp.compute.ForwardingRuleArgs;
import com.pulumi.gcp.dns.RecordSet;
import com.pulumi.gcp.dns.RecordSetArgs;
import com.pulumi.gcp.dns.inputs.RecordSetRoutingPolicyArgs;
import com.pulumi.gcp.dns.inputs.RecordSetRoutingPolicyPrimaryBackupArgs;
import com.pulumi.gcp.dns.inputs.RecordSetRoutingPolicyPrimaryBackupPrimaryArgs;
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 prodManagedZone = new ManagedZone("prodManagedZone", ManagedZoneArgs.builder()
.dnsName("prod.mydomain.com.")
.build());
var prodRegionBackendService = new RegionBackendService("prodRegionBackendService", RegionBackendServiceArgs.builder()
.region("us-central1")
.build());
var prodNetwork = new Network("prodNetwork");
var prodForwardingRule = new ForwardingRule("prodForwardingRule", ForwardingRuleArgs.builder()
.region("us-central1")
.loadBalancingScheme("INTERNAL")
.backendService(prodRegionBackendService.id())
.allPorts(true)
.network(prodNetwork.name())
.allowGlobalAccess(true)
.build());
var recordSet = new RecordSet("recordSet", RecordSetArgs.builder()
.name(prodManagedZone.dnsName().applyValue(dnsName -> String.format("backend.%s", dnsName)))
.managedZone(prodManagedZone.name())
.type("A")
.ttl(300)
.routingPolicy(RecordSetRoutingPolicyArgs.builder()
.primaryBackup(RecordSetRoutingPolicyPrimaryBackupArgs.builder()
.trickleRatio(0.1)
.primary(RecordSetRoutingPolicyPrimaryBackupPrimaryArgs.builder()
.internalLoadBalancers(RecordSetRoutingPolicyPrimaryBackupPrimaryInternalLoadBalancerArgs.builder()
.loadBalancerType("regionalL4ilb")
.ipAddress(prodForwardingRule.ipAddress())
.port("80")
.ipProtocol("tcp")
.networkUrl(prodNetwork.id())
.project(prodForwardingRule.project())
.region(prodForwardingRule.region())
.build())
.build())
.backupGeos(
RecordSetRoutingPolicyPrimaryBackupBackupGeoArgs.builder()
.location("asia-east1")
.rrdatas("10.128.1.1")
.build(),
RecordSetRoutingPolicyPrimaryBackupBackupGeoArgs.builder()
.location("us-west1")
.rrdatas("10.130.1.1")
.build())
.build())
.build())
.build());
}
}Import
DNS record sets can be imported using either of these accepted formats* projects/{{project}}/managedZones/{{zone}}/rrsets/{{name}}/{{type}} * {{project}}/{{zone}}/{{name}}/{{type}} * {{zone}}/{{name}}/{{type}} In Terraform v1.5.0 and later, use an import block to import DNS record sets using one of the formats above. For exampletf import { id = "projects/{{project}}/managedZones/{{zone}}/rrsets/{{name}}/{{type}}" to = google_dns_record_set.default }
$ pulumi import gcp:dns/recordSet:RecordSet When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), DNS record sets can be imported using one of the formats above. For example$ pulumi import gcp:dns/recordSet:RecordSet default projects/{{project}}/managedZones/{{zone}}/rrsets/{{name}}/{{type}}$ pulumi import gcp:dns/recordSet:RecordSet default {{project}}/{{zone}}/{{name}}/{{type}}$ pulumi import gcp:dns/recordSet:RecordSet default {{zone}}/{{name}}/{{type}}NoteThe record name must include the trailing dot at the end.
Properties
The string data for the records in this record set whose meaning depends on the DNS type. For TXT record, if the string data contains spaces, add surrounding \" if you don't want your string to get split on spaces. To specify a single record value longer than 255 characters such as a TXT record for DKIM, add \"\" inside the Terraform configuration string (e.g. "first255characters\"\"morecharacters").