Logo

dev-resources.site

for different kinds of informations.

Deploying Static Website to AWS: A Step-by-Step Guide with S3, Route 53, and CloudFront

Published at
8/1/2024
Categories
aws
s3
route53
cloudfront
Author
gloanda
Categories
4 categories in total
aws
open
s3
open
route53
open
cloudfront
open
Author
7 person written this
gloanda
open
Deploying Static Website to AWS: A Step-by-Step Guide with S3, Route 53, and CloudFront

Hey there! Thinking about setting up a static website? You've come to the right place. AWS makes it super easy to get one up and running. In this article, we’re going to walk through the whole process of deploying a static website using AWS S3, Route 53, and CloudFront.

First off, why AWS? Well, AWS got some pretty powerful tools that can make your website fast, reliable, and scalable. With S3, you can store all your website files securely. Route 53 will help you manage your domain name, making sure visitors can find your site. And CloudFront? It’s a content delivery network that will speed up your site by serving it from locations closest to your visitors.

By the end of this article, you’ll have your very own website live on AWS. We’ll cover everything from setting up your S3 bucket and configuring your domain with Route 53, to configuring CDN with CloudFront.

Ready to get started? Let’s dive in!

Prerequisites

Before we jump into the fun stuff, let’s make sure we’ve got everything we need to get started. Here’s a quick checklist:

1. AWS Account
First things first, you need an AWS account. If you don’t have one yet, head over to the AWS website and sign up. Don’t worry, they have a free tier that’ll cover most of what we need for this project.

2. Basic AWS Knowledge
You don’t need to be an AWS expert, but a little familiarity with the basics will go a long way. Knowing your way around the AWS Management Console and having a basic understanding of S3, Route 53, and CloudFront will be super helpful.

3. Website Files
Have your website files ready to go. These are the HTML, CSS, JavaScript, and any other files that make up your static site. If you’re just trying things out, you can use a simple “Hello World” HTML file.

4. Domain Name
If you want a custom domain for your website, you’ll need to register one. You can do this through AWS Route 53 or any other domain registrar like Namecheap or GoDaddy

That’s it! Once you’ve got all these in place, you’re ready to start deploying your static website on AWS. Let’s get to it!

Setting Up S3 for Static Website Hosting

First, we need to create a bucket to store our website files. Login to your AWS Management Console dashboard and navigate to the S3 service. Click the "Create bucket" button, enter a unique name for the bucket (for example, your domain name), and specify your preferred region. Keep the default settings and click “Create bucket” at the bottom.

Image description

After that, upload the main HTML file of your website (index.html) to the bucket. Click the name of your bucket, click the upload button, click the add files button then choose your index.html file, and lastly click upload.

Image description

Note: AWS S3 itself has an option to enable static website hosting directly from the bucket. In this article, we won't enable that option. Why? because it's not secure. The AWS S3 website endpoints do not support HTTPS and by enabling static website hosting, everyone can access our bucket directly. We will be using the more secure option which is using CloudFront to serve requests to our S3 bucket.

Configuring Route 53 for Domain Management

Next, we need to manage our domain with Route 53. Navigate to the Route 53 service and click the “Create hosted zone” button. Enter your domain name in the “Domain name” field and click the “Create hosted zone” button.

Image description

Click the name of the newly created hosted zone. On the details page, you'll notice some records that have already been created for your hosted zone which are NS and SOA records. Later, we will add A record pointing to our website and CNAME record for DNS validation. (For a detailed explanation about DNS record types, you can check here)

Image description

Note: If your domain is registered with a provider other than Route 53 (like Namecheap or GoDaddy), you’ll need to update your domain to use nameservers provided by Route 53. Change the nameservers on your domain management settings with the values of the NS record of Route 53 hosted zone.

Creating an SSL certificate from AWS Certificate Manager

Next, to secure our website with SSL encryption, we need to request SSL certificate. From AWS Management Console, navigate to the Certificate Manager service, click the “Request a certificate” button, choose “Request a public certificate” and click “Next”. In the next page, enter your domain name (e.g., www.gloanda.com) and any additional names (e.g., gloanda.com) so that our site is reachable by either name. Click the "Request" button.

Image description

On the certificate detail page, you’ll see a list of CNAME records that need to be added to your DNS configuration. ACM can automatically create these records for you. Click “Create records in Route 53” and choose your hosted zone, ACM will handle the rest.

Image description

After adding the CNAME records, it may take a few minutes for AWS to validate your domain. Once validated, you’ll see the status change to “Issued” in the ACM console.

Image description

Setting Up CloudFront Distribution

Next, we need to set up CloudFront to make our website faster and more secure. From the AWS Management Console, navigate to the CloudFront service. Click the “Create Distribution” button. Set the origin domain to your S3 bucket. Choose "Origin access control settings (recommended)" as origin access, and select our bucket OAC as origin access control. This will make it so that our bucket can restrict access to only CloudFront. (There will be an alert telling you to update the S3 bucket policy, we will do this later)

