Skip to content
v2.273.0

Route53 Alias Record Targets for the CDK Route53 Library ​

This library contains Route53 Alias Record targets for:

  • API Gateway custom domains
ts
import * as apigw from 'aws-cdk-lib/aws-apigateway';

declare const zone: route53.HostedZone;
declare const restApi: apigw.LambdaRestApi;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(new targets.ApiGateway(restApi)),
  // or - route53.RecordTarget.fromAlias(new alias.ApiGatewayDomain(domainName)),
});
python
import aws_cdk.aws_apigateway as apigw

# zone: route53.HostedZone
# rest_api: apigw.LambdaRestApi


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(targets.ApiGateway(rest_api))
)
java
import software.amazon.awscdk.services.apigateway.*;

HostedZone zone;
LambdaRestApi restApi;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(new ApiGateway(restApi)))
        .build();
csharp
using Amazon.CDK.AWS.APIGateway;

HostedZone zone;
LambdaRestApi restApi;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(new ApiGateway(restApi))
});
go
import apigw "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var restApi LambdaRestApi


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(targets.NewApiGateway(restApi)),
})
  • API Gateway V2 custom domains
ts
import * as apigwv2 from 'aws-cdk-lib/aws-apigatewayv2';

declare const zone: route53.HostedZone;
declare const domainName: apigwv2.DomainName;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(new targets.ApiGatewayv2DomainProperties(domainName.regionalDomainName, domainName.regionalHostedZoneId)),
});
python
import aws_cdk.aws_apigatewayv2 as apigwv2

# zone: route53.HostedZone
# domain_name: apigwv2.DomainName


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(targets.ApiGatewayv2DomainProperties(domain_name.regional_domain_name, domain_name.regional_hosted_zone_id))
)
java
import software.amazon.awscdk.services.apigatewayv2.*;

HostedZone zone;
DomainName domainName;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(new ApiGatewayv2DomainProperties(domainName.getRegionalDomainName(), domainName.getRegionalHostedZoneId())))
        .build();
csharp
using Amazon.CDK.AWS.Apigatewayv2;

HostedZone zone;
DomainName domainName;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(new ApiGatewayv2DomainProperties(domainName.RegionalDomainName, domainName.RegionalHostedZoneId))
});
go
import apigwv2 "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var domainName DomainName


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(targets.NewApiGatewayv2DomainProperties(domainName.regionalDomainName, domainName.regionalHostedZoneId)),
})
  • AppSync custom domains
ts
import * as appsync from 'aws-cdk-lib/aws-appsync';

declare const zone: route53.HostedZone;
declare const graphqlApi: appsync.GraphqlApi;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(new targets.AppSyncTarget(graphqlApi)),
});
python
import aws_cdk.aws_appsync as appsync

# zone: route53.HostedZone
# graphql_api: appsync.GraphqlApi


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(targets.AppSyncTarget(graphql_api))
)
java
import software.amazon.awscdk.services.appsync.*;

HostedZone zone;
GraphqlApi graphqlApi;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(new AppSyncTarget(graphqlApi)))
        .build();
csharp
using Amazon.CDK.AWS.AppSync;

HostedZone zone;
GraphqlApi graphqlApi;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(new AppSyncTarget(graphqlApi))
});
go
import appsync "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var graphqlApi GraphqlApi


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(targets.NewAppSyncTarget(graphqlApi)),
})
  • CloudFront distributions
ts
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';

declare const zone: route53.HostedZone;
declare const distribution: cloudfront.CloudFrontWebDistribution;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(new targets.CloudFrontTarget(distribution)),
});
python
import aws_cdk.aws_cloudfront as cloudfront

# zone: route53.HostedZone
# distribution: cloudfront.CloudFrontWebDistribution


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(targets.CloudFrontTarget(distribution))
)
java
import software.amazon.awscdk.services.cloudfront.*;

