この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Serverless Framework 使ってみてますが便利ですね。Serverless Frameworkの「売り」のひとつである「ローカル環境での Lambda関数の実行」がなぜかエラーになっていたので少し突っ込んで調べてみました。
環境
以下のような環境で確認しました。
- macOS 10.10.5 (Yosemite)
- python 3.6.1 (pyenvでインストール)
- Serverless Framework 1.14.0
- node 4.4.5
原因
serverless コマンドのソースコードを覗いてみました。
どうやら、lib/plugins/aws/invokeLocal/index.js の ここ や ここ で process.env
の 環境変数 PATH
を書き換えているが、pyenv
でインストールしている python3.6 にPATH
が通っていないため発生している模様。
対処
最初、Serverless Framework側にプルリク投げる必要があるかと思ったが、いろいろ見たら、pyenv
はいらないという結論になったのでpyenv
をアンインストール。
あらためて pytho3.6 をインストール
$ brew install python3
boto3 も入れ直す
$ pip3 install boto3
以上で正常に動作するようになった。
さいごに
最近、rbenv で Ruby 環境を構築するのに慣れてて、同じ感覚で Python 環境も構築してましたが、ちょっと勝手が違ったようです。
今回は、Python 2.x 系と 3.x 系を共存させたいという要件はなかったため、Python 3.6 をそのままインストールしてしまいましたが、共存させる場合は前述の Qiita の記事にあるように virtualenv(venv) 使うのが良さそうです。
2017/6/4 追記
この記事では pyenv をやめて直接 Python3.6 をインストールしたという結果になりましたが、後日調査して pyenv でも Python3系でのローカル実行できる環境が作成できることがわかりました。
以下の記事をご覧ください。