前提・実現したいこと
AWSのlambdaからAWS MachineLearning(以下、ML)の実行結果を取得し、戻り値で返す処理を
実装しています。
発生している問題・エラーメッセージ
前提:
1.lambdaからMLを呼び出しコンソール上にMLの実行結果を確認することはできています。
2.MLの実行は非同期で行われます。MLの実行時のコールバック内で実行結果を戻り値で返すようにしました。
問題:コールバック内の戻り値をメイン処理であるexports.handlerの実行結果として受け取ることができません。
該当のソースコード(言語:Node.js 8.10)
ソースの処理順としては
lambdaのexports.handlerが実行される。
↓
dispatchからPredictByMLが呼ばれる。
↓
PredictByMLでmachinelearning.predictが実行される。
machinelearning.predictのコールバック内で実行結果をreturnする。
var AWS = require('aws-sdk'); var machinelearning = new AWS.MachineLearning(); var params_predict = { MLModelId: 'ml-JRpUTssnRek', /* required */ PredictEndpoint: 'https://realtime.machinelearning.us-east-1.amazonaws.com', /* required */ Record: { /* required */ 'age': '32.0', /* '<各種MLに渡すパラメータ>': ... */ } }; //----------------------------------------Helper Function End------------------- function predictCallbackHelper(err, data){ if (err) { console.log(err, err.stack); // an error occurred }else{ console.log(data); return { dialogAction: { type: 'Close', data, }, }; } } //----------------------------------------Helper Function End------------------- // Close dialog with the customer, reporting fulfillmentState of Failed or Fulfilled ("Thanks, your pizza will arrive in 20 minutes") function PredictByML(callback) { callback(machinelearning.predict(params_predict, predictCallbackHelper)); } function dispatch(intentRequest, callback) { console.log(`request received for userId=${intentRequest.userId}, intentName=${intentRequest.currentIntent.name}`); PredictByML(callback()); } exports.handler = (event, context, callback) => { // TODO implement try { dispatch(event, (response) => { callback(null, response); }); } catch (err) { callback(err); } };
ログ出力
Response: (質問時加筆:←この値をnullにならずにpredictCallbackHelperでreturnしている値を返したいのが解決したい課題です。)
null
Request ID:
"dbfcf5c9-9421-11e8-a1f7-6d136624d328"
Function Logs:
START RequestId: dbfcf5c9-9421-11e8-a1f7-6d136624d328 Version: $LATEST
2018-07-30T17:56:18.440Z dbfcf5c9-9421-11e8-a1f7-6d136624d328 request received for userId=user-1, intentName=OrderPizza
2018-07-30T17:56:19.301Z dbfcf5c9-9421-11e8-a1f7-6d136624d328 predict_result = init
2018-07-30T17:56:19.320Z dbfcf5c9-9421-11e8-a1f7-6d136624d328 { Prediction: (←質問時加筆:このJSON形式の情報がMLの実行結果です。これを戻り値として返したいです)
{ predictedLabel: 'admin.',
predictedScores:
{ 'admin.': 0.29799360036849976,
'blue-collar': 0.0013657491654157639,
entrepreneur: 0.03165128827095032,
housemaid: 0.04482463002204895,
management: 0.03435991331934929,
retired: 0.005821636412292719,
'self-employed': 0.05900626257061958,
services: 0.18993555009365082,
student: 0.0037378878332674503,
technician: 0.22878502309322357,
unemployed: 0.08908139914274216,
unknown: 0.01343707274645567 },
details: { Algorithm: 'SGD', PredictiveModelType: 'MULTICLASS' } } }
END RequestId: dbfcf5c9-9421-11e8-a1f7-6d136624d328
REPORT RequestId: dbfcf5c9-9421-11e8-a1f7-6d136624d328 Duration: 970.99 ms Billed Duration: 1000 ms Memory Size: 128 MB Max Memory Used: 31 MB
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。