HostedZone zone;
CloudFrontWebDistribution distribution;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(new CloudFrontTarget(distribution)))
        .build();
csharp
using Amazon.CDK.AWS.CloudFront;

HostedZone zone;
CloudFrontWebDistribution distribution;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(new CloudFrontTarget(distribution))
});
go
import cloudfront "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var distribution CloudFrontWebDistribution


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(targets.NewCloudFrontTarget(distribution)),
})
  • ELBv2 load balancers

By providing optional properties, you can specify whether to evaluate target health.

ts
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';

declare const zone: route53.HostedZone;
declare const lb: elbv2.ApplicationLoadBalancer;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(
    new targets.LoadBalancerTarget(lb, {
      evaluateTargetHealth: true,
    }),
  ),
});
python
import aws_cdk.aws_elasticloadbalancingv2 as elbv2

# zone: route53.HostedZone
# lb: elbv2.ApplicationLoadBalancer


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(
        targets.LoadBalancerTarget(lb, {
            "evaluate_target_health": True
        }))
)
java
import software.amazon.awscdk.services.elasticloadbalancingv2.*;

HostedZone zone;
ApplicationLoadBalancer lb;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(
        new LoadBalancerTarget(lb, Map.of(
                "evaluateTargetHealth", true))))
        .build();
csharp
using Amazon.CDK.AWS.ElasticLoadBalancingV2;

HostedZone zone;
ApplicationLoadBalancer lb;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(
    new LoadBalancerTarget(lb, new Dictionary<string, boolean?> {
        { "evaluateTargetHealth", true }
    }))
});
go
import elbv2 "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var lb ApplicationLoadBalancer


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(
	targets.NewLoadBalancerTarget(lb, map[string]*bool{
		"evaluateTargetHealth": jsii.Boolean(true),
	})),
})
  • Classic load balancers

By providing optional properties, you can specify whether to evaluate target health.

ts
import * as elb from 'aws-cdk-lib/aws-elasticloadbalancing';

declare const zone: route53.HostedZone;
declare const lb: elb.LoadBalancer;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(
    new targets.ClassicLoadBalancerTarget(lb, {
      evaluateTargetHealth: true,
    }),
  ),
});
python
import aws_cdk.aws_elasticloadbalancing as elb

# zone: route53.HostedZone
# lb: elb.LoadBalancer


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(
        targets.ClassicLoadBalancerTarget(lb, {
            "evaluate_target_health": True
        }))
)
java
import software.amazon.awscdk.services.elasticloadbalancing.*;

HostedZone zone;
LoadBalancer lb;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(
        new ClassicLoadBalancerTarget(lb, Map.of(
                "evaluateTargetHealth", true))))
        .build();
csharp
using Amazon.CDK.AWS.ElasticLoadBalancing;

HostedZone zone;
LoadBalancer lb;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(
    new ClassicLoadBalancerTarget(lb, new Dictionary<string, boolean?> {
        { "evaluateTargetHealth", true }
    }))
});
go
import elb "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var lb LoadBalancer


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(
	targets.NewClassicLoadBalancerTarget(lb, map[string]*bool{
		"evaluateTargetHealth": jsii.Boolean(true),
	})),
})

Important: Based on AWS documentation, all alias record in Route 53 that points to a Elastic Load Balancer will always include dualstack for the DNSName to resolve IPv4/IPv6 addresses (without dualstack IPv6 will not resolve).

For example, if the Amazon-provided DNS for the load balancer is ALB-xxxxxxx.us-west-2.elb.amazonaws.com, CDK will create alias target in Route 53 will be dualstack.ALB-xxxxxxx.us-west-2.elb.amazonaws.com.

  • GlobalAccelerator

By providing optional properties, you can specify whether to evaluate target health.

ts
import * as globalaccelerator from 'aws-cdk-lib/aws-globalaccelerator';

