aws-lambda - 如何修复 AWS 设备场 SDK 错误在参数中发现意外的键“类型”
问题描述
我正在尝试获取 AWS Device Farm 中的上传列表。我尝试使用 Lambda 的方法“devicefarm.listUploads”。
当我尝试按类型过滤时遇到问题。
var uploadList = devicefarm.listUploads({ arn: deviceFarmProject, type: 'IOS_APP' }).promise()
.then(res => res)
.catch(err => err);
期望是获取有关所有 iOS 应用程序的数据,但出现以下错误。
{
"message": "Unexpected key 'type' found in params",
"code": "UnexpectedParameter",
"time": "2019-05-02T15:49:35.351Z"
}
解决方案
~~不知道为什么这里不能识别类型~~
[编辑]
此错误的原因是由于 AWS Lambda 中的 aws-sdk 版本。 https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
Node.js 运行时
适用于 JavaScript Node.js 8.10 的名称标识符 AWS 开发工具包
节点js8.10
2.290.0
我使用以下命令创建了一个 Lambda 层,并通过 Web 控制台将其应用于我的函数。
npm init
npm install aws-sdk
mkdir nodejs
cp -r node-modules nodejs
zip -r aws-sdk-layer.zip nodejs
请注意zip 文件结构需要与 Lambda 文档示例相匹配。 https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path
Node.js – nodejs/node_modules, nodejs/node8/node_modules (NODE_PATH)
适用于 Node.js 的示例 AWS X-Ray 开发工具包
xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
应用层后,我能够成功执行该功能。
但是我使用了以下内容,尽管我没有任何 iOS 上传,但它似乎可以工作。
// assume we already executed `npm install aws-sdk`
var AWS = require('aws-sdk');
// Device Farm is only available in the us-west-2 region
var devicefarm = new AWS.DeviceFarm({ region: 'us-west-2' });
var params = {};
devicefarm.listProjects(params, function (err, projects) {
if (err) console.log(err, err.stack); // an error occurred
else{
project = projects.projects[0];
console.log("project: ", project);
uploadList = devicefarm.listUploads({ arn: project.arn, type: 'IOS_APP' }).promise()
.then(function(uploadList){
console.log("uploads: ",uploadList);
})
.catch(err => err);
}
});
我在 Lambda 中执行的代码
// assume we already executed `npm install aws-sdk`
var AWS = require('aws-sdk');
// Device Farm is only available in the us-west-2 region
var devicefarm = new AWS.DeviceFarm({ region: 'us-west-2' });
exports.handler = async (event) => {
return new Promise(function (resolve, reject) {
var params = {};
devicefarm.listProjects(params, function (err, projects) {
if (err) reject(err); // an error occurred
else {
var project = projects.projects[0];
console.log("project: ", project);
resolve(project);
}
});
}).then(function(data){
console.log("in then function","data: ",data);
return new Promise(function(resolve,reject){
devicefarm.listUploads({ arn: data.arn, type: 'IOS_APP' }, function(err,uploads){
if (err) reject(err); // an error occurred
else {
resolve(uploads);
}
})
}).then(function(data){
console.log("uploads: ", data);
return data;
}).catch(function(data){
console.error("list uploads failed","data: ", data);
return data;
});
}).catch(function(data){
console.error("list projects failed","data: ",data);
return data;
});
};
可能是 Lambda 中的 aws-sdk 版本不是最新的,在这种情况下,您需要应用Lambda 层或在代码包中包含 aws-sdk。
我在本地执行了这段代码,它提供了以下输出:
node sample.js
project: { arn: 'arn:aws:devicefarm:us-west-2:111122223333:project:00ec5d2a-9170-4c52-b65e-0e12986e4fc3',
name: 'web_app_test',
created: 2019-02-10T22:47:35.052Z }
uploads: { uploads: [] }
aws-sdk 版本:aws-sdk@2.448.0
节点--版本
v8.12.0
高温高压
詹姆士
推荐阅读
- mysql - Laravel 5.7 - when() 函数中的高级 where() 查询
- css - 具有真实世界比例和比例的不同尺寸图像的响应式网格
- c# - 如何在 switch 语句中比较文本框中的值?
- sql-server - 防止沿维度属性聚合
- javascript - 为什么 PHP 文件不能正确读取 javascript?
- javascript - 'this' 的值被监听器破坏
- python - How to print all number combinations from specific set of numbers?
- r - Removing LaTeX Warning: Label ... multiply defined using **knitr**
- css - 您如何使视频响应不同的维度?
- swift - iOS 13 - UIMenu 是否有不显示其图像的错误?