私はawsサーバーレスプロジェクトに取り組んでおり、ラムダ関数をローカルでテストする必要があります。serverless invoke local -f {function_name}
コマンドを使用して、パスまたはクエリパラメーターを要求しないAPI呼び出しをテストしています。
私の質問は、このコマンドを使用してパスまたはクエリパラメーターを関数に渡す方法です。
サーバーレスの説明の例
getFoodDetails:
handler: handler.getFoodDetails
events:
- http:
method: get
path: /foods/{food_id}
cors: true
request:
parameters:
paths:
food_id: true
データ文字列
前述のように、--data
オプションを使用して、文字列データをイベントとして関数に渡すことができます。
serverless invoke local -f {function_name} --data '{ "queryStringParameters": {"id":"P50WXIl6PUlonrSH"}}'
データファイル
また、データをevent
としてjsonファイルに--path
を渡し、「イベントファイル」内で必要なデータを定義することもできます。
serverless invoke --function {function_name} --path event_mock.json
なんらかの方法で呼び出しからイベントを返し、JSONファイルに保存するか、Amazonから取得することができます。彼らはいくつかの例を提供します: https://docs.aws.Amazon.com/lambda/latest/dg/eventsources.html
--path
と--data
の両方を渡すと、--path
ファイルに含まれるデータが--data
フラグで渡したデータを上書きすることに注意してください。
ドキュメント: https://serverless.com/framework/docs/providers/aws/cli-reference/invoke#invoke-local
--data
を使用します。passは、ローカルラムダに送信する任意の形式のデータです。
文字列データの例:
サーバーレス呼び出し--function functionName --stage dev --region us-east-1 --data "hello world"
JSONデータの例:
サーバーレス呼び出し--function functionName --stage dev --region us-east-1 --data '{"property1": "value"}'
ファイルからのJSONデータ:
サーバーレス呼び出し--function functionName --stage dev --region us-east-1 --path lib/data.json
完全なドキュメントは here からアクセスできます
それが役に立てば幸い。
属性--data
を使用して回答を試みましたが、neitherは機能します。
実際問題は、--data
がフレームワークに文字列値を渡すことです。したがって、javascriptファイル:console.log(typeof(event));
に書き込むと、String
ではなくObject
を取得します。つまり、サーバーレスフレームワーク入力をJSONオブジェクトに正しく変換しないです。そのため、xxの未定義エラーが発生しました。
私の解決策は、-p
(または--path
)属性を使用することです。例では、次の手順を実行します。
{"pathParameters":{"food_id":"100"}}
food_id
を取得するには、event.pathParameters.food_id
を使用しますsls invoke local -f yourFunction -p test.json
将来の参考のために。あなたのケースはこのように解決されたでしょう。 Kannaiyans JSON Exampleのおかげで理解できました。
sls invoke local -f getFoodDetails --data '{ "queryStringParameters": {"food_id":"123"}}'