Amazon Web Service's S3 is an excellent place to deploy a static website. If Cloudflare is your DNS provider, however, there are a few tricks that you need to be aware of when setting up your static site.
We're going to talk about how to get started with your static site on S3 and your DNS in Cloudflare.
AWS #
First, of course, we need a static site deployed to S3. The AWS documentation does a good job at explaining how to setup a site, but we'll briefly run through the steps here as well.
S3 Bucket Configuration #
One of the first things that you'll see in the AWS documentation linked above is that your bucket name must match the name of the website you are hosting. That's true in most cases, but since we're going to be using Cloudflare DNS, that's not true in our case.
Oh, and we don't even need to tell AWS that we're going to be using this bucket to host our site. I'll show you why shortly.
- Head to the S3 home page and create a bucket named whatever you like.
- Give your bucket this policy, changing
example.com
to the name of the bucket you just created.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::example.com/*"]
}
]
}
NOTE: This makes items in your bucket available to the public. Do not put things in this bucket that you do not want everybody in the world seeing.
- You can upload whatever HTML, CSS and JS you want to serve on your site, but for now just upload a simple
index.html
file for testing.
Cloudfront Distribution #
Now, we're going to create a Cloudfront distribution in AWS. While not strictly necessary for a static website on AWS, it is necessary to get Cloudflare's SSL to work with our site.
- On the Cloudfront service page and click
Create Distribution
. - Click
Get Started
under the Web section on the next page. - In the
Origin Domain Name
input, select the bucket that you created above. - We're going to select Redirect HTTP to HTTPS for the
Viewer Protocol Policy
option. - There are only two other things that we need to change now. Here are those tricky bits that you may not have known about!
- In the
Alternate Domain Names (CNAMEs)
input, type the domain name that we're going to use for our site. This your domain that you will or already have setup in Cloudflare. - In
Default Root Object
, enterindex.html
, the file that we uploaded the our bucket.
- In the
- That's all we need to do to setup Cloudfront. Hang tight though, as this can sometimes take awhile to become active.
Cloudflare #
We're in the final stretch now. We only have to setup Cloudflare to point to our Cloudfront distribution. From here on out, I'm going to assume that you already have an account and have setup your domain in Cloudflare.
DNS #
- On the DNS tab of your Cloudflare dashboard, we're going to add two CNAME records.
- Add one CNAME record with the Name of your domain,
example.com
, and the Domain Name of your Cloudfront distribution,d1234gflgylt.cloudfront.net
. Make sure not to includehttps://
with your Cloudfront distribution. - Add another record with the Name of
www
and again the Domain Name of your Cloudfront distribution. We want to make sure that we send bothwww.example.com
andexample.com
to our static site.
- Add one CNAME record with the Name of your domain,
- Make sure to leave the little Cloudflare cloud checked and orange.
And that's it! Wait a few minutes (most likely seconds), and you'll see your static site served from S3, through a Cloudfront distribution and finally to Cloudflare under your custom domain.