declare const zone: route53.HostedZone;
declare const accelerator: globalaccelerator.Accelerator;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(
    new targets.GlobalAcceleratorTarget(accelerator, {
      evaluateTargetHealth: true,
    }),
  ),
  // or
  // route53.RecordTarget.fromAlias(new targets.GlobalAcceleratorDomainTarget('xyz.awsglobalaccelerator.com',{
  //   evaluateTargetHealth: true,
  // })),
});
python
import aws_cdk.aws_globalaccelerator as globalaccelerator

# zone: route53.HostedZone
# accelerator: globalaccelerator.Accelerator


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(
        targets.GlobalAcceleratorTarget(accelerator, {
            "evaluate_target_health": True
        }))
)
java
import software.amazon.awscdk.services.globalaccelerator.*;

HostedZone zone;
Accelerator accelerator;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(
        new GlobalAcceleratorTarget(accelerator, Map.of(
                "evaluateTargetHealth", true))))
        .build();
csharp
using Amazon.CDK.AWS.GlobalAccelerator;

HostedZone zone;
Accelerator accelerator;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(
    new GlobalAcceleratorTarget(accelerator, new Dictionary<string, boolean?> {
        { "evaluateTargetHealth", true }
    }))
});
go
import globalaccelerator "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var accelerator Accelerator


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(
	targets.NewGlobalAcceleratorTarget(accelerator, map[string]*bool{
		"evaluateTargetHealth": jsii.Boolean(true),
	})),
})

Important: If you use GlobalAcceleratorDomainTarget, passing a string rather than an instance of IAccelerator, ensure that the string is a valid domain name of an existing Global Accelerator instance. See the documentation on DNS addressing with Global Accelerator for more info.

  • InterfaceVpcEndpoints

Important: Based on the CFN docs for VPCEndpoints - see here - the attributes returned for DnsEntries in CloudFormation is a combination of the hosted zone ID and the DNS name. The entries are ordered as follows: regional public DNS, zonal public DNS, private DNS, and wildcard DNS. This order is not enforced for AWS Marketplace services, and therefore this CDK construct is ONLY guaranteed to work with non-marketplace services.

ts
import * as ec2 from 'aws-cdk-lib/aws-ec2';

declare const zone: route53.HostedZone;
declare const interfaceVpcEndpoint: ec2.InterfaceVpcEndpoint;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(new targets.InterfaceVpcEndpointTarget(interfaceVpcEndpoint)),
});
python
import aws_cdk.aws_ec2 as ec2

# zone: route53.HostedZone
# interface_vpc_endpoint: ec2.InterfaceVpcEndpoint


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(targets.InterfaceVpcEndpointTarget(interface_vpc_endpoint))
)
java
import software.amazon.awscdk.services.ec2.*;

HostedZone zone;
InterfaceVpcEndpoint interfaceVpcEndpoint;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(new InterfaceVpcEndpointTarget(interfaceVpcEndpoint)))
        .build();
csharp
using Amazon.CDK.AWS.EC2;

HostedZone zone;
InterfaceVpcEndpoint interfaceVpcEndpoint;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(new InterfaceVpcEndpointTarget(interfaceVpcEndpoint))
});
go
import ec2 "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var interfaceVpcEndpoint InterfaceVpcEndpoint


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(targets.NewInterfaceVpcEndpointTarget(interfaceVpcEndpoint)),
})
  • S3 Bucket Website:

Important: The Bucket name must strictly match the full DNS name. See the Developer Guide for more info.

By providing optional properties, you can specify whether to evaluate target health.

ts
import * as s3 from 'aws-cdk-lib/aws-s3';

const recordName = 'www';
const domainName = 'example.com';

const bucketWebsite = new s3.Bucket(this, 'BucketWebsite', {
  bucketName: [recordName, domainName].join('.'), // www.example.com
  publicReadAccess: true,
  websiteIndexDocument: 'index.html',
});

const zone = route53.HostedZone.fromLookup(this, 'Zone', { domainName }); // example.com

