AWS Serverless Application

The AWS Serverless Application template deploys a serverless website to AWS that displays the current time. It deploys an Amazon S3 bucket for hosting a static website, deploys an AWS Lambda function that runs the business logic, and an Amazon API Gateway REST API that routes requests to HTML content and the Lambda function. The template ships with a placeholder website that displays the current time to give you a working Pulumi project out of the box that you can customize easily and extend to suit your needs.

An architecture diagram of the Pulumi AWS Serverless Website template

Creating a new AWS serverless application project

To use this template to deploy your own AWS serverless application, make sure you’ve installed Pulumi and configured your AWS credentials, then create a new project using the template in your language of choice.

$ mkdir my-serverless-app && cd my-serverless-app
$ pulumi new serverless-aws-typescript
$ mkdir my-serverless-app && cd my-serverless-app
$ pulumi new serverless-aws-python
$ mkdir my-serverless-app && cd my-serverless-app
$ pulumi new serverless-aws-go
$ mkdir my-serverless-app && cd my-serverless-app
$ pulumi new serverless-aws-csharp
$ mkdir my-serverless-app && cd my-serverless-app
$ pulumi new serverless-aws-yaml

Follow the prompts to complete the new-project wizard. When it’s done, you’ll have a complete Pulumi project that’s ready to deploy and configured with the most common settings. Feel free to inspect the code in index.js index.ts __main__.py main.go Program.cs Program.fs Program.vb App.java Pulumi.yaml for a closer look.

Deploying the project

The template requires no additional configuration. Once the new project is created, you can deploy it immediately with pulumi up:

$ pulumi up

When the deployment completes, Pulumi exports the following stack output values:

url
The HTTP URL for the application.

Stack outputs are useful in a number of ways, most commonly as inputs to other stacks or cloud resources.

Customizing the project

Projects created with the AWS Serverless template expose the following configuration settings:

path
The path to the folder containing the files of the website. Defaults to www, which is the name (and relative path) of the folder included with the template. The /date path is a GET method that retrieves the current time from the Lambda function.
code
References the folder containing the Lambda function code, which is in a file called handler

None of these settings is required; by default, the AWS Serverless template is set up to deploy the website using the files contained in the www and function folders that are bundled with the template.

Using your own web content

If you already have a website you’d like to deploy, you can do so by replacing contents of the www folder and redeploying with pulumi up.

Alternatively, you can configure the stack to deploy from another folder on your machine by using pulumi config set to change the value of the path setting:

$ pulumi config set path ../my-website/dist
$ pulumi up

Customizing the application’s functionality

You can customize the placeholder website’s functionality by editing the Lambda function to perform another action, such as displaying a countdown until a specific time in the future. You could also add new functionality by creating a new Lambda function, adding a new path to the REST API, and updating the HTML script to call the new path.

Tidying up

You can cleanly destroy the stack and all of its infrastructure with pulumi destroy:

$ pulumi destroy

Learn more

Congratulations! You’re now well on your way to managing production-grade AWS serverless infrastructure with Pulumi — and there’s lots more you can do from here: