CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-pulumi--aws

A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources with infrastructure-as-code.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

route53.mddocs/networking/

Route 53 - DNS Service

Amazon Route 53 is a scalable DNS web service for domain registration and routing.

Common Tasks

Create a hosted zone and add a simple A record

const zone = new aws.route53.Zone("example", { name: "example.com" });
new aws.route53.Record("www", {
    zoneId: zone.zoneId,
    name: "www.example.com",
    type: "A",
    ttl: 300,
    records: ["192.0.2.1"],
});

Create an alias record pointing to a load balancer

new aws.route53.Record("lb-alias", {
    zoneId: zone.zoneId,
    name: "app.example.com",
    type: "A",
    aliases: [{
        name: lb.dnsName,
        zoneId: lb.zoneId,
        evaluateTargetHealth: true,
    }],
});

Set up a private hosted zone for VPC

const privateZone = new aws.route53.Zone("private", {
    name: "internal.example.com",
    vpcId: vpc.id,
    vpcRegion: "us-west-2",
});

Core Resources

Zone

DNS hosted zones.

class Zone extends pulumi.CustomResource {
    constructor(name: string, args?: ZoneArgs, opts?: pulumi.CustomResourceOptions);

    readonly zoneId: pulumi.Output<string>;
    readonly nameServers: pulumi.Output<string[]>;
}

interface ZoneArgs {
    name?: pulumi.Input<string>;
    comment?: pulumi.Input<string>;
    vpcId?: pulumi.Input<string>;
    vpcRegion?: pulumi.Input<string>;
    tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}

Example: Create a public hosted zone

const zone = new aws.route53.Zone("example", {
    name: "example.com",
    comment: "Main domain zone",
});

Record

DNS records.

class Record extends pulumi.CustomResource {
    constructor(name: string, args: RecordArgs, opts?: pulumi.CustomResourceOptions);
}

interface RecordArgs {
    zoneId: pulumi.Input<string>;
    name: pulumi.Input<string>;
    type: pulumi.Input<"A" | "AAAA" | "CNAME" | "MX" | "TXT" | "NS" | "SOA">;
    ttl?: pulumi.Input<number>;
    records?: pulumi.Input<pulumi.Input<string>[]>;
    aliases?: pulumi.Input<pulumi.Input<RecordAlias>[]>;
}

interface RecordAlias {
    name: pulumi.Input<string>;
    zoneId: pulumi.Input<string>;
    evaluateTargetHealth: pulumi.Input<boolean>;
}

Example: Create DNS records

// Standard A record
new aws.route53.Record("www", {
    zoneId: zone.zoneId,
    name: "www.example.com",
    type: "A",
    ttl: 300,
    records: ["192.0.2.1"],
});

// Alias record to CloudFront
new aws.route53.Record("cdn", {
    zoneId: zone.zoneId,
    name: "cdn.example.com",
    type: "A",
    aliases: [{
        name: distribution.domainName,
        zoneId: distribution.hostedZoneId,
        evaluateTargetHealth: false,
    }],
});

Usage Example

const zone = new aws.route53.Zone("example", {
    name: "example.com",
});

new aws.route53.Record("www", {
    zoneId: zone.zoneId,
    name: "www.example.com",
    type: "A",
    ttl: 300,
    records: ["192.0.2.1"],
});

export const nameServers = zone.nameServers;

Related Services

  • CloudFront - Create alias records to CloudFront distributions
  • Load Balancers - Alias records to Application Load Balancers
  • ACM - Certificate validation via DNS records
  • VPC - Private hosted zones for VPC DNS resolution
  • API Gateway - Custom domain names for APIs

Install with Tessl CLI

npx tessl i tessl/npm-pulumi--aws@7.16.0

docs

index.md

quickstart.md

README.md

tile.json