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!?)構成があることを考えると、これを行うためのベストプラクティスは何ですか?ローカルテストに使用しますか?
これが明確でないか、非常に明白でない場合は、お詫び申し上げます。
ああ。答えは明らかに「サーバーレス」(以前のJAWS)です: https://github.com/serverless/serverless 。グーグルを続ける必要がありました、お詫びします!今、この質問を削除するかどうかわからない?!私はそれが他の人に役立つかもしれないと思いますか?特にサーバーレスは新しいので?
現在、AWS APIGatewayとAWSLambdaにはローカルテストバージョンがありませんが、機能リクエストと見なします。
私たちのスイート( 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に直接送信されます。
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エンドポイントに到達できます。
最近、私は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を単体テストするのに役立ちます。
次のことを行うことをお勧めします。1。ラムダを作成するときは、ラムダが何と呼ばれるか(httpなど)がわからないことを確認します。
2.「1」を実行した場合は、「grunt」を使用します: https://www.npmjs.com/package/grunt-aws-lambda カスタム「イベント」ファイルを使用してLambdaをテストします。これにより、awsapiゲートウェイから分離されたLambdaを統合できます。
3. npm testを使用して、httpリクエストを使用してE2Eテストを作成し、身体の操作が適切に行われていることを確認します。
残念ながら、APIゲートウェイをローカルで実行する方法はありません。
ベストプラクティスがあるかどうかはわかりませんが、APIゲートウェイに同じAPIの複数のコピー(開発、ステージング、ライブAPI)を用意しています。エンドポイントが同じラムダ関数に接続され、バージョン管理が非常に困難であったため、ステージを使用することを選択しませんでした(現在は多少改善されています)。個別のAPIと個別のLambda関数を作成することで、3つのセットアップを準備するのは非常に簡単です。作成したいくつかのシェルスクリプトを使用して、任意の段階にデプロイできます。
欠点は、オンラインでしか開発できないことですが、私たちにとってこれは実際にはマイナス面ではありません。