首页 > 解决方案 > 为什么我在我的 AWS Lambda 函数中看不到这个 aws-sdk 函数?

问题描述

我的目标是能够CloudWatchLogs.startQuery在我的 AWS Lambda 处理程序函数中使用 AWS 函数。当我通过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;
};

标签: javascriptaws-lambdaaws-sdkamazon-cloudwatchlogs

解决方案


在连线时,Lambda在运行时中包含 AWS 开发工具包的2.290.0 版本,该版本是从2018 年 8 月开始的。然而,StartQuery 是在 2018 年 11 月才发布,并出现在 SDK 的2.364.0 版本中。解决方法是自己打包最新版本的 SDK,而不是依赖包含的库。


推荐阅读