この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
2017年1月31日追記
当初v1.5.2で対応すると書いていましたが、1.5.1の次期リリースは1.5.2ではなく1.6.0のようでした。失礼いたしました。
はじめに
こんにちは、中山です。
個人的に待ち望んでいた機能がリリースされそうなのでエントリにまとめたいと思います。Serverless Frameworkの次期リリースバージョンであるv1.6.0でPythonのローカル実行がマージされました。以前までは、Node.jsのみこの機能がサポートされていましたが、新しくPythonも加わったということです。ローカル実行の機能は完全にLambda関数を再現できるわけではないですが、簡単なテストとしてなら便利に使える機能です。執筆時点(2017/01/21)ではまだリリースされていませんが、早速使ってみたのでこの機能についてご紹介します。
使ってみた
上述したようにまだv1.6.0はリリースされていません。リポジトリからcloneして自分でインストールする必要があります。以下のコマンドでインストール可能です。
# リポジトリのclone
$ git clone git@github.com:serverless/serverless.git
Cloning into 'serverless'...
remote: Counting objects: 44709, done.
remote: Compressing objects: 100% (106/106), done.
remote: Total 44709 (delta 35), reused 1 (delta 1), pack-reused 44602
Receiving objects: 100% (44709/44709), 71.42 MiB | 2.79 MiB/s, done.
Resolving deltas: 100% (27872/27872), done.
$ cd serverless
$ git log ec8a55a66e0be27f8e1ebb1aa48789f7b0479a12 -1
commit ec8a55a66e0be27f8e1ebb1aa48789f7b0479a12
Merge: fe3ddb7 a163e65
Author: Eslam λ Hefnawy <eahefnawy@gmail.com>
Date: Thu Jan 19 19:40:38 2017 +0700
Merge pull request #2937 from UnitedIncome/feature/invoke-python
Invoke local python functions! closes #2862
# インストール
$ npm install
<snip>
# 確認(コミットハッシュ値は表示してくれない模様)
$ ./bin/serverless version
1.5.1
正式にリリースされたら以下のコマンドでインストール可能です。
$ npm install -g serverless
環境が整ったら早速使ってみましょう。今回はテンプレートから各種ファイルを用意しておきます。
$ path/to/serverless/bin/serverless create -t aws-python -n test
Serverless: Generating boilerplate...
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.5.1
-------'
Serverless: Successfully generated boilerplate for template: "aws-python"
ローカルで実行してみます。
$ path/to/serverless/bin/serverless invoke local -f hello
{
"body": "{\"input\": {}, \"message\": \"Go Serverless v1.0! Your function executed successfully!\"}",
"statusCode": 200
}
実行できました!ちなみにグローバルにインストールしたServerless Framework(v1.5.1)で実行すると以下のようにエラーが表示されます。
$ sls invoke local -f hello
Serverless Error ---------------------------------------
You can only invoke Node.js functions locally.
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Your Environment Information -----------------------------
OS: darwin
Node Version: 7.1.0
Serverless Version: 1.5.1
今度はeventにデータを渡してみます。
$ path/to/serverless/bin/serverless invoke local -f hello -d "$(jo hoge=fuga)"
{
"body": "{\"input\": {\"hoge\": \"fuga\"}, \"message\": \"Go Serverless v1.0! Your function executed successfully!\"}",
"statusCode": 200
}
eventに渡されたデータも本物のLambda関数と同じように表示されます。やりましたね。
まとめ
いかがだったでしょうか。
Serverless Frameworkの時期リリースで導入予定のPythonのローカル実行についてご紹介しました。Serverless FrameworkはNode.js製ということもあり、どうしてもPythonへのサポートは「二級市民」的な部分がありました。ただし、今回ご紹介した機能が取り込まれたように、有志の方がさまざまな便利機能を導入してくれています。今後もこのあたりの動向に注目していきたいと思います。
本エントリがみなさんの参考になれば幸いに思います。