Python
lambda
chalice

Chaliceでハマらないために

サーバーレスでAPIを作りたくて、Chaliceを使ってみた。非常にシンプルで、爆速でAPIを開発できそうだけれども、幾つか留意しておきたいポイントがあったので記しておく。

Chaliceについて

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で書いたコードと解説へのリンクを晒しておく。