私のシナリオでは、かなり長い時間を消費する計算を実行するサーバーの少ないバックエンドを実装しようとしています。この計算は、いくつかの外部APIを参照するLambdaによって管理されます。Amazon SQSを使用してラムダ機能が完了したときにブラウザクライアントに通知する
これをリクエストするには、Amazon API Gatewayを使用していますが、これには10秒の実行制限があります。しかし、ラムダは約100秒走る。
このような制限を回避するために、私はこの第2ラムダ関数を使ってこの計算に時間がかかる計算を実行しています&計算が開始されたという報告です。
私はこれと非常によく似ています:
var AWS = require('aws-sdk');
var colors = require('colors');
var functionName = 'really-long'
var lambda = new AWS.Lambda({apiVersion: '2015-03-31'});
var params = {
FunctionName: functionName,
InvocationType: 'Event'
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(functionName.green + " was successfully executed and returned:\n" + JSON.stringify(data, null, 2).gray); // successful response
});
console.log("All done!".rainbow);
このコードは、独立して、クライアントのブラウザの何千人もAWS APIゲートウェイ上で実行されます。
ラムダ関数の実行が正常に完了したことを各クライアントに通知するために、AWS SQSを使用する予定でした(長いポーリングとその他の便利な機能が用意されているため)。
だから私の質問はです:
私は、この特定のクライアントに属しているキュー内のメッセージクライアント上で決定することができますどのように?または、すべてのキューを繰り返して、すべてのクライアントブラウザのリクエストIDパラメータによって適切なメッセージを見つける必要がありますか?私は、1000クライアントが同時に結果を待っているときに、この方法が非効率になると思います。
私は、たとえばDynamoDBのに結果を書き込み、定期的にいくつかの手作りのAPIを経由して結果をDBにポーリングできることを理解してください。しかし、には、ブラウザベースのクライアントに、Amazon PaaSソリューションに基づいて時間のかかるラムダ関数の実行の完了を通知するための洗練されたソリューションがありますか?