diff --git a/README.md b/README.md index 55bb8d9..4eb2ed2 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ stage: dev # (optional) serverless dashboard stage. defaul inputs: src: ./src # (optional) path to the source folder. default is a hello world html file. domain: serverless.com # (optional) domain name. this could also be a subdomain. + alternateDomainNames: altDomainA.serverless.com,altDomainB.serverless.com # (optional) alternate cloudfront domain names, separated by a comma. region: us-east-2 # (optional) aws region to deploy to. default is us-east-1. bucketName: my-bucket # (optional) aws bucket name. default is an auto generated name. indexDocument: index.html # (optional) index document for your website. default is index.html. diff --git a/src/serverless.js b/src/serverless.js index f9baeab..ee94289 100644 --- a/src/serverless.js +++ b/src/serverless.js @@ -150,6 +150,10 @@ class Website extends Component { outputs.domain = `https://${config.domain}` } + if (config.alternateDomainNames) { + outputs.alternateDomainNames = config.alternateDomainNames + } + return outputs } diff --git a/src/utils.js b/src/utils.js index 612f084..37ded3c 100644 --- a/src/utils.js +++ b/src/utils.js @@ -99,6 +99,11 @@ const getConfig = (inputs, state) => { config.domainHostedZoneId = config.domain ? state.domainHostedZoneId : null config.certificateArn = state.certificateArn + // for alternate cloudfront CNAME domains + config.alternateDomainNames = inputs.alternateDomainNames + ? inputs.alternateDomainNames.split(',') + : null + // if user input example.com, make sure we also setup www.example.com if (config.domain && config.domain === config.nakedDomain) { config.domain = `www.${config.domain}` @@ -598,6 +603,13 @@ const createCloudFrontDistribution = async (clients, config) => { distributionConfig.Aliases.Quantity = 2 distributionConfig.Aliases.Items.push(config.nakedDomain) } + + if (Array.isArray(config.alternateDomainNames)) { + config.alternateDomainNames.forEach((domain) => { + distributionConfig.Aliases.Quantity += 1 + distributionConfig.Aliases.Items.push(domain) + }) + } } try { @@ -667,6 +679,13 @@ const updateCloudFrontDistribution = async (clients, config) => { params.DistributionConfig.Aliases.Quantity = 2 params.DistributionConfig.Aliases.Items.push(config.nakedDomain) } + + if (Array.isArray(config.alternateDomainNames)) { + config.alternateDomainNames.forEach((domain) => { + params.DistributionConfig.Aliases.Quantity += 1 + params.DistributionConfig.Aliases.Items.push(domain) + }) + } } // 6. then finally update! const res = await clients.cf.updateDistribution(params).promise()