Following Pamela Fox tutorial “FastAPI on Azure Functions with Azure API Management“.
The idea is to deploy FastAPI to Azure Functions the way auto-generated interactive documentation would be public, but actual API would be protected. Pamela solved it with Azure API Management and subscription keys:
“One of my goals was to have the documentation be publicly viewable (with no key) but the FastAPI API calls themselves require a subscription key. That split was the trickiest part of this whole architecture, and it started at the API Management level.”
Pamela published it in 3 parts:
– the idea and solution explained under her blog: FastAPI on Azure Functions with Azure API Management
– code and some initial steps at GitHub: pamelafox/fastapi-azure-function-apim
– video with more deploying details at YouTube: Deploying FastAPI app to Azure Functions + API Management
I will just repeat all the steps in this one-pager.
Environment I use: Linux Ubuntu + VS Code with “Dev Containers” extension and azd
- Clone https://github.com/pamelafox/fastapi-azure-function-apim
- Start visual studio code and reopen the project with container
- ensure it works locally with
PYTHON_ISOLATE_WORKER_DEPENDENCIES=1 func host start
- Deploy it to Azure functions with (you’d answer questions):
$ azd auth login
$ azd init
$ azd up - Go to API management Service, Subscriptions, Add subscription, copy the key (secure it)
- From API management service, Overview – open Gateway URL and append it with “/public/docs”
- Try GET /generate_name as is – you’ll get “401”
- Try the same with subscription key – you’ll get “200”
- Save Request Url to call the API from your front-end app
Nest steps:
- calling other APIs
- connecting to Databases
- using secrets