Serverless URL Shortener with Redis Cache and HttpServer
A sample URL shortener SPA that uses the high-level components. The example shows to combine serverless functions along with containers. This shows that you can create your own higher level abstractions for your own use, your team’s, or to share with the community using your language’s package manager.
Deploying and running the program
Note: some values in this example will be different from run to run. These values are indicated
with ***
.
Create a new stack:
$ pulumi stack init url-cache-testing
Configure Pulumi to use an AWS region that supports Fargate, which is currently only available in
us-east-1
,us-east-2
,us-west-2
, andeu-west-1
:$ pulumi config set aws:region us-west-2
Set a value for the Redis password. The value can be an encrypted secret, specified with the
--secret
flag. If this flag is not provided, the value will be saved as plaintext inPulumi.url-cache-testing.yaml
(sinceurl-cache-testing
is the current stack name).$ pulumi config set --secret redisPassword S3cr37Password
Add the ‘www’ directory to the uploaded function code so it can be served from the http server:
$ pulumi config set cloud-aws:functionIncludePaths www
Restore NPM modules via
npm install
oryarn install
.Compile the program via
tsc
ornpm run build
oryarn run build
.Preview and run the deployment via
pulumi update
. The operation will take about 5 minutes to complete.$ pulumi update Previewing stack 'url-cache-testing' ... Updating stack 'url-cache-testing' Performing changes: #: Resource Type Name 1: pulumi:pulumi:Stack url-shortener-cache-url- ... 49: aws:apigateway:Stage urlshortener info: 49 changes performed: + 49 resources created Update duration: ***
To view the API endpoint, use the
stack output
command:$ pulumi stack output endpointUrl https://***.us-east-1.amazonaws.com/stage/
Open this page in a browser and you’ll see a single page app for creating and viewing short URLs.
Clean up
To clean up resources, run pulumi destroy
and answer the confirmation question at the prompt.