Application Overview
Start course
1h 59m

For years, web development has continued to evolve alongside programming languages, tooling, and frameworks. It started out with static web sites before moving on to dynamic sites that were rendered on the server. Over time, as JavaScript frameworks gained functionality and popularity, there was a shift towards putting more of the logic into the front end, and using the back-end as a supporting API.

Throughout all the changes in web development over the years, the server has been a constant. Regardless of the languages, tools, and frameworks used, there’s always a server running the code. And that’s something that hasn’t changed. What has changed is that cloud providers now make it easy for software engineers to focus on writing their code, without having to focus on the underlying server.

In this course, you'll build a serverless web application using Python 3.6. You'll use Lambda, API Gateway, S3, DynamoDB, and Cognito to create a multi-user to-do list application based on Vue.js.

Note: The Apple M1 chip isn't compatible with this course currently. We recommend using a different device.

Learning Objectives

  • Outline the architecture of a serverless web application
  • Set up the AWS services required for the app
  • Create and deploy an API using Python 3.6
  • Explain the value of creating unit tests
  • Use a Cognito User Pool within your app

Intended Audience

  • Developers
  • DevOps Engineers
  • Site Reliability Engineers


  • Familiar with AWS
  • Development experience
  • Familiar with the CLI



Welcome back. In this lesson, we're going to take a high level look at what we'll be building in the course as well as the tools that we'll use to build it. Throughout this course we're going to be assembling a multi-user to-do list application. Take a look at this diagram here. It shows the different services that we'll be using inside of AWS.

On the right there's an S3 bucket which will serve up the front end code. The front end application is comprised of HTML, CSS and JavaScript. We're going to use Vue. js as the client side framework. On the left hand side is a Cognito user pool which will handle the authentication of the app. By using a Cognito user pool, we get to offload authentication onto an AWS managed service.

One of the things I like about this sort of modular design is that it allows us to swap out services as needed. If you'd rather use something like OFT 0, then you could do that. It would require a code change however it wouldn't really be too much effort. After a user has authenticated to Cognito they get a token back.

And that token is passed off to the requests that are sent to API Gateway. The token will get decoded by an authorizer and if it decodes successfully, then the use is authenticated and can execute the code inside the Lambda. So, API Gateway is going to serve as the rest API endpoint which will trigger the code running in Lambda.

The API itself is written in Python and will run inside Lambda using Python 3.6 as the run time. The application will store the to-do list items in DynamoDB. Alright, now that you've seen the overall architecture of what we're going to build, lets take a look at the application itself. Notice the url. It's running as a static site on S3.

The landing page has a register and a login section. This will allow users to register a new user in Cognito. Verify that account and then login. Once logged in, it's a basic to-do application that allows you to set a new item. You can mark it as completed and then you can optionally delete it. So, this is the actual application we will be assembling.

To build this out, we're going to use Visual Studio Code as the code editor. I'll be using Vagrant and VirtualBox to install all of the development tools. The development VM will have Python 3.6, Virtualenv, SAM Local and the docker engine. So, it's going to have everything you need to follow along if you want to.

Okay, lets wrap up here. In the next lesson, we'll download the code from Git Hub. So if you're ready to keep going, then I'll see you in the next lesson.

About the Author
Learning Paths

Ben Lambert is a software engineer and was previously the lead author for DevOps and Microsoft Azure training content at Cloud Academy. His courses and learning paths covered Cloud Ecosystem technologies such as DC/OS, configuration management tools, and containers. As a software engineer, Ben’s experience includes building highly available web and mobile apps. When he’s not building software, he’s hiking, camping, or creating video games.