我在这里的目标是能够从我的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;
};
答案 0 :(得分:2)
在接线时,Lambda在运行时中包含version 2.290.0中的AWS开发工具包的August 2018。但是,StartQuery是only released in November 2018,出现在SDK的version 2.364.0中。解决方法是自己打包最新版本的SDK,而不是依赖于随附的库。