web-dev-qa-db-ja.com

AWSラムダ関数をローカルでテストする方法

Node.jsエクスプレスで開発されたモバイルアプリケーションバックエンドがあります。ラムダサービスとして展開しようとしました。そのために、サーバーレスフレームワークプロジェクトを作成しました( https://github.com/serverless )。以前は、エクスプレスバックエンドアプリケーションを起動してモバイルアプリをローカルでテストしました。現在、ローカルバックエンドなしでモバイルアプリをローカルでテストする方法が見つかりません。 jaws runコマンドは、一度呼び出しただけで実行されます。

Webサービスとしてラムダ関数を開始する方法はありますか?または、サーバーレスフレームワークに代わるものはありますか?

24
Supun Induwara

現時点ではこれを行う方法はないようですが、バージョン1.4.0がリリースされようとしており、とりわけ、問題に対処する新しいコマンド「jaws serve」が含まれているはずです。

PRは次のとおりです。 https://github.com/jaws-framework/JAWS/pull/269

更新:新しい serverless-serve プラグインを使用できます。

更新2:serverless-serveはしばらく更新されていません。Lambda関数をエミュレートするには、 serverless-offline の方がはるかに優れたオプションのようです。

16
Santiag00

この質問がまだ関連するかどうかはわかりませんが、 DEEP Framework を使用してコードをローカルでテストしたり、AWS Lambdaにデプロイしたりします。これをチェックしてください:

npm install deepify -g

deepify run-lambda --help

  [email protected] - Run Lambda function locally 

  Usage example: deepify run-lambda path/to/the/lambda -e='{"Name":"John Doe"}' 

  Arguments:  
    path: The path to the Lambda (directory of handler itself) 

  Options:  
    --event|-e: JSON string used as the Lambda payload 
    --skip-frontend-build|-f: Skip picking up _build path from the microservices Frontend 
    --db-server|-l: Local DynamoDB server implementation (ex. LocalDynamo, Dynalite) 
    --version|-v: Prints command version 
    --help|-h: Prints command help 

開示:私はこのフレームワークへの貢献者の一人です

3
user5880747

専用のsevrerlessプラグイン は、ローカルのLambdaを外部からアクセス可能にします。 Postmanを使用したローカルテストとWebhookベースのサービス(Alexa、Slack、Twilioなど)の両方で非常に便利です。

アーキテクチャは次のとおりです。 enter image description here

使用するには、プラグインをインストールしてから実行するだけです:

sls proxy

その後、サービスへのリクエストのローカル送信を開始できます。

enter image description here

サーバーレスでのテストに非常に便利なツールだと思います。

2
John Kelvie

lambda-local を使用できるようになりました。

次のようにインストールします。

Sudo -H npm install -g lambda-local

パラメータをJSONオブジェクトとしてファイルに追加します。この例ではevent.json、およびindex.jsこのようなファイル:

lambda-local -l index.js -h handler -e event.json
2
Nicolay77

これは手遅れかもしれません。しかし、今ではServerless-Offline( https://www.npmjs.com/package/serverless-offline )を試すことができます。

また、これはそのためのgithubページです( https://github.com/dherault/serverless-offline

1
Yohan

1.4はまだリリースされていないので...

先週、まったく同じことが必要でした。したがって、ローカルで実行できる小さな模擬サーバーを作成しました: https://github.com/martinlindenberg/JawsLocalServer

  • すべてのヘッダーとパラメーターは、ハンドラーに渡されるイベントオブジェクトにコピーされました。
  • コンテキストオブジェクトは、データを応答オブジェクトに転送する単純なオブジェクトです
1
M. Lindenberg

サーバーレスフレームワークは、関数をローカルで呼び出す方法を提供するようになりました

それにより、次のようなjsonファイルにクエリを作成できます。

{
  "body": "{\"hello\":\"world\"}",
  "pathParameters": {
    "id": "foo"
  },
  "queryStringParameters": {
    "bar": "42"
  }
  "requestContext": {
    "identity": {
      "cognitoIdentityId": "cognito-id"
    }
  }
}

関数がserverless.ymlファイルに記述されている場合、次のようにローカルで呼び出すことができます

serverless invoke local --function yourFunction --path path/to/your/mock.json
1
7hibault

Python

lambda_function.py

def lambda_handler(*args, **kwargs):
    return 'hello'

ローカルラムダ関数の呼び出し例:

pip install python-lambda-local
echo '{}' >> event.json
python-lambda-local -t 15 -f lambda_handler lambda_function.py event.json
0
jmunsch

この投稿の日付の時点で、sls function run [name-of-function]を実行することで関数をローカルで実行できます。関数のevent.jsonで使用されるjsonはすべて、関数に渡されます。

エンドポイントをテストするために、 Serverless Offline を使用することもできます。これはserverless-serveプロジェクトの分岐です。

0
mrBorna