設定からの解放!AWS Lambda+Python Serverless Microframeworkの衝撃

  • 投稿日:
  • 更新日:2016/07/21
  • by
  • カテゴリ:

Python Serverless MicroframeworkというAWS Lambda + API Gateway向けマイクロフレームワークがイケてます。

これまでServerless Inc.が開発する"Serverless Framework"というのがありました。こちらはNode.jsを対象にしたAWS Lambda向けマイクロフレームワークです。

名前が似ていて混乱しますが、Python Serverless MicroframeworkはAWS Developer Tools teamが開発するもので、対応言語はPython。

なんといってもすごいのが、面倒な設定が一切ないことです。

プレビューが公開されており、ほんの数分(以下の動画では45秒)でAPIの雛形を作ってアクセスできるようになります。

AWSのページに実際に動かしているコンソール画面の動画があるのですが、習ってやってみました。

woman.jpg

前準備

まず、AWS CLIのセットアップをしておいてください。

具体的には、~/.aws以下に

config
credentials

の2つのファイルが存在している必要があります。

あと、今回はPythonを使いますので、PythonとPyPi (pip)のインストールはしておいてください。

Serverlessは以下のようにpipコマンドでインストールできます。

$ pip install chalice

使ってみる

まずk、新規のプロジェクトを作成します。

$ chalice new-project demo

すると、demoディレクトリが作られ、その中にapp.py, requirements.txtという2つのファイル、あと.chaliceという隠しフォルダが作成されます。

app.pyはこんな感じです。

from chalice import Chalice
app = Chalice(app_name='demo')
@app.route('/')
def index():
return {'hello': 'world'}

ほかにコメントで拡張方法が記述されていますがここでは記載を省略します。

このあと、

$ cd demo
$ chalice deploy
Initial creation of lambda function.
Creating role
Creating deployment package.
Lambda deploy done.
Initiating first time deployment...
Deploying to: dev
https://abcd123456.execute-api.us-east-1.amazonaws.com/dev/

となればデプロイ成功。最後のURL (上のものはダミー)に対してGETリクエストをかけることができます。

$ curl https://abcd123456.execute-api.us-east-1.amazonaws.com/dev/
{"hello": "world"}


AWSコンソールを見てみると、このapp.pyが"demo"という名前のLambda関数として入っており、対応したAPI GatewayとIAMも設定されていることがわかります。

トラブルシューティング

chalice deployコマンドを実行したときに、

Traceback (most recent call last):
File "/usr/bin/chalice", line 9, in <module>
load_entry_point('chalice==0.0.1', 'console_scripts', 'chalice')()
(中略)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

というエラーが出てデプロイできないときは、virtualenvが入っていないのが原因ですので、

$ pip install virtualenv

を実行してから、もう一度chalice deployしてみてください。

さいごに

API Gatewayの設定で混乱していたのがウソのように簡単にLambda functionを作成・公開することができます。

ただ、上記で作ったAPIは一般に公開されてしまっていますので、適切にアクセス制限をかけないとLambda functionが知らないうちに実行されて課金されてしまう可能性がありますので、その点はご注意ください。

まだプレビュー版とのことですが、Githubでもアクティブに開発されているようで、これから楽しみです。

こちらもよく読まれています