Page cover image

Serverless Framework

Using the Serverless Framework, you can easily deploy applications to various cloud providers, such as AWS and Azure.

Introduction

Serverless Framework allows developers to deploy auto-scaling, pay-per-execution, event-driven functions.

The advantages include:

  • No server management

  • Cost-effectiveness

  • Scalability

  • Developer productivity

FastAPI is a modern web framework for building APIs with Python, known for its fast performance and built-in support for data validation and interactive documentation.

Setting Up Serverless Framework

Installation:

npm install -g serverless

Authentication:

For AWS, set up the AWS CLI and configure your credentials:

aws configure

For Azure, set up the Azure CLI and log in:

az login

Deploying FastAPI on AWS Lambda

Create a New Project:

serverless create --template aws-python3 --path my-fastapi-app
cd my-fastapi-app

FastAPI Setup

Install FastAPI and Uvicorn:

pip install fastapi uvicorn

Your application (app.py):

from fastapi import FastAPI

app = FastAPI()

@app.get("/")

def read_root():
    return {"Hello": "World"}

Serverless Configuration (serverless.yml):

service: my-fastapi-app

provider:
  name: aws
  runtime: python3.8

functions:
  api:
    handler: handler.app
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'

Deploy:

serverless deploy

Deploying on Azure and Other Platforms

While AWS is widely used, Serverless Framework also supports Azure, Google Cloud, and more.

Azure

Update your serverless.yml:

provider:
  name: azure
  location: West US
  runtime: python3.6

functions:
  hello:
    handler: handler.hello
    events:
      - http: true
        x-azure-settings:
          authLevel: anonymous

Features, Tips, and Tricks

  1. Local Development: Use serverless-offline plugin for simulating AWS Lambda & API Gateway locally.

  2. Environment Variables: Manage with the serverless-dotenv-plugin.

  3. Middleware: The serverless-middleware plugin allows you to add middlewares before your lambda function is executed.

  4. Optimizing Dependencies: Use serverless-python-requirements to automatically package only the required dependencies.

  5. Warm-Up: AWS Lambdas can sometimes have cold starts. Use serverless-plugin-warmup to mitigate this.

  6. Fine-tune your IAM roles for your functions in serverless.yml to adhere to the principle of least privilege.

  7. Automate Documentation: FastAPI provides automatic interactive API documentation using Swagger.

Extended Management Commands

Deploy to a Specific Stage:

By default, the deployment goes to the dev stage.

serverless deploy --stage production

Remove a Specific Stage:

serverless remove --stage <stage-name>

Specifying a Region:

serverless deploy --region us-west-1

Function Deployment:

Instead of deploying the entire stack, deploy a single function.

serverless deploy function --function <function-name>

View Function Configuration:

serverless info --function <function-name>

Invoke a Function Remotely:

serverless invoke --function <function-name> --log

This prints out the configuration that will be sent to the provider.

serverless print

Serverless Dashboard:

After setting up an account on Serverless Dashboard, you can monitor, troubleshoot, and test your serverless application.

serverless dashboard

Serverless Plugin Management:

Install and manage plugins directly from the CLI.

serverless plugin install --name <plugin-name>
serverless plugin uninstall --name <plugin-name>

Config Credentials:

Set up the Serverless Framework with your account credentials, useful if you didn’t do it during the setup.

serverless config credentials --provider <provider-name> --key <key> --secret <s

Last updated