

lambda を実行すると、手元でハンドラ (の関数)
を直接実行した場合とは、若干違う挙動をするために、その微妙な挙動にはまって時間を浪費する、ということがしばしばあります。

python を lambda で動かそうとしているのですが、例えば以下の挙動に遭遇しています。

  * pip パッケージがデプロイ先に含まれていないので、 package が import できずにエラー
  * file permission が 600 であった場合に、 lambda ではこのパーミッションでは読み込めずに import できずにエラー
  * logging モジュールの挙動が手元と違う(原因調査中)

など。

* * *

lambda に実際デプロイして、その先で実行を行い、ログを cloud watch などから探し出すのは、手間です。

ローカルから、 lambda の実行環境を(できるかぎり)再現してテストする方法などはありますか？


CC BY-SA 3.0
2017-04-24T05:33:41.067
34238
2021-09-07T04:04:51.937
754
question
python aws aws-lambda
lambda での実行テストを行うには？


[emulambda](https://github.com/fugue/emulambda) があります。  
Amazon の物ではなく、Fugue 社が作っている物のようです。

* * *

Google Cloud Functions だと公式で [Google Cloud Functions
Emulator](https://github.com/GoogleCloudPlatform/cloud-functions-
emulator)があります。  
（あ、似た物という事で出しましたが、これは Python ではなかったですね。さらに離れますが、Google App Engine
もローカル環境が公式に提供されています）


CC BY-SA 3.0
2017-05-08T01:42:08.293
34534
2017-05-08T01:47:36.870
2017-05-08T01:47:36.870
3054
3054
34238
answer


sam cliはいかがでしょう。実際に利用していますが、非常に便利です。  
サンプルがAPIGatwayからLambdaを起動するものですが、Lambda単体のテストもAPI経由してのテストもスムーズに行えます。  
[AWS Serverless Application Model(AWS
SAM)とは?](https://docs.aws.amazon.com/ja_jp/serverless-application-
model/latest/developerguide/what-is-sam.html)

> ローカルのデバッグとテスト。-AWS SAMCLI を使用すると、サーバーレスアプリケーションをローカルで構築、テスト、およびデバッグできます。AWS
> SAMテンプレートです。CLI では、Lambda のような実行環境をローカルで提供します。実際の Lambda
> 実行環境と同等な機能を提供することは、問題を事前に把握するのに役立ちます。コードをステップスルーしてデバッグし、コードが何をしているのかを理解するには、AWS
> SAMをAWSのようなツールキットAWS Toolkit for JetBrains,AWSToolkit for PyCharm,AWSToolkit
> for IntelliJ, およびAWSToolkit for Visual Studio
> Code。これにより、クラウド上で発生する可能性のある問題を見つけてトラブルシューティングすることが可能になり、フィードバックループが強化されます。

仕組みとしてはローカルでのテストやデバッグ時、ランタイムもしくは自身で用意したコンテナイメージ（Dockerfileを指定する）のコンテナが起動しその中で関数が実行されます。チュートリアルはランタイムを使用した例なのでライブラリなど持ち込まない限りデフォルト（boto3など）のライブラリしか動作しません。  
[チュートリアル: Hello World
アプリケーションのデプロイ](https://docs.aws.amazon.com/ja_jp/serverless-application-
model/latest/developerguide/serverless-getting-started-hello-world.html)


CC BY-SA 4.0
2021-09-07T04:04:51.937
82308
2021-09-07T04:04:51.937
42719
34238
answer