Image description

Scroll down until you find the "Alternate domain name (CNAME)" field, and add your domain name. In the "Custom SSL certificate" field, select the ACM certificate that we have just created. Lastly, specify index.html as the default root object. Click the "Create distribution" button.

Image description

Next, we will update our S3 bucket policy so that our CloudFront distribution can access it. Copy the code for the bucket policy below (don't forget to change the source ARN with your CloudFront ARN)



{
        "Version": "2008-10-17",
        "Id": "PolicyForCloudFrontPrivateContent",
        "Statement": [
            {
                "Sid": "AllowCloudFrontServicePrincipal",
                "Effect": "Allow",
                "Principal": {
                    "Service": "cloudfront.amazonaws.com"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::gloanda.com/*",
                "Condition": {
                    "StringEquals": {
                      "AWS:SourceArn": "YOUR_CLOUDFRONT_ARN"
                    }
                }
            }
        ]
}


Enter fullscreen mode Exit fullscreen mode

Navigate to the S3 service page, and click your bucket name. In the bucket details page, change to the "Permissions" tab, click edit on bucket policy, paste the policy you have just copied, and click save changes.

Image description

Just a little bit more until we have our website deployed! Back on the CloudFront distribution details page, try opening the distribution domain name in your browser. You should see your website now.

Image description

Lastly, to make our website accessible through our domain name, we need to add an alias record in the Route 53 hosted zone. Click "Create record" on the details page. Enable alias, choose our CloudFront distribution as endpoint, and click "Create records".

Image description

Wait until the change status is changed to "INSYNC" which means our website is accessible through our domain. Now, you should see your website when opening your domain in browser. Awesome!

Conclusion

Congratulations! You've successfully deployed a static website on AWS using S3, Route 53, and CloudFront. By setting up an S3 bucket for hosting, configuring Route 53 for domain management, and leveraging CloudFront for fast and secure content delivery, your website is now scalable, secure, and performant. This setup not only ensures quick load times and robust security with SSL/TLS encryption but also takes advantage of AWS's cost-effective and reliable infrastructure.

Thanks for following along! I hope this guide helped you get your static website up and running on AWS. If you have any questions or run into any issues, feel free to reach out or leave a comment below. Happy hosting!

route53 Article's
30 articles in total
Favicon
Dominio personalizado en Amazon API Gateway. Dominio desde GoDaddy.
Favicon
How to Simplify DNS Management in a Multi-Account Environment with Route 53 Resolver
Favicon
How to Add an Elastic (Static) IP to Your EC2 Instance And Update Your DNS Records on Route53
Favicon
Amazon Route 53: AWS's Powerful DNS Service 🌐🚀
Favicon
AWS Private Zones To The Max
Favicon
Migrate a hosted zone to a different AWS account in few seconds!!
Favicon
Before You Dive into Route 53: Learn These DNS Terms
Favicon
How to Add DNS Records for Your Domain in Route53
Favicon
How to Set Up a Public Hosted Zone on Amazon Route 53 When Your Domain Is Registered with Another Registrar
Favicon
Convert http to https in AWS
Favicon
Amazon Route 53 Resolver endpoints now support DNS-over-HTTPS (DoH) with Server Name Indication (SNI) validation
Favicon
Automated DNS Record Management for Kubernetes Resources using external-dns and AWS Route53
Favicon
Automating AWS DNS Firewall Domain List Updates Using S3, Lambda, and CLI
Favicon
Issue 65 of AWS Cloud Security Weekly
Favicon
Unlocking the Power of AWS Route 53: Your Complete Guide to DNS Management
Favicon
How to Use AWS Route 53 for Free
Favicon
Setup AWS EC2 and Configure Route 53: Domain Redirection Made Easy!
Favicon
Deploying Static Website to AWS: A Step-by-Step Guide with S3, Route 53, and CloudFront
Favicon
Cross-Account VPC Associations with Route53 Private Hosted Zone and Addressing Terraform State Update Issue
Favicon
AWS Route53: A Beginner’s Guide
Favicon
Configuring a Custom Domain for API Gateway with AWS Cloud Development Kit (CDK): SSL Certificate Use and Route 53 Integration
Favicon
How to Host a Static Website on AWS Using S3, Route 53, CloudFront, and Certificate Manager
Favicon
Managing your GoDaddy domain with Route53
Favicon
Using a custom domain name in a Private REST API Gateway
Favicon
How to migrate DNS records from CloudFlare to AWS Route53 with Terraform&Terragrunt
Favicon
Multi-Account/Environment DNS Zones
Favicon
Creating a custom domain name for AWS Elastic Beanstalk application
Favicon
Failover Mechanism in Amazon Route 53 Private Hosted Zones
Favicon
Free dynDNS for your NAS: auto-update DNS with your latest IP
Favicon
Advanced Techniques in AWS API Gateway and Route 53

Featured ones: