4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure FunctionsでFastAPIを使う

Posted at

Azure FunctionsでのRESTful APIの開発を楽にしたいと考えて調べたら、簡単な方法でFastAPIが使えることが分かりました。
備忘を兼ねて共有します。

注意

ここで紹介する方法で使用するパッケージ(Bonnette)は2021年3月現在、2019年8月を最後に更新されていません。
上記の理由から公開されたサービスの本番運用には向いていないかと思います。
この記事は個人レベルの簡単なアプリをAzure Functionsでぱぱっと無料で公開することを念頭に置いています。

前提条件

  • Azure Functionsを利用できるAzureのサブスクリプションを持っていること
    • もしなければここで作成できます

使うもの

Bonnetteとは

  • Azure Functions用のASGIアダプタです
  • 受け取ったリクエストをASGIインスタンス向けに変換し、FastAPIが返したレスポンスをAzure Functions向けに変換します
    • 乱暴な言い方をするとUvicornの代わりです
  • 繰り返しになりますが、2021年3月現在このプロジェクトのレポジトリには THIS PROJECT IS UNMAINTAINED と記載されており、2019年8月を最後に更新されていません

Azure Functionsアプリの作成

当たり前ですが Python が動く設定でお好きなリージョンに作成してください。
バージョンは3.6以降しか選べないのでどれでも構いません。

VS Codeでプロジェクトを作成する

公式のチュートリアルを参考にローカルでプロジェクトを作成してください。
もし初めてであれば、Azureへのデプロイと初期状態での動作確認を行っておくことをお勧めします。

サンプルを見ながらコードを編集する

azure-functions-fastapi-asgi-exampleに素晴らしいサンプルがあります。
このレポジトリのURLを貼るだけで十分とか言っちゃいけない。

編集する点は以下の5点です。

  • host.json
    • "extensions" 以下をコピーして追加してください
    • これを追加することでURLに勝手に追加される"api"という文字列を消すことができます
  • requirements.txt
    • bonnette と fastapi を追加してください
  • [function name]/__init__.py
    • fastapi/__init__.py と置き換えてください
    • Bonnette(app) がFastAPIインスタンスをラップするための記述です
  • [function name]/main.py
    • fastapi/main.py をコピーして配置してください
    • このファイルに FastAPI アプリケーションを記述します(もちろんファイルを分割しても構いません)
  • [function name]/function.json
    • ["bindings"][0]"route": "{*route}" を追加してください
    • この記述を追加することで、 <アプリ名>.azurewebsites.net 以降のすべてのパスをFastAPIで自由に使えるようになります

デプロイと動作確認

チュートリアルと同じ手順でAzure上にデプロイします。
<アプリ名>.azurewebsites.net にアクセスして {"Hello": "World"} と返ってくれば成功です。

まとめ

Bonnetteを使えばAzure Functions上でFastAPIが走ります。
個人で遊ぶ程度であればAzure Functionsは無料(2021年3月時点での情報)で使えますのでだいぶ捗りますね。

ちなみに

AWSのFaaSであるLambdaでも似たような方法でFastAPIを使えるようです。
その場合にはMangumというアダプタを使うようですが、AWSには詳しくないので名前を紹介するだけにします。

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?