2015-12-26 6 views
12

AWS noobはここにあります。これはちょっとしたベストプラクティス開発の質問ですが、具体的にするつもりです:APIゲートウェイエンドポイントの背後にあるAWS Lambdasをローカルでテストします。

私は入力用にjsonファイルを使ってノードのLambdaをローカルでテストできますが、私のWebアプリケーションは、S3で実行され、API Gatewayエンドポイントコールに応答してLambdasを呼び出します。

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

これは明らかではありません。例:GETとPOSTを使用しているAPI /ゲートウェイにユーザー/メソッドがあるとします。 AWUsのlistUsers.jsとcreateUser.js Lambdasにそれぞれ接続します。開発中に私はhttp://localhost:0000/users GET/POSTを呼び出し、Lambdaを実行して正しい応答を与えたいので、自分のアーキテクチャ全体をローカルで実行することができます。

明らかにURLでものを呼び出すことは、特に複雑ではないので、私の質問はもっとあります。これを行うためのベストプラクティスは、私が(Cloudfront !? JAWS !?) AWSでは、それをローカルのテストにまったく使用できますか?

これが明白でないか、または非常に明白な場合は謝罪してください!

答えて

15

ああ。その答えは、明らかに「Serverless」(以前のJAWS):https://github.com/serverless/serverlessです。グーグル、謝罪を続けるために必要!今、この質問を削除するかどうか分からないのですか?私はそれが他の人にとって有益だろうと思いますか?特にServerlessは新しいものですか?

+2

これを削除しないでください!私はそうでないとServerlessを見つけられなかったかもしれません! :) –

+0

サーバーレスは非常に多くは完了していません。私たちはAWS API Gatewayをあきらめました。開発ツールは使い方が簡単ではありません! (まだ) –

2

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

ベストプラクティスがあるかどうかはわかりませんが、APIゲートウェイには同じAPIの複数のコピーがあります:開発、ステージング、ライブAPIです。エンドポイントが同じラムダ関数に接続され、バージョニングが本当に難しい(これはやや良い)ので、ステージを使用することを選択しませんでした。別々のAPIを作成し、ラムダ関数を分離することで、3つの設定を準備するのは非常に簡単です。我々が構築したいくつかのシェルスクリプトを使用して、どのステージにも展開できます。

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

+0

これは私たちが持っているものです。各開発者が独自のステージステージ名を持つオンラインですべてのテストを行い、ラムダに渡して、各開発者が独自のDynamo DBテーブルを持てるようにしています - しかし明らかに答えは「Serverless」(新機能)です!私の答えを見てください:) –

5

現在、AWS API GatewayとAWS Lambdaにはローカルテストバージョンはありませんが、機能要求として検討します。

+0

代わりにサーバレスで作業してください! - それは素晴らしいアイデアのように思えるが、まだ終わっていない。 –

1

は、私はあなたが次の操作を行うお勧め:あなたは、ラムダを書く1.When は、(例えばHTTP)を、それはそれと呼ばれるものを知っていないことを確認してくださいではなく、それはイベントJSONから知っている必要があるすべてを知っています。

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

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

+0

申し訳ありませんが、Lambdaは問題ではなく、AWSなしでアプリを実行できるようAPIゲートウェイの部分です。私はダウンボトムしないが、これは私が何をしたのかではない。 Serverlessは非常に近いですが、終わっていません。 –

2

最近、私はAWSラムダ開発で私を助けるためにClaudiaJSを使用してきました。作成者はclaudia-api-builderというこのライブラリを構築し、ラムダイベントを引き起こすAWS API Gatewayを構築するのに役立ちます。この枠組みの中で、あなたは、少なくともそれは、APIゲートウェイを介して私のラムダAPIをテストするユニットのために私を助け、あなたのテストクラスや他理解することは本当に簡単ではないこのよう本家

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); 
}}); 

のようなものを作成することによって、エンドポイントをテストすることができます。

3

私たちのスイート(Bespoken Tools)では、これを正確に行うことができます。短い要約がある http://docs.bespoken.tools/en/latest/tutorials/tutorial_lambda_local/

:このチュートリアルでは、どのように説明してあなたのラムダ
bst proxy lamdba index.js
3でプロキシを開始します)bespokenツール
npm install bespoken-tools -g
2をインストールします)
1)それはプリントアウトURLを取りますそれをAPIゲートウェイで使用する
APIゲートウェイをHTTP統合として設定し、手順2でプロキシを開始するときに表示されるURLを使用します。

希望に役立ちます!セットアップが完了すると、API Gatewayへの呼び出しはラップトップ上でローカルに実行されているラムダに直接送られます。

1

aws-sam-local 最初にドッカーをインストールする必要があります。次に、次の手順に従います。

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

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

関連する問題