为什么在我的 AWS Lambda 函数中看不到这个 aws-sdk 函数?

Why can't I see this aws-sdk function from inside my AWS Lambda function?

我的目标是能够在我的 AWS Lambda 处理函数中使用 AWS CloudWatchLogs.startQuery 函数。当我通过 nodejs 在本地 运行 它时,此方法存在,但当我 运行 在我的处理程序中时,它是未定义的。我想我在两个地方都做同样的事情,但我得到不同的结果。作为比较,我可以在两个地方看到 filterLogEvents 方法,正如我所料。 AWS javascript SDK 中记录了这两种方法。为什么我在我的 lambda 中看不到这个函数?

我的nodejs代码:

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./aws_credentials.json');
AWS.config.update({
    region: 'us-east-1',
    apiVersion: '2014-03-28'
});

var cloudwatchlogs = new AWS.CloudWatchLogs();
var filterlogevents_type = typeof cloudwatchlogs.filterLogEvents;
var startquery_type = typeof cloudwatchlogs.startQuery;

console.log(startquery_type);      // function 
console.log(filterlogevents_type); // function

从我的 lambda 的 index.js 文件中:

var AWS = require('aws-sdk');
AWS.config.update({
    region: 'us-east-1',
    apiVersion: '2014-03-28'
});
exports.handler = async (event) => {
    var cloudwatchlogs = new AWS.CloudWatchLogs();
    var filterlogevents_type = typeof cloudwatchlogs.filterLogEvents;
    var startquery_type = typeof cloudwatchlogs.startQuery;

    const response = {
        body: JSON.stringify({
            startQuery: startquery_type,           // undefined
            filterLogEvents: filterlogevents_type  // function
        }),
    };
    return response;
};

在布线时,Lambda 包含 version 2.290.0 of the AWS SDK in the runtime, which is from August 2018. However, StartQuery was only released in November 2018 and appeared in the version 2.364.0 的 SDK。解决方法是自己打包最新版本的 SDK,而不是依赖包含的库。