35歳からの中二病エンジニア

社寺・鉄道・アニメを愛でるウェブ技術者の呟き

Chaliceでハマらないために

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

qiita.com dev.classmethod.jp

自前の設定は自分で用意

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

github.com

aikawame.hateblo.jp