diff --git a/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts b/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts index c9893469c4f7f..f44ebf953dcac 100644 --- a/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts +++ b/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts @@ -1,5 +1,5 @@ import * as acm from '@aws-cdk/aws-certificatemanager'; -import { Construct, IResource, Resource } from '@aws-cdk/core'; +import { Construct, IResource, Resource, Token } from '@aws-cdk/core'; import { CfnDomainName } from './apigateway.generated'; import { BasePathMapping, BasePathMappingOptions } from './base-path-mapping'; import { EndpointType, IRestApi } from './restapi'; @@ -102,6 +102,11 @@ export class DomainName extends Resource implements IDomainName { const endpointType = props.endpointType || EndpointType.REGIONAL; const edge = endpointType === EndpointType.EDGE; + if (!Token.isUnresolved(props.domainName) && /[A-Z]/.test(props.domainName)) { + throw new Error('domainName does not support uppercase letters. ' + + `got: '${props.domainName}'`); + } + const resource = new CfnDomainName(this, 'Resource', { domainName: props.domainName, certificateArn: edge ? props.certificate.certificateArn : undefined, diff --git a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts index b672565b94358..197978922c5a1 100644 --- a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts +++ b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts @@ -267,6 +267,20 @@ export = { test.done(); }, + 'domain name cannot contain uppercase letters'(test: Test) { + // GIVEN + const stack = new Stack(); + const certificate = new acm.Certificate(stack, 'cert', { domainName: 'someDomainWithUpercase.domain.com' }); + + // WHEN + test.throws(() => { + new apigw.DomainName(stack, 'someDomain', {domainName: 'someDomainWithUpercase.domain.com', certificate}); + }, /uppercase/); + + // THEN + test.done(); + }, + 'multiple domain names can be added'(test: Test) { // GIVEN const domainName = 'my.domain.com';