web-dev-qa-db-ja.com

APIGatewayエンドポイントの背後でローカルにAWSLambdaをテストする

AWSnoobはこちら。これは少し「ベストプラクティス開発の質問」ですが、具体的に説明します。

入力用のjsonファイルを使用してノード内のLambdaをローカルでテストできることは知っていますが、S3で実行され、APIGatewayエンドポイント呼び出しに応答してLambdaを呼び出すWebアプリを「統合テスト」する最善の方法がわかりません。 。

実際のAPIGateway構成ファイルを使用して、同じメソッドをローカルで呼び出し、Lambdaをローカルで実行できるようにすると素晴らしいでしょう。この記事は、ローカルAPIゲートウェイテスト環境がないため、それは不可能であることを示唆しています: http://nickmchardy.com/blog/2015/09/my-thoughts-about-aws-api-gateway-working-with -aws-lambda

おそらくこれは明確ではありません。例:APIGatewayにusers /メソッドがあり、GETとPOSTがあり、AWSでそれぞれlistUsers.jsとcreateUser.jsLambdasに接続されている場合。開発中は、次のように呼び出します。 http:// localhost:0000/users GET/POSTを実行して、Lambdaを実行し、正しい応答を返すようにして、アーキテクチャ全体をローカルで実行できるようにします。

明らかに、URLでモノを呼び出すことは特に複雑ではないので、私の質問はもっとあります:AWSでこれらのものがどのようにリンクするかについての(Cloudfront!?JAWS!?)構成があることを考えると、これを行うためのベストプラクティスは何ですか?ローカルテストに使用しますか?

これが明確でないか、非常に明白でない場合は、お詫び申し上げます。

13
Ian Grainger

ああ。答えは明らかに「サーバーレス」(以前のJAWS)です: https://github.com/serverless/serverless 。グーグルを続ける必要がありました、お詫びします!今、この質問を削除するかどうかわからない?!私はそれが他の人に役立つかもしれないと思いますか?特にサーバーレスは新しいので?

15
Ian Grainger

現在、AWS APIGatewayとAWSLambdaにはローカルテストバージョンがありませんが、機能リクエストと見なします。

6
Ka Hou Ieong

私たちのスイート( Bespoken Tools )を使用すると、まさにこれを行うことができます。このチュートリアルでは、その方法について説明します。 http://docs.bespoken.tools/en/latest/tutorials/tutorial_lambda_local/

簡単な要約は次のとおりです。
1)特注ツールをインストールする
npm install bespoken-tools -g
2)Lambdaでプロキシを開始します
bst proxy lamdba index.js
3)出力されたURLを取得し、APIゲートウェイで使用します
API GatewayをHTTP統合として構成し、手順2でプロキシを開始したときに出力されるURLを使用します。

お役に立てば幸いです。セットアップが完了すると、API Gatewayへの呼び出しは、ラップトップでローカルに実行されているLambdaに直接送信されます。

3
John Kelvie

aws-sam-local を使用することもできます。最初にdockerをインストールする必要があります。次に、次の手順に従います。

$ npm install -g aws-sam-local
$ cd path/to/your/code
$ sam local start-api

CLIは、API関数をローカルホストURLにマップします。これで、cURL、Postman、またはブラウザーを使用してAPIエンドポイントに到達できます。

2
Neil Girardi

最近、私はClaudiaJSを使用してAWSLambdaの開発を支援しています。作成者は、 claudia-api-builder というこのライブラリもビルドします。これは、ラムダイベントをトリガーするAWS APIGatewayを構築するのに役立ちます。このフレームワーク内で、テストクラスでエンドポイントをテストするか、次のようなものを作成することができます。

var apiRequest = {
  context: {
    path: '/task',
    method: 'GET'
  },
  queryString: {
    name: 'mike'
  }
};
// This method will simulate your api gateway endpoint
api.router(apiRequest, {done: function(err, data){
  console.log(data);
}});

この方法はあまり理解しにくいですが、少なくともapiゲートウェイを介してラムダAPIを単体テストするのに役立ちます。

2

次のことを行うことをお勧めします。1。ラムダを作成するときは、ラムダが何と呼ばれるか(httpなど)がわからないことを確認します。

2.「1」を実行した場合は、「grunt」を使用します: https://www.npmjs.com/package/grunt-aws-lambda カスタム「イベント」ファイルを使用してLambdaをテストします。これにより、awsapiゲートウェイから分離されたLambdaを統合できます。

3. npm testを使用して、httpリクエストを使用してE2Eテストを作成し、身体の操作が適切に行われていることを確認します。

1
Yoni

残念ながら、APIゲートウェイをローカルで実行する方法はありません。

ベストプラクティスがあるかどうかはわかりませんが、APIゲートウェイに同じAPIの複数のコピー(開発、ステージング、ライブAPI)を用意しています。エンドポイントが同じラムダ関数に接続され、バージョン管理が非常に困難であったため、ステージを使用することを選択しませんでした(現在は多少改善されています)。個別のAPIと個別のLambda関数を作成することで、3つのセットアップを準備するのは非常に簡単です。作成したいくつかのシェルスクリプトを使用して、任意の段階にデプロイできます。

欠点は、オンラインでしか開発できないことですが、私たちにとってこれは実際にはマイナス面ではありません。

1
Luc Hendriks