Как исправить ошибку SDK для фермы устройств AWS В параметрах обнаружен неожиданный ключ 'type' - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь получить список загрузок в AWS Device Farm. Я пытался использовать метод "devicefarm.listUploads" от Lambda.

Возникает проблема, когда я пытаюсь отфильтровать ее по типу.

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"
}

1 Ответ

1 голос
/ 02 мая 2019

~~ Я не уверен, почему тип здесь не распознается ~~

[Редактировать]

Причина этой ошибки заключается вверсия 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

Джеймс

...