Nov 16th, 2019

Frontend Deployments made easy with Serverless Framework Website Component

You’re probably using Netlify or Surge.sh, probably Heroku. All really amazing options! Heck, I’m using Netlify for my personal site and this blog. But, why do these exist?

Devops is hard and AWS is pretty complicated. Step in, Serverless Framework and Serverless Components!

In this article, I’m going to help you get going with deploying your frontend application easily with Serverless Framework. At the end of the day, you won’t have to depend on a third party service to deploy your apps. 😱😱😱

Breakdown

  • Set up an IAM user in AWS
  • Install serverless
  • Deploy

Prerequisites

  • AWS account
  • Serverless account (Sign up here)

Once you have your AWS and Serverless accounts set up - read ahead.

Alright, let’s get started!

Create an IAM User

Ok, so we’re going to start by creating a user in AWS. Why? We’ll, we definitely don’t want third party resources to have access as our root user. So let’s hit up the IAM service on AWS:

Once we’re on our “Users” page, we’re going to click “Add user”

Ok, so first we’re going to name the user “serverless-framework” - we’ve named it this in order to identify it easily.

Then, give this user “Programmatic access”

When you’re done, click “Next: Permissions”

Ok, now it’s time to assign permissions. I’m going to allow “AdministratorAccess”. Behind the scenes the serverless framework uses many AWS services - so narrowing it down could theoretically be difficult.

However, if you’re interested in trying it out, the main services the website component utilizes are:

  • S3
  • Certificate Manager
  • Cloudfront
  • Route53

Once you’re done here, click on “Next: Tags”

This step is completely optional, for now - click on “Next: Review”.

At this step, you’ll review your users details and click “Create user” when you’ve confirmed everything looks good.

Your use has now been created! At this step, note down your access key id and secret access key.

When you click “Close”, you’ll be taken to your users page - where your newly created user will be selected.

Install and Setup Serverless

Verify you have serverless framework installed:

serverless -v
Framework Core: 1.57.0
Plugin: 3.2.3
SDK: 2.2.1
Components Core: 1.1.2
Components CLI: 1.4.0

Note: Make sure you’re using serverless framework version 1.49.0 or later.

If you don’t have it installed, install it:

yarn global add serverless

or, alternatively:

npm i -g serverless

Create website from template

serverless create --template-url https://github.com/serverless/components/tree/master/templates/website

This will output:

Serverless: Generating boilerplate...
Serverless: Downloading and installing "website"...
Serverless: Successfully installed "website"

Now, cd into the website template directory:

cd website

Now, install dependencies:

yarn

You’ll see output like this:

yarn install v1.19.1
info No lockfile found.
[1/4] 🔍  Resolving packages...
warning parcel-bundler > @parcel/watcher > chokidar > fsevents@1.2.9: One of your dependencies needs to upgrade to fsevents v2: 1) Proper nodejs v10+ support 2) No more fetching binaries from AWS, smaller package size
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Saved lockfile.
✨  Done in 12.96s.

Now, let’s create a .env file:

touch .env

Add the aws access key id and secret access key that was created for the serverless-framework user:

AWS_ACCESS_KEY_ID=abc123
AWS_SECRET_ACCESS_KEY=456xyz

Replace the values abc123 and 456xyz respectively.

You should now be able to run the application locally:

yarn start

When the build is done, you should be able to hit http://localhost:1234/

Deploying your app

Let’s open up serverless.yml

Now, let’s update the deploy hook to run yarn build

name: website

website:
  component: '@serverless/website'
  inputs:
    code:
      src: dist
      hook: yarn build

Now, all you need to do is run:

serverless

The output will be:

➜   serverless

  website:
    url: http://8k2k8q-qbwj2nm.s3-website-us-east-1.amazonaws.com
    env:

  16s › website › done

Now you can visit the URL generated and check out your live site. 💥💥💥


Sweet! We got a frontend application deployed using Serverless Framework’s website component!

Hope you enjoyed this article and huge thanks to the team at Serverless for making our lives better. This is the kind of productivity gains I can live with.

Until next time! 👋


References

Oh! Want to know how I learned all this? Well - the serverless team has an amazing YouTube channel with tons of resources on learning how to go serverless.

Check out the below video for more information around getting up and going:

```