~~ Я не уверен, почему тип здесь не распознается ~~
[Редактировать]
Причина этой ошибки заключается вверсия aws-sdk в AWS Lambda.https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
Node.js Runtime
Идентификатор имени AWS SDK для JavaScript Node.js 8.10
nodejs8.10
2.290.0
Я создал слой Lambda со следующими командами и применил его к своей функции через веб-консоль.
npm init
npm install aws-sdk
mkdir nodejs
cp -r node-modules nodejs
zip -r aws-sdk-layer.zip nodejs
note структура файла 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)
Пример AWS X-Ray SDK для Node.js
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;
});
};
Может случиться так, что версия 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
node --version v8.12.0
HTH
Джеймс