new route53.ARecord(this, 'AliasRecord', {
  zone,
  recordName, // www
  target: route53.RecordTarget.fromAlias(
    new targets.BucketWebsiteTarget(bucketWebsite, {
      evaluateTargetHealth: true,
    }),
  ),
});
python
import aws_cdk.aws_s3 as s3


record_name = "www"
domain_name = "example.com"

bucket_website = s3.Bucket(self, "BucketWebsite",
    bucket_name=[record_name, domain_name].join("."),  # www.example.com
    public_read_access=True,
    website_index_document="index.html"
)

zone = route53.HostedZone.from_lookup(self, "Zone", domain_name=domain_name) # example.com

route53.ARecord(self, "AliasRecord",
    zone=zone,
    record_name=record_name,  # www
    target=route53.RecordTarget.from_alias(
        targets.BucketWebsiteTarget(bucket_website, {
            "evaluate_target_health": True
        }))
)
java
import software.amazon.awscdk.services.s3.*;


String recordName = "www";
String domainName = "example.com";

Bucket bucketWebsite = Bucket.Builder.create(this, "BucketWebsite")
        .bucketName(List.of(recordName, domainName).join(".")) // www.example.com
        .publicReadAccess(true)
        .websiteIndexDocument("index.html")
        .build();

IHostedZone zone = HostedZone.fromLookup(this, "Zone", HostedZoneProviderProps.builder().domainName(domainName).build()); // example.com

 // example.com
ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .recordName(recordName) // www
        .target(RecordTarget.fromAlias(
        new BucketWebsiteTarget(bucketWebsite, Map.of(
                "evaluateTargetHealth", true))))
        .build();
csharp
using Amazon.CDK.AWS.S3;


var recordName = "www";
var domainName = "example.com";

var bucketWebsite = new Bucket(this, "BucketWebsite", new BucketProps {
    BucketName = new [] { recordName, domainName }.Join("."),  // www.example.com
    PublicReadAccess = true,
    WebsiteIndexDocument = "index.html"
});

var zone = HostedZone.FromLookup(this, "Zone", new HostedZoneProviderProps { DomainName = domainName }); // example.com

 // example.com
new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    RecordName = recordName,  // www
    Target = RecordTarget.FromAlias(
    new BucketWebsiteTarget(bucketWebsite, new Dictionary<string, boolean?> {
        { "evaluateTargetHealth", true }
    }))
});
go
import s3 "github.com/aws/aws-cdk-go/awscdk"


recordName := "www"
domainName := "example.com"

bucketWebsite := s3.NewBucket(this, jsii.String("BucketWebsite"), &BucketProps{
	BucketName: []*string{
		recordName,
		domainName,
	}.join(jsii.String(".")),
	 // www.example.com
	PublicReadAccess: jsii.Boolean(true),
	WebsiteIndexDocument: jsii.String("index.html"),
})

zone := route53.HostedZone_FromLookup(this, jsii.String("Zone"), &HostedZoneProviderProps{
	DomainName: jsii.String(DomainName),
}) // example.com

 // example.com
route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	RecordName: jsii.String(RecordName),
	 // www
	Target: route53.RecordTarget_FromAlias(
	targets.NewBucketWebsiteTarget(bucketWebsite, map[string]*bool{
		"evaluateTargetHealth": jsii.Boolean(true),
	})),
})
  • User pool domain
ts
import * as cognito from 'aws-cdk-lib/aws-cognito';

declare const zone: route53.HostedZone;
declare const domain: cognito.UserPoolDomain;
new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(new targets.UserPoolDomainTarget(domain)),
});
python
import aws_cdk.aws_cognito as cognito

# zone: route53.HostedZone
# domain: cognito.UserPoolDomain

route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(targets.UserPoolDomainTarget(domain))
)
java
import software.amazon.awscdk.services.cognito.*;

HostedZone zone;
UserPoolDomain domain;

ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(new UserPoolDomainTarget(domain)))
        .build();
