Serverless Python API with Redis
You can find the project source code on GitHub.
This tutorial shows how to build a serverless API for Page View Counter with Python and Redis. The API will the count page views and show it in JSON format.
Prerequisites
- Complete all steps in Getting started with the AWS CDK
Project Setup
Create and navigate to a directory named counter-cdk. CDK CLI uses this directory name to name things in your CDK code, so if you decide to use a different name, don't forget to make the appropriate changes when applying this tutorial.
mkdir counter-cdk && cd counter-cdkInitialize a new CDK project.
cdk init app --language typescriptCounter Function Setup
Create a folder named api under lib
mkdir lib/apiCreate /lib/api/requirements.txt
upstash-redisCreate /lib/api/index.py
from upstash_redis import Redisredis = Redis.from_env()def handler(event, context): count = redis.incr('counter') return { 'statusCode': 200, 'body': f'Counter: {count}' }Counter Stack Setup
Update /lib/counter-cdk-stack.ts
import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import * as lambda from 'aws-cdk-lib/aws-lambda';import * as path from 'path';export class CounterCdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const counterFunction = new lambda.Function(this, 'CounterFunction', { code: lambda.Code.fromAsset(path.join(__dirname, 'api'), { bundling: { image: lambda.Runtime.PYTHON_3_9.bundlingImage, command: [ 'bash', '-c', 'pip install -r requirements.txt -t /asset-output && cp -au . /asset-output' ], }, }), runtime: lambda.Runtime.PYTHON_3_9, handler: 'index.handler', environment: { UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL || '', UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN || '', }, }); const counterFunctionUrl = counterFunction.addFunctionUrl({ authType: lambda.FunctionUrlAuthType.NONE, }); new cdk.CfnOutput(this, "counterFunctionUrlOutput", { value: counterFunctionUrl.url, }) }}Database Setup
Create a Redis database using Upstash Console or Upstash CLI and export UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN to your environment.
export UPSTASH_REDIS_REST_URL=<YOUR_URL>export UPSTASH_REDIS_REST_TOKEN=<YOUR_TOKEN>Deploy
Run in the top folder:
cdk synthcdk bootstrapcdk deployVisit the output url.