開発環境
  • Python:3.8.2
  • Flask:1.1.2
  • Zappa:0.51.0
  • pymysql:0.9.3

Lambdaとは

AWSが提供するサービスの一つで、Lambda関数としてプログラムを登録しておくことが出来ます。

通常WebAPIを構築しようとするとサーバーを立てる必要がありますが、LambdaであればLambda関数を登録しておくだけで、そこにHttpリクエストでアクセスし、プログラムを動かすことが出来ます。

つまりは、サーバーレスです。

特に、AWSでサーバーを立てるにはEC2というサービスを利用するのですが、EC2は稼働時間に応じて料金が加算されます。

対してLambdaはアクセス数と通信量に対して料金が発生する為、立ち上がりのサービスにはもってこいのサービスと言えます。

API Gatewayとは

Lambdaを使ってWebAPIを構築するにあたり、API Gatewayというサービスも必要です。

どういうことかというと、Lambda関数を登録しただけでは、その関数を実行するためのトリガーが無いんですね。

そのトリガーとしてHttpリクエストを設定できるようにするのがAPI Gatewayの役割になります。

Zappaとは

ZappaとはPythonのWebアプリケーションをデプロイするためのライブラリです。

使い方に関してはちょっと長くなるのでリンクで割愛してしまいます。

これがマジで便利です。

通常AWSへのデプロイを行おうとすると、Cloud Formationというサービスを使うのですが、このサービスを使うための構成ファイルの作成が非常に手間になります。

それがZappaであれば、コマンド一発。もちろん構成ファイルさえ作ってしまえばCloud Formationも簡単ですけど、プロジェクトの変更をいちいち取り込まなくていい分、Zappaの方が楽です。

(ちなみにZappaも裏側ではCloud Formationを利用しています。)

Zappaを使う際の注意点

設定さえしてしまえばコマンド一発、…だったのですがそのコマンドの正常終了にこぎつけるまで結構悩まされました。

注意点その① 割り当てる権限が分かりづらい

上記のリンク先でもいくつかサービスの名前を挙げられていますが、時期もあってかその通りの権限だけではうまくいかないこともあるようで…。

ちなみに私はコチラのサイトも参考にさせて頂きました。

ポリシーの割り当てではなく、インラインでガリガリ書いてるので上級者向け。私には難しかったです。

結論から言えば、ある程度の権限を付与したところでデプロイ実行してしまうのが手っ取り早そう。

というのも、デプロイ中に発生したエラーをコンソールに吐いてくれるので、どの権限が不足しているのかが分かりやすいんです。これは非常にありがたかった…。

デプロイ失敗した場合にはアップデートではなく、一度アンデプロイすることもオススメしておきます。

注意点その② Flaskデフォルトのライブラリとの相性が悪い

上記のトライ&エラーで権限周りはあらかた解消できたのですが、どうしても解決できないエラーがずっと吐かれていました。

ログを解析したところ、MySQLへの接続に際して使用していた「MySQLdb」というライブラリが悪さをしているようで…。

デフォルトで入っていたライブラリだけに衝撃を受けましたが、「pymysql」というライブラリに置換することで事なきを得ました。

Zappaを使ったデプロイの補足

お伝えし忘れていましたが、Zappaを使うとLambda関数の作成だけではなく、API Gatewayの設定も一緒に行ってくれます。

ただし、Lambda関数として登録されるのは1個だけなので、コンソールからの確認は難しいでしょう。

構成ファイルを利用したCloud Formationによるデプロイもそのうち試してみたいと思います。…出来るだけ小規模なプロジェクトで。

以上です。

スポンサーリンク