Lambdaのローカルデバック
Lambdaを使用していくつかコードを実行しています。便利につかっていますが、開発が毎回アップしてからエラーを見つける感じだったのでローカルで動かせるか調べたらちゃんと用意されていたので、試してみました。
インストール環境はmacOSです。言語はpython3.8。Jetbrains系のエディタ。
AWS SAM CLIインストール
まずSAMのインストールをする必要があるためsamをインストールします。
Homebrewでインストールを行うみたいなので、Homebrewをインストールしていない場合はHomebrewをインストールしてください。
brew tap aws/tap brew install aws-sam-cli
これで完了みたいです。
sam cli自体はかなり前に入れていたらしく、インストールしていた状態でした。ただ古かったためpython3.8がないとエラーがでたためupgradeして最新版にしました。
AWS Toolkit for JetBrainsプラグインインストール
Preference -> PluginからAWS Toolkit for JetBrainsをインストール
インストールが完了して、再起動後にAWS Serverless Applicationが使えるようになります。
新規プロジェクトからAWS Serverless Applicationを作成
作成する際にsamのpathを指定する必要があるので、事前にsamのpathを確認しておきます。samのpathを設定することでプロジェクトを作成できるようになりました。
Hello Worldテンプレートで作成して内容を確認
samで作るプロジェクトをGUIでやってくれる感じっぽいです。
実行
プロジェクトを作成した段階でLocal用の実行Configが作成されていました。
Config内で渡すデータのサンプルをそのまま指定できるので、使う内容のテンプレートでテストの内容を作成すればいい感じですね。今回はhello worldを表示するだけのため、適当に実行しました。
実行結果
実行までに発生したエラー
samのバージョンが古かったため発生したエラー
docker ps /opt/homebrew/bin/sam build HelloWorldFunction --template /Users/***/PycharmProjects/lambdaLocalTest/template.yaml --build-dir /Users/***/PycharmProjects/lambdaLocalTest/.aws-sam/build Building codeuri: hello_world/ runtime: python3.8 metadata: {} functions: ['HelloWorldFunction'] Build Failed Error: PythonPipBuilder:Validation - Binary validation failed for python, searched for python in following locations : ['/usr/bin/python'] which did not satisfy constraints for runtime: python3.8. Do you have python for runtime: python3.8 on your PATH? SAM Build has failed: Command did not exist successfully, exit code: 1 2 has failed: Command did not exist successfully, exit code: 1
バージョンアップ後に同じエラーがでたため/usr/bin/pythonのバージョンを確認するとpython2.7のためエラーメッセージの通りでした。
python3.8のpathは別の場所になっていますが、指定の仕方がわからなかったので、別の方法で対応します。
実行時にdockerを使うようにオプションを追加することで無事に実行できました。