If your site is static, like a one pager or a simple site that only requires HTML, CSS, and JavaScript, you can host it on Amazon Web Services S3 at a very low cost. S3 is typically used for storage purposes, but you can run a full blown static site just as easily. Let me show you step-by-step how you can do that.

AWS Account

The first thing you need is an AWS account. If you don't have one, head over to AWS and create an account.

Log on to your AWS Account and select the S3 Service under Storage & Content Delivery in the AWS Dashboard:

AWS dashboard

Create Buckets

Buckets are containers to store objects (files and folders). You need to create two buckets: one for the root domain of your site and one for the www subdomain. Give buckets the same name as your domain, like so:

  • Bucket for root domain: yourdomain.com
  • Bucket for www domain: www.yourdomain.com

Create S3 bucket

The default permissions on a new bucket are such that only the owner has access, no one else.

Redirect

You need to redirect traffic from yourdomain.com to www.domain.com. You could do it the other way around if you want to, but in this example we'll stick to redirecting from the root domain to www. Follow these steps:

  • Select the bucket yourdomain.com
  • Select the Properties button
  • Expand the Static Website Hosting section
  • Select the option titled Redirect all requests to another host name
  • Redirect all requests to: www.yourdomain.com
  • Select Save button

S3 bucket redirect

Enable Website Hosting

Now you need to enable website hosting for the www.yourdomain.com bucket. The steps are similar to the previous ones:

  • Select the bucket www.yourdomain.com
  • Select the Properties button
  • Expand the Static Website Hosting section
  • Select the option titled Enable website hosting
  • In the box titled Index document enter index.html
  • Select Save button

S3 bucket hosting

Permissions

Let's allow Read-Only access to the www.yourdomain.com bucket:

  • Select the bucket www.yourdomain.com
  • Select the Properties button
  • Expand the Permissions section
  • Select the Add bucket policy button
  • Enter the following policy (be sure to replace yourdomain.com with your actual domain):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::www.yourdomain.com/*"
        }
    ]
}

This gives anyone the permission to "get objects" from the www.yourdomain.com bucket, including any of its folders.

Upload

While you're still in the www.yourdomain.com bucket, you can upload your index.html file (and all your site files):

  • Select Upload button
  • Follow instructions on the Upload screen

At this point your site should be accessible through the default endpoint URL: http://bucket-name.s3-website-AWS-region.amazonaws.com

For example:

http://yourdomain.com.s3-website-us-west-2.amazonaws.com

or

http://www.yourdomain.com.s3-website-us-west-2.amazonaws.com

Using Your Own Domain

To use your own domain, you need to set up your DNS records. For this, we'll use the Route 53 service, so go back to the dashboard and select the Route 53 icon under Networking.

AWS dashboard

Follow these steps:

  • Select Hosted zones
  • Select Create Hosted Zone button
  • Domain Name: yourdomain.com
  • Type: Public Hosted Zone
  • Select Create button

Create an A record for yourdomain.com:

  • Select Create Record Set button
  • Name: nothing (leave it blank)
  • Type: A-IPv4 address
  • Alias: Yes
  • Alias Target: yourdomain.com (under -- S3 website endpoints --)
  • Routing Policy: Simple
  • Evaluate Target Health: No
  • Select Save Record Set button

Now create an A record for www.domain.com:

  • Select Create Record Set button
  • Name: www
  • Type: A-IPv4 address
  • Alias: Yes
  • Alias Target: www.yourdomain.com (under -- S3 website endpoints --)
  • Routing Policy: Simple
  • Evaluate Target Health: No
  • Select Save Record Set button

Update DNS Servers on Your Domain Provider

You'll notice that you have an NS record that was created by default when you created the hosted zone. This NS record has four DNS servers. These are the DNS servers you need to enter in your domain provider records to direct your domain's traffic to AWS. So, head over to your domain provider, log on to your account and update your DNS servers there.

You're done. It's just a waiting game now. Once propagation has completed throughout the world's DNS servers, traffic will be properly directed to S3 and your site will be accessible via your own domain.

For more information on hosting a static site on S3, check out the AWS Docs.

Cheers!