csharp
using Amazon.CDK.AWS.Cognito;

HostedZone zone;
UserPoolDomain domain;

new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(new UserPoolDomainTarget(domain))
});
go
import cognito "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var domain UserPoolDomain

route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(targets.NewUserPoolDomainTarget(domain)),
})
  • Route 53 record
ts
declare const zone: route53.HostedZone;
declare const record: route53.ARecord;
new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(new targets.Route53RecordTarget(record)),
});
python
# zone: route53.HostedZone
# record: route53.ARecord

route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(targets.Route53RecordTarget(record))
)
java
HostedZone zone;
ARecord record;

ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(new Route53RecordTarget(record)))
        .build();
csharp
HostedZone zone;
ARecord record;

new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(new Route53RecordTarget(record))
});
go
var zone HostedZone
var record ARecord

route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(targets.NewRoute53RecordTarget(record)),
})
  • Elastic Beanstalk environment:

Important: Only supports Elastic Beanstalk environments created after 2016 that have a regional endpoint.

By providing optional properties, you can specify whether to evaluate target health.

ts
declare const zone: route53.HostedZone;
declare const ebsEnvironmentUrl: string;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(
    new targets.ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, {
      evaluateTargetHealth: true,
    }),
  ),
});
python
# zone: route53.HostedZone
# ebs_environment_url: str


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(
        targets.ElasticBeanstalkEnvironmentEndpointTarget(ebs_environment_url, {
            "evaluate_target_health": True
        }))
)
java
HostedZone zone;
String ebsEnvironmentUrl;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(
        new ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, Map.of(
                "evaluateTargetHealth", true))))
        .build();
csharp
HostedZone zone;
string ebsEnvironmentUrl;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(
    new ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, new Dictionary<string, boolean?> {
        { "evaluateTargetHealth", true }
    }))
});
go
var zone HostedZone
var ebsEnvironmentUrl string


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(
	targets.NewElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, map[string]*bool{
		"evaluateTargetHealth": jsii.Boolean(true),
	})),
})

If Elastic Beanstalk environment URL is not available at synth time, you can specify Hosted Zone ID of the target

ts
import { RegionInfo } from 'aws-cdk-lib/region-info';

declare const zone: route53.HostedZone;
declare const ebsEnvironmentUrl: string;

new route53.ARecord(this, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(
    new targets.ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, {
      hostedZoneId: RegionInfo.get('us-east-1').ebsEnvEndpointHostedZoneId,
    }),
  ),
});
python
from aws_cdk.region_info import RegionInfo

# zone: route53.HostedZone
# ebs_environment_url: str


route53.ARecord(self, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(
        targets.ElasticBeanstalkEnvironmentEndpointTarget(ebs_environment_url, {
            "hosted_zone_id": RegionInfo.get("us-east-1").ebs_env_endpoint_hosted_zone_id
        }))
)
java
import software.amazon.awscdk.regioninfo.RegionInfo;

HostedZone zone;
String ebsEnvironmentUrl;


ARecord.Builder.create(this, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(
        new ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, Map.of(
                "hostedZoneId", RegionInfo.get("us-east-1").getEbsEnvEndpointHostedZoneId()))))
        .build();
csharp
using Amazon.CDK.RegionInfo;

HostedZone zone;
string ebsEnvironmentUrl;


new ARecord(this, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(
    new ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, new Dictionary<string, string?> {
        { "hostedZoneId", RegionInfo.Get("us-east-1").EbsEnvEndpointHostedZoneId }
    }))
});
go
import "github.com/aws/aws-cdk-go/awscdk"

var zone HostedZone
var ebsEnvironmentUrl string


route53.NewARecord(this, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(
	targets.NewElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl, map[string]*string{
		"hostedZoneId": awscdk.RegionInfo_get(jsii.String("us-east-1")).ebsEnvEndpointHostedZoneId,
	})),
})

