javascript - 为什么我在我的 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;
};
解决方案
在连线时,Lambda在运行时中包含 AWS 开发工具包的2.290.0 版本,该版本是从2018 年 8 月开始的。然而,StartQuery 是在 2018 年 11 月才发布,并出现在 SDK 的2.364.0 版本中。解决方法是自己打包最新版本的 SDK,而不是依赖包含的库。
推荐阅读
- asp.net-identity - 有没有比通过 userManager.CreateAsync() 更快地批量创建身份用户(1M 行)的方法?
- exception - vue axios Uncaught (in promise) 取消
- c# - 带有 2 个参数的 ASP.NET 2.0 Web API 问题
- reactjs - Detox:条件测试用例编写
- c# - 将 NLog.Extended 从 2.0 升级到 4.6 后抛出“无法加载类型 NLog.Web.NLogHttpModule”
- python - 在python中交换十六进制字节数组中的字节对
- c++ - 如何在 C++ 中将 JWK 公钥转换为 PEM 格式
- r - R中的最大阶乘数
- windows - 从 CMD 返回特定字段
- c - 为什么需要确保在包含使用它的预编译头文件之前不扩展 gcc 的 __COUNTER__ 宏?