サーバーレスでAPIを作りたくて、Chaliceを使ってみた。非常にシンプルで、爆速でAPIを開発できそうだけれども、幾つか留意しておきたいポイントがあったので記しておく。なお、Chaliceについては他の記事で詳しく説明されているので、そちらを参照されたい。
自前の設定は自分で用意
.chalice
配下に config.json
があるので使えそうな気がしたが、environment_variables
で定義できるのはその名の通り文字列だけなので、ここに自前の設定ファイルのパスを定義して、別途呼び出すのが良さそうだ。
app.py以外のファイルの置き場所
公式でも言及されているし、やはりダメだったという感じだが、chalicelib
以外のディレクトリー配下にファイルを置いた場合、ローカルでは動作するが、デプロイすると動作しない。最新のChaliceだと chalice local
で手軽にローカル開発ができるが、この点には注意しておきたい。
受け付けるContent-Type
Chaliceは特に指定しないとapplication/json以外のリクエストを 415 Unsupported Media Type
で返してしまう。その他のContent-Typeを受け付ける場合は、次のようにオプションを指定する必要がある。
@app.route('/', content_types=['application/x-www-form-urlencoded', 'application/json'])
デプロイ時の依存関係に関する警告
pipでインストールしたライブラリー等を利用している場合、デプロイ時に次のような警告が出る場合がある。
Could not install dependencies: MarkupSafe==1.0 You will have to build these yourself and vendor them in the chalice vendor folder.
ここで公式の説明通りに自分でビルドして vendor
配下に設置したのだけれども、環境やPythonのバージョンも問題ないはずなのに一部のパッケージだけ警告が収まらなかった。
仕方ないのでとりあえず試しにとAPIを叩いてみたら、なんと普通に動いていた…。
原因については深く追えておらず不明だが、とりあえずデプロイ自体に問題無ければ一度APIを叩いてみると良さそうだ。
蛇足
折角なので、実際にChaliceで書いたコードと解説へのリンクを晒しておく。