kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

Lambdaのローカルデバック

Lambdaを使用していくつかコードを実行しています。便利につかっていますが、開発が毎回アップしてからエラーを見つける感じだったのでローカルで動かせるか調べたらちゃんと用意されていたので、試してみました。

docs.aws.amazon.com

インストール環境はmacOSです。言語はpython3.8。Jetbrains系のエディタ。

AWS SAM CLIインストール

まずSAMのインストールをする必要があるためsamをインストールします。

docs.aws.amazon.com

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を表示するだけのため、適当に実行しました。

実行結果

f:id:kazu22002:20210802074718p:plain

実行までに発生したエラー

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を使うようにオプションを追加することで無事に実行できました。

f:id:kazu22002:20210802073225p:plain