Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Static Website] Integrate automatic domain DNS mapping within Route53 #84

Open
devsdevsdevs opened this issue Aug 6, 2021 · 2 comments
Labels
enhancement New feature or request

Comments

@devsdevsdevs
Copy link

I am currently using the static website Serverless component found at https://github.com/serverless-components/website. It automatically sets up custom domain mappings with the Cloudfront CNAME if you are using Route53. Would it be possible to enable this feature here? I want to migrate to Lift as the Serverless component framework is restrictive in that I cannot use additional plugins etc.

@mnapoli mnapoli added the enhancement New feature or request label Sep 3, 2021
@mnapoli
Copy link
Member

mnapoli commented Sep 3, 2021

Continuing the discussion from #92.

One challenge is helping setting up the ACM certificate. Route53 can then be set up using CDK/CloudFormation AFAICT.

The certificate could be created via SDK calls. Here is an idea how, as a user, this could work:

$ npm i serverless-lift


# edit serverless.yml to add website with custom domain


$ serverless deploy
...
Error: The 'landing' website uses a custom domain (mywebsite.com), but no HTTPS certificate was found for that domain in ACM (in us-east-1).
Run 'serverless landing:certificate' to set up that certificate interactively.


$ serverless landing:certificate

# if no certificate exists
No HTTPS certificate matching 'mywebsite.com' was found in ACM in us-east-1.
To create a certificate manually in the AWS console, stop this command and follow that link: https://...
We can also create that certificate interactively:
How do you want to validate the domain?
- Email validation (...)
- DNS validation (...)
OK, creating the certificate.
The certificate has been created. You now need to validate it by email/DNS.
Once validated, you can run 'serverless deploy' and the certificate will automatically be used.
# exit

# if a certificate exists but isn't validated
A matching HTTPS certificate exists in ACM in the us-east-1 region: mywebsite.com / *.mywebsite.com
However, that certificate is not validated yet.
More details in the AWS Console: https://...
# exit

# if a certificate exists and is validated
A matching HTTPS certificate exists in ACM in the us-east-1 region: mywebsite.com / *.mywebsite.com
This certificate will automatically be used by Lift.

WDYT?

Is there any way to make it simpler with less steps?

Note: I'm afraid of adding interactive steps in serverless deploy directly, I don't really want to hijack the default behavior.

@bobwallis
Copy link

For anyone coming across this... This is achievable using Lift plus only one extra plugin.

Certificate creation can be handled using https://www.serverless.com/plugins/serverless-certificate-creator

You can then access the certificate ARN in the Lift configuration like this:

constructs:
  website:
    type: server-side-website
    domain: ${env:DOMAIN}
    certificate: ${certificate(${self:custom.customCertificate.certificateName}):CertificateArn}

And then the Route53 records to link the domain to the Cloudfront distribution can just be created in the usual Serverless resources: section something like this:

resources:
  Resources:
    Route53Record0:
      Type: AWS::Route53::RecordSet
      Properties:
        HostedZoneId: ${env:HOSTED_ZONE_ID}
        Name: ${env:DOMAIN}
        Type: A
        AliasTarget:
          HostedZoneId: Z2FDTNDATAQYW2 # Cloudfront Route53 HostedZoneId. This does not change.
          DNSName: ${construct:website.cname}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants