Deploying a FastAPI Project on AWS Lambda
Introduction
This guide outlines the steps required to deploy a FastAPI project on AWS Lambda using a separate requirements package and code-only zip file.
Prerequisites:
Before you begin, you will need the following:
- A sample FastAPI project
- An AWS account with access to AWS Lambda and S3 services to deploy code
For this example, we will use a FastAPI project named sample-fastapi-project and an S3 bucket named sample-fastapi-s3. We will also create an AWS Lambda function named sample-fastapi-lambda.
Step 1 — Create a virtual environment to isolate our app dependencies.
$ python3 -m venv venv/
Step 2 - Activate the environment:
# In Linux, type
$ source venv/bin/activate
# In Windows, type
$ .\venv\Scrips\activate
Step 3 - Install dependencies that are required for this project:
$ pip install -r requiements.txt
Step 4 - Add Mangum to the FastAPI code:
$ pip install mangum
$ pip freeze > requiements.txt
Import the Mangum module in your FastAPI code:
from mangum import Mangum
Wrap the FastAPI app with Mangum:
app = FastAPI()
handler = Mangum(app)
Mangum allows us to wrap the API with a handler that we will package and deploy as a Lambda function in AWS.

Step 5 - Create a separate requirements package zip file
$ pip3 install -r requirements.txt -t ./packages
$ cd packages
$ zip -r9 ../requirements.zip .
This will create a seperate requirements.zip file
Step 6 - Create a code-only zip file
Create a separate zip file containing only your project's code, including the main.py file. Name this file sample-fastapi.zip.
# if all the code is in main.py file, then
$ zip sample-fastapi.zip main.py
# Add other files to created zip if required
$ zip sample-fastapi.zip -u <python_file>
Step 7 - Upload the requirements package and code-only zip files to S3(sample-fastapi-s3):
Go to the s3 bucket and click on upload icon to uplaod both files directly.

Step 8 - Create a new Lambda function:
- Navigate to the Lambda service in the AWS Console and click
Create function. - Select
Author from scratchand entersample-fastapi-lambdaas the function name. - Choose
Python 3.7as the runtime. - If having existing role then under
Change default execution roleChooseExecution roleasUse an existing roleand select the role - Otherwise Choose
Create a new role with basic Lambda permissionsand Clickcreate function

Step 9 - Add the requirements package as a Lambda layer:
- In the Lambda function page, navigate to the
Layerssection and clickAdd a layer>Layers>create layer. - Choose
Upload a file from Amazon S3and copy theS3 URIof therequirements.zipfile that you uploaded to S3 in Step 7. - Enter a name for the layer and click
Create.

Step 10 - Add the code-only zip file to the Lambda function:
- In the Lambda function page, navigate to the
Function codesection and choose Upload fromAmazon S3 locationunderCode source. - Copy the
S3 ULIofsample-fastapi.zipfile that you uploaded to S3 in Step 7. - Click
Save

Step 11 - Set the Lambda function handler:
- In the Lambda function page, scroll down to the
Runtime settingssection and set the handler name tomain.handler. - It will execute handler function under main.py file.
- Check Step-4 for reference.
Step 12 - Configure the Lambda function:
In the Lambda function page, navigate to the Configuration section and under General configuration set the following parameters:
- Memory (RAM): 1024 MB
- Memory (ROM): 512 MB
- Timeout: 1 minute
Click on Environment variables
Set any environment variables required by your FastAPI project
In the Lambda function page, scroll down to the Layers > Add layer.
- Select
custom layersinlayer source - Add the
requirements-packageto layer that you created in Step 9 -
Choose
Versionand ClickAdd
Add Function URL
- In the Lambda function page, navigate to the
Configurationsection and underFunction URL, ClickCreate function url - Set
Auth typeasNone. - Click Save
Step 13 - Test the Lambda function:
In the Lambda function page, Copy "Function Url" and test your function in any browser.
just add.. <Function Url>/docs in URL
You should see the output from your FastAPI project's APIs.
