【发布时间】:2021-12-03 22:42:35
【问题描述】:
我在尝试访问 DynamoDB 问题时遇到了这些 AWS Lambda node.js 超时之一,但症状看起来不同,我找到的解决方案不能解决这个问题。
超时设置为 5 分钟,内存设置为 128MB,但使用量不超过 30MB。
该角色的 IAM 策略是:
- AWSLambdaFullAccess
- AmazonDynamoDBFullAccess
- AWSLambdaVPCAccessExecutionRole
默认 VPC 有 7 个安全组,默认安全组包括:
- 入站:所有流量、所有协议、所有端口范围,
- 出站:所有流量,所有协议,所有端口范围,0.0.0.0/0
这是代码:
var aws = require('aws-sdk');
exports.handler = function(event, context) {
var dynamo = new aws.DynamoDB();
dynamo.listTables(function(err, data) {
if (err) {
context.fail('Failed miserably:' + err.stack);
} else {
context.succeed('Function Finished! Data :' + data.TableNames);
}
});
};
以及结果:
START RequestId: 5d2a0294-fb6d-11e6-989a-edaa5cb75cba Version: $LATEST
END RequestId: 5d2a0294-fb6d-11e6-989a-edaa5cb75cba
REPORT RequestId: 5d2a0294-fb6d-11e6-989a-edaa5cb75cba Duration: 300000.91 ms Billed Duration: 300000 ms Memory Size: 128 MB Max Memory Used: 21 MB
2017-02-25T15:21:21.778Z 5d2a0294-fb6d-11e6-989a-edaa5cb75cba Task timed out after 300.00 seconds
解决的相关 node.js 版本问题here 对我不起作用并返回"ReferenceError: https is not defined at exports.handler (/var/task/index.js:6:16)"。 AWS 也弃用了 0.10 版。
这是带有 https 参考的代码:
var aws = require('aws-sdk');
exports.handler = function(event, context) {
var dynamo = new aws.DynamoDB({
httpOptions: {
agent: new https.Agent({
rejectUnauthorized: true,
secureProtocol: "TLSv1_method",
ciphers: "ALL"
})
}
});
dynamo.listTables(function(err, data) {
if (err) {
context.fail('Failed miserably:' + err.stack);
} else {
context.succeed('Function Finished! Data :' + data.TableNames);
}
});
};
结果:
START RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb Version: $LATEST
2017-02-24T22:27:31.010Z 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb ReferenceError: https is not defined
at exports.handler (/var/task/index.js:6:16)
END RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb
REPORT RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb Duration: 81.00 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 26 MB
RequestId: 6dfd3db7-fae0-11e6-ba81-a52f5fc3c3eb Process exited before completing request
将超时设置为 5 分钟,我无法相信 AWS 无法在分配的时间范围内返回表列表,并且权限问题通常会出现在日志中。
感谢您对此进行调查。
【问题讨论】:
-
更新:使用“No VPC”可以正确完成,所以这绝对是一个 VPC 问题:START RequestId:11930536-fb72-11e6-a386-25115dc82eee 版本:$LATEST END RequestId:11930536-fb72- 11e6-a386-25115dc82eee 报告请求 ID:11930536-fb72-11e6-a386-25115dc82eee 持续时间:978.54 毫秒计费持续时间:1000 毫秒内存大小:128 MB 使用的最大内存:28 MB 如何对 VPC 错误配置进行故障排除?
-
显然 VPC 是您真正的问题,但对于
https is not defined问题,您只需将var https = require('https')添加到文件顶部即可。 -
您运行此 Lambda 函数的 VPC 是否有 NAT 网关?您选择的 VPC 和子网中只有私有 IP 的实例可以实际路由到互联网吗?
-
谢谢@idbehold;我会试试的。
-
@jarmod: 没有 NAT - 我只需要一个 NAT 到互联网吗?
标签: node.js amazon-dynamodb aws-lambda