为什么在我的AWS Lambda函数内部看不到该aws-sdk函数?

时间:2019-02-05 23:34:23

标签: javascript aws-lambda aws-sdk amazon-cloudwatchlogs

我在这里的目标是能够从我的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;
};

1 个答案:

答案 0 :(得分:2)

在接线时,Lambda在运行时中包含version 2.290.0中的AWS开发工具包的August 2018。但是,StartQuery是only released in November 2018,出现在SDK的version 2.364.0中。解决方法是自己打包最新版本的SDK,而不是依赖于随附的库。