はじめに
DjangoでWebアプリを作成した際に、サーバーを借りると高くつくので、何とかLambdaに乗っけて実行課金にできないかと試した記録です。
結論から言うと上手くいかなかったのですが、何か役立つかもしれないので書き残しておきます。
無事動かすことができましたので、こちらの記事もご覧ください。→https://qiita.com/kerorinfather/items/9fc0c6e2d68950fde50f
DjangoをLambdaで動かすまでの手順
以下のサイトを参考に実施しました。相違点としては、以下のサイトではMySQLにて動かしていますが、私はSQLiteにて試しています。(ただし、うまくいきませんでした。)
問題点
Werkzeugが最新バージョンだと動かない
Python用のWSGIユーティリティライブラリであるWerkzeugを、最新バージョンにしていると動かないです。
requirements.txtにて、バージョンを指定してあげる必要があります。
Django
Werkzeug==1.0.1
Pythonが最新バージョンだと動かない
上記のエラーを解決後、また別のエラーになりました。
原因がよく分からなかったですが、ランタイムをPython 3.6
にしたら解決しました。
MySQLのバージョンが古いと言われる
Lambdaで使われている環境には、標準でSQLite 3.7.17
がインストールされていますが、Djangoで利用しようとした際に新しいバージョンにしろと言われます。
Djangoのバージョンを下げて対応しようかと考えましたが、Django3の場合最低でもSQLite 3.8.3
が要求されるので、諦めました。。。
Serverless Frameworkに依存している
DjangoはWSGI(Web Server Gateway Interface)に対応するため、同じくWebサーバ側もWSGIに対応していれば実行可能です。しかし、LambdaでWSGIを実現するために、Serverless Frameworkのプラグインであるserverless-wsgi
を利用しているため、Serverless Frameworkから離れられない状態です。
何が言いたいかというと、DockerイメージでSQLiteのバージョンを上げたものを作成して、Lambdaにデプロイすればいいと考えたのですが、その場合はserverless-wsgi
を利用できないので詰む、ということです。ほかのライブラリも探しましたが見つからないので、自力でWSGIに対応させるしかなさそう。
おわりに
Lambdaを使うなら、素直にFlaskなどの軽量フレームワークを使うのがよさそうです。