質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

257閲覧

AWSのsam local start-apiコマンドでイベントファイルを渡したい

takabooo

総合スコア25

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2023/10/26 15:21

ローカル環境でlambdaのコードをnodejsで書いています。

API GATEWAYと連携させて使うため、GETやPUTなどの処理を一つのjsファイルに記載しています。
開発にはsamを使っています(バージョンは1.99.0です)。

lambdaの動作テストのために関数内でイベントデータを扱いたいのですが(たとえば、S3のPUTイベントなど)、
AWSのsam local invokeコマンドの場合は、-eオプションでイベント用のjsonファイルが渡せますが、これと同様の
ことをsam local start-apiコマンドで行うにはどのようにすれば良いでしょうか。

invokeコマンドは単一関数のテストに使うコマンドだと理解しており、methodやパスの違いによる動作の検証はできない
のではないかと思いsam local start-apiコマンドを使っていますが、イベント用のjsonファイルを作成しても
渡し方がわかりません。
何か方法があればご教授いただきたいです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

結論から言うと、おそらくそれは不可能だと思うので実際にリクエストを送る方法を検討してみてください。

sam local invokeはLambdaにイベントをローカルで渡すためのコマンドです。
Lambdaには擬似的にイベントを渡してテストする機能があるので、それをローカル環境で行うためのものですね。

一方sam local start-apiはAPI Gateway+Lambdaの環境をローカルで擬似的に構築するものというイメージが近いかと思います。
API GatewayにはLambdaと違ってイベントを渡してテストするといった機能はなく、リクエストヘッダ、ボディ、クエリストリングを渡してテストをする機能があります。

sam local start-api を使用する

AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) sam local start-api サブコマンドを使用して、AWS Lambda 関数をローカルで実行し、ローカル HTTP サーバーホストを通じてテストします。このタイプのテストは、Amazon API Gateway エンドポイントによって呼び出される Lambda 関数に役立ちます。

Lambdaはイベント駆動なので、イベントを受け取ってそれに対して動作を行うのに対して、API GatewayはAPIなので基本的にリクエストを受け取ってそれに対して動作をします。
start-apiでAPI Gatewayをローカルでエミュレートしているので、ローカルのAPIに対してリクエストを送れば、Lambdaに対してイベントを渡すのはAPI Gatewayがやってくれます。

つまり、冒頭の結論のようにsam local start-apiでエミュレートしたAPIに対してリクエストを送ってテストを行えばよい、ということになります。

投稿2023/10/27 05:17

yu_1985

総合スコア7631

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabooo

2023/10/27 10:20

apiという扱いであれば確かにイベントではなくリクエストになりますね。納得しました、ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問