问题描述
我收到一个错误消息,说“ getEventPrediction”不是一个函数。我正在关注AWS文档,却找不到原因。
这是我关注的文档:
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/FraudDetector.html
这是我在运行Lambda测试事件时遇到的错误:
2020-10-09T21:01:54.151Z a5c86d6f-9347-49ec-9fe9-4124cd976953错误调用错误{“ errorType”:“ TypeError”,“ errorMessage”:“ frauddetector.getEventPrediction不是函数”,“堆栈“:[” TypeError:欺诈检测器.getEventPrediction不是函数“,”在Runtime.exports.handler(/var/task/index.js:18:18)“,”在Runtime.handleOnce(/ var / runtime / Runtime .js:66:25)“]}
这是Lambda函数:
const AWS = require('aws-sdk')
const frauddetector = new AWS.FraudDetector();
exports.handler = async (event) => {
frauddetector.getDetectors();
console.log('getDetectors worked 3');
var params = {
detectorId: 'new_account_fraud_detector',eventId:'123456789',eventTimestamp: '2020-07-13T23:00:03Z',eventTypeName: 'new_customer_registration',eventvariables: {'email_address':'fake_jamie11@example.com','ip_address':'1.2.3.4'},entities: [ {entityType:'customer',entityId:'12345'} ]
};
frauddetector.getEventPrediction(params,function (err,data) {
if (err) console.log(err,err.stack); // an error occurred
else console.log(data); // successful response
});
// Todo implement
const response = {
statusCode: 200,body: JSON.stringify('FraudDetector : ran'),};
return response;
};
解决方法
Lambda运行时附带的SDK尚未与最新的Fraud Detector API更改保持最新。
GetEventPrediction在2.720.0中引入:https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md#27200
Lambda运行时当前正在使用2.712.0:https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
,如果其他任何人也遇到同样的问题,即lambda运行时中的aws-sdk版本不是最新的,那么按照本文中的建议创建自定义层是一个简单的解决方案:
https://aws.amazon.com/premiumsupport/knowledge-center/lambda-layer-aws-sdk-latest-version/
步骤是:
- 创建一个新目录并
cd
进入其中 - 运行
npm i aws-sdk
- 压缩cwd
- 运行
aws lambda publish-layer-version
cli命令