Serverless Framework で Flask app をデプロイする

AWS運用自動化サービス「Cloud Automator」



はじめに

こんにちは、技術一課の山中です。
本ブログでは Python の Web フレームワークである Flask を AWS に Serverless Framework を用いてデプロイしてみます。
今回は Amazon Linux 2 上で以下に沿って進めます。

Build a Python REST API with Serverless, Lambda, and DynamoDB

Flask とは

Flask は Python 用のマイクロ Web 開発フレームワークです。
標準で提供する機能を最小限にしているため、軽量でマイクロフレームワークと呼ばれています。

事前準備

事前に pyenvpyenv-virtualenv を使って仮想環境を用意しておきます。

また、 Serverless Framework も以下に従いインストールしておきましょう。

新しいディレクトリと package.json を作成します。

今回は以下 2 つのプラグインを利用します。

serverless-wsgi は API Gateway から Lambda へのリクエストを WSGI アプリ用に形式変換してくれるプラグインです。
Flask は WSGI アプリなので WSGI に変換してあげる必要があります。
serverless-python-requirements は自動で requirements.txt に記載した Python 用ライブラリ群をインストールし、パスを読み込んでくれます。

続いて main.py を作成し以下を記述します。

これはルートパス / にリクエスがくると Hello World! を返すだけの単純な Flask アプリケーションです。
アプリケーションをデプロイするために serverless.yml も作成します。

Lambda ファンクションのハンドラは custom ブロックにある wsgi セクションで指定しています。
今回は main.py の app オブジェクトがエントリーポイントとなっています。

最後に、 Flask パッケージを pip でインストールし、その内容を requirements.txt に出力します。

デプロイ

試してみる

ブラウザを開き、 作成された API Gateway のエンドポイントへアクセスしてみましょう。

Hello World! が表示されます!

環境の削除

表示されることを確認したら、以下コマンドを実行しきれいに掃除しましょう。

おわりに

Flask と Serverless Framework を利用することで簡単に Web アプリケーションを実装することができました。
AWS Lambda を利用しているので DynamoDB や他の AWS サービスと連携することでもっと複雑なアプリケーションも楽に作れそうです!

AWS運用自動化サービス「Cloud Automator」