Or you can specify Stack region for CDK to generate the correct Hosted Zone ID.

ts
import { App } from 'aws-cdk-lib';

declare const app: App;
declare const zone: route53.HostedZone;
declare const ebsEnvironmentUrl: string;

const stack = new Stack(app, 'my-stack', {
  env: {
    region: 'us-east-1',
  },
});

new route53.ARecord(stack, 'AliasRecord', {
  zone,
  target: route53.RecordTarget.fromAlias(
    new targets.ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl),
  ),
});
python
from aws_cdk import Environment
from aws_cdk import App

# app: App
# zone: route53.HostedZone
# ebs_environment_url: str


stack = Stack(app, "my-stack",
    env=Environment(
        region="us-east-1"
    )
)

route53.ARecord(stack, "AliasRecord",
    zone=zone,
    target=route53.RecordTarget.from_alias(
        targets.ElasticBeanstalkEnvironmentEndpointTarget(ebs_environment_url))
)
java
import software.amazon.awscdk.App;

App app;
HostedZone zone;
String ebsEnvironmentUrl;


Stack stack = Stack.Builder.create(app, "my-stack")
        .env(Environment.builder()
                .region("us-east-1")
                .build())
        .build();

ARecord.Builder.create(stack, "AliasRecord")
        .zone(zone)
        .target(RecordTarget.fromAlias(
        new ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl)))
        .build();
csharp
using Amazon.CDK;

App app;
HostedZone zone;
string ebsEnvironmentUrl;


var stack = new Stack(app, "my-stack", new StackProps {
    Env = new Environment {
        Region = "us-east-1"
    }
});

new ARecord(stack, "AliasRecord", new ARecordProps {
    Zone = zone,
    Target = RecordTarget.FromAlias(
    new ElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl))
});
go
import "github.com/aws/aws-cdk-go/awscdk"

var app App
var zone HostedZone
var ebsEnvironmentUrl string


stack := awscdk.Newstack(app, jsii.String("my-stack"), &StackProps{
	Env: &Environment{
		Region: jsii.String("us-east-1"),
	},
})

route53.NewARecord(stack, jsii.String("AliasRecord"), &ARecordProps{
	Zone: Zone,
	Target: route53.RecordTarget_FromAlias(
	targets.NewElasticBeanstalkEnvironmentEndpointTarget(ebsEnvironmentUrl)),
})

See the documentation of aws-cdk-lib/aws-route53 for more information.

Types ​

NameKindSummary
ApiGatewayClassDefines an API Gateway REST API as the alias target. Requires that the domain name will be defined through RestApiProps.domainName.
ApiGatewayDomainClassDefines an API Gateway domain name as the alias target.
ApiGatewayv2DomainPropertiesClassDefines an API Gateway V2 domain name as the alias target.
AppSyncTargetClassDefines an AppSync Graphql API as the alias target.
BucketWebsiteTargetClassUse a S3 as an alias record target.
ClassicLoadBalancerTargetClassUse a classic ELB as an alias record target.
CloudFrontTargetClassUse a CloudFront Distribution as an alias record target.
ElasticBeanstalkEnvironmentEndpointTargetClassUse an Elastic Beanstalk environment URL as an alias record target. E.g. mysampleenvironment.xyz.us-east-1.elasticbeanstalk.com or mycustomcnameprefix.us-east-1.elasticbeanstalk.com.
GlobalAcceleratorDomainTargetClassUse a Global Accelerator domain name as an alias record target.
GlobalAcceleratorTargetClassUse a Global Accelerator instance domain name as an alias record target.
IAliasRecordTargetPropsInterfaceProperties the alias record target.
InterfaceVpcEndpointTargetClassSet an InterfaceVpcEndpoint as a target for an ARecord.
LoadBalancerTargetClassUse an ELBv2 as an alias record target.
Route53RecordTargetClassUse another Route 53 record as an alias record target.
UserPoolDomainTargetClassUse a user pool domain as an alias record target.