Python Serverless Microframework for AWS(Chalice)にローカルモードが追加され、開発しやすくなりました

2016.11.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、藤本です。

本ブログでも何度か紹介しているChaliceですが、今月前半にバージョン 0.4.0 がリリースされ、ローカルモードが追加されました。

Chalice

Chalice については以下の過去記事をご参照ください。

【新機能】Python Serverless Microframework for AWS(プレビュー版)が登場!

ローカルモード

ローカルモードはAWSへデプロイせずにローカルでHTTPサーバを起動し、動作確認できる機能です。API Gateway、AWS Lambdaの動作をローカル環境で実行するようなイメージです。

バージョン 0.3.0 までは動作確認する都度、chalice deployコマンドを実行し、AWS Lambdaへソースコードをデプロイする必要がありました。更には、デプロイして動作確認したら、{"Code": "ChaliceViewError","Message": "ChaliceViewError: An internal server error occurred."}だけ出て原因がよく分からない!ということがありました。

バージョン 0.4.0 からはサクッとローカル起動して、テストして、修正して、と手軽に開発サイクルが回しやすくなりました。

ただし、ローカル環境で動作するため、VPC内のリソース(特にプライベートIPしか持たせていないRDSやRedshift)と通信する構成の場合、EC2上で実行するなど工夫が必要です。EC2上で実行するならデプロイした方が早いかな。。

試してみた

それでは早速試してみましょう。

プロジェクト作成

プロジェクトを作成します。

# chalice --version
chalice 0.4.0

# chalice new-project chalice040

# cd chalice040
# ls
app.py  requirements.txt

ソースコードはデフォルトで生成されるサンプルコードを利用しています。

app.py
from chalice import Chalice

app = Chalice(app_name='chalice040')

@app.route('/')
def index():
    return {'hello': 'world'}

@app.route('/hello/{name}')
def hello_name(name):
    return {'hello': name}

ローカルモード起動

ローカルモードで起動するにはサブコマンドでlocalを指定するだけです。

# chalice local
Serving on localhost:8000

これだけです。

localhost、8000ポートにバインドされ、HTTPサーバが起動します。

動作確認でWebリクエストを送信します。

/で index 関数を呼び出し、/hello/classmethodで hello_name 関数を呼び出します。

# curl localhost:8000/
{"hello": "world"}

# curl localhost:8000/hello/classmethod
{"hello": "classmethod"}

正常に結果が返ってきました。

ちなみにローカルモードが実装されていない 0.3.0 以前ではLocal Commandの出力が返ってくるだけでした。

# chalice --version
chalice 0.3.0

# chalice local
Local command

まとめ

いかがでしたでしょうか?

Chalice は Python のみと言語が限定されていますが、ソースコードの作りもシンプルで分かりやすいです。まだプレビュー版で本番環境での利用は非推奨ですが、機能追加のリリースペースも早く、今後も注目していきたいと思います。