FastApi With AWS Serverless powered by CDK Typescript

Valentsea
Total
0
Shares



Abstract

  • Deploy FastAPI in a Lambda function that is fronted by an HTTP API in API Gateway, you can enable API key required for the API



Table Of Contents




πŸš€ Solution overview

Valentsea

Valentsea



πŸš€ Build FastAPI as a lambda funnction handler

  • Lambda handler source code
  ➜  simple-serverless-fastapi tree src/lambda-handler
  src/lambda-handler
  β”œβ”€β”€ api
  β”‚   └── api_v1
  β”‚       β”œβ”€β”€ api.py
  β”‚       └── endpoints
  β”‚           └── users.py
  β”œβ”€β”€ main.py
  └── requirements.txt

  4 directories, 4 files
Enter fullscreen mode

Exit fullscreen mode

  • Direct route paths include / and chat_gpt
  @app.get("/")
  async def root():
      return {"message": "FastAPI running in a Lambda function"}


  @app.get("/chat_gpt/")
  async def read_chatgpt(question: str = None):
      return {"message": f"We got question: {question}"}
Enter fullscreen mode

Exit fullscreen mode

  • Restructure FastAPI Routing for developing API and optimize source code by using APIRouter
  src/lambda-handler/api
  └── api_v1
      β”œβ”€β”€ api.py
      └── endpoints
          └── users.py
Enter fullscreen mode

Exit fullscreen mode

  from api.api_v1.api import router as api_router
  app.include_router(api_router, prefix="/api/v1")
Enter fullscreen mode

Exit fullscreen mode

  • For the lambda function handler, we use Mangum python module which is an adapter for running ASGI applications in AWS Lambda to handle Function URL, API Gateway, ALB, and Lambda@Edge events.

  • For building API Docs, one must set the following parameters in FastApi() constructor to resolve /openapi.json correctly

    • For API URL using APIGW stage URL, set root_path equal to the API stage name, eg. root_path=/AppAPI
    • For API custom domain
    docs_url='/docs',
    openapi_url='/openapi.json',
    



πŸš€ Deploy

  • For production, building CDK pipeline for this is the best practice.
  • For the demo, I run cdk deploy manually
  ➜  simple-serverless-fastapi cdk deploy
   βœ…  SimpleFastApiServerless

  ✨  Deployment time: 72.44s
Enter fullscreen mode

Exit fullscreen mode

  • The API GW and method request

Valentsea

Valentsea

  • Custom domain mapped to the API

Valentsea



πŸš€ Test API

Valentsea

  • Call /chat_gpt with API key and query question
  ➜  simple-serverless-fastapi curl -X GET -H "Content-Type: application/json" -H 'x-api-key: 6sUnYj8PAw8MKu8O6FqSw1kf1clmC0Fx8ilQhVeO' https://chatgpt.simflexcloud.com/chat_gpt/ -d 'question=how%20are%20you' -G
  {"message":"We got question: how are you"}
Enter fullscreen mode

Exit fullscreen mode



πŸš€ Conclusion

  • We created a FastAPI application using AWS Serverless. The user must provide the API key to query request and the API key is associated with the usage plan where we can specify who can access the deployed API stages and methods, and optionally sets the target request rate to start throttling requests.

References:


Total
0
Shares
Valentsea

πŸŽ‰ Iconsans

Iconsans is a collection of over 320 free icons designed for use in your next project. This package…

You May Also Like