Windows上にServerless Frameworkを使ったLambda+Pythonのローカル開発環境を構築した時のメモ。実際にAWSにデプロイせずにローカルで単体テストまでできる環境を構築します。
Pythonのインストール
本家のWindows用ダウンロードサイトから最新版(執筆時点では3.8.1)をダウンロードし、実行する。
最初の画面で「Add Python 3.8 to PATH」にチェックを入れて「Install Now」で標準インストールする。最後の画面で「Disable path length limit」をクリックして、パス文字列長の制限を解除しておく。
>python --version
Python 3.8.1
バージョンが正しく表示されればOK。
pipenvのインストール
Pythonのパッケージ管理システムpipを使ってインストールする。
>pip install pipenv
(略)
Successfully installed appdirs-1.4.3 certifi-2019.11.28 distlib-0.3.0 filelock-3.0.12 pipenv-2018.11.26 six-1.14.0 virtualenv-20.0.1 virtualenv-clone-0.5.3
>pipenv --version
pipenv, version 2018.11.26
Node.jsのインストール
Serverless FrameworkはNode.jsで作られているため、Node.jsのインストールをする。
本家のダウンロードサイトから最新版のWindows用インストーラー(執筆時点では12.15.0)をダウンロードし、実行する。
オプションは特に変更しないでデフォルトのままインストールする。
>node --version
v12.15.0
Serverless Frameworkのインストール
Node.jsのパッケージ管理システムnpmを使ってインストールする。
>npm install -g serverless
(略)
+ serverless@1.63.0
added 527 packages from 335 contributors in 21.542s
>sls --version
Framework Core: 1.63.0
Plugin: 3.3.0
SDK: 2.3.0
Components Core: 1.1.2
Components CLI: 1.4.0
プロジェクトの作成
Serverless Frameworkのプロジェクトを作成。テンプレートはAWSのPython3用。
>sls create -t aws-python3 -p helloworld
(略)
Serverless: Successfully generated boilerplate for template: "aws-python3"
-t
は使用するテンプレートの指定。AWS上のLambdaでPython3を使って開発するのでaws-python3
を指定する。
-p
はプロジェクトディレクトリのパス(-nを指定しなければ、そのままプロジェクト名にもなる)
カレントパスの下にhelloworldというプロジェクトディレクトリが作成され、Serverless Frameworkの設定ファイルserverless.ymlとLambda関数の実装が書かれているhandler.pyと.gitignoreが作成される。
Python仮想環境の作成
プロジェクトごとにPythonライブラリを管理するため、プロジェクトディレクトリの中に入り、このプロジェクト用の仮想環境を作る。
>cd helloworld
>pipenv install
Creating a virtualenv for this project…
(略)
Successfully created virtual environment!
(略)
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
サンプル関数の実行
テンプレートに最初から定義されているhelloという名前のLambda関数をローカル実行してみる。
>sls invoke local -f hello
{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}
handler.pyに記述されたhello関数が実行され、レスポンスが返った。
invoke local
で実行しているため、ローカル実行となる。
これでひとまずLambda + Pythonでローカル開発する環境が完成。