Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试访问DynamoDB时AWS Lambda node.js超时_Node.js_Amazon Dynamodb_Aws Lambda - Fatal编程技术网

尝试访问DynamoDB时AWS Lambda node.js超时

尝试访问DynamoDB时AWS Lambda node.js超时,node.js,amazon-dynamodb,aws-lambda,Node.js,Amazon Dynamodb,Aws Lambda,在尝试访问DynamoDB时,我遇到了一个AWS Lambda node.js超时问题,但症状不同,我找到的解决方案无法解决此问题 超时设置为5分钟,内存设置为128MB,但使用量不超过30MB。 该角色的IAM策略包括: AWSLAMDAFULLACCESS AmazondynamodFullAccess AWSLambdaVPCAccessExecutionRole 默认VPC有7个安全组,其中默认安全组包括: 入站:所有流量、所有协议、所有端口范围 出站:所有流量、所有协议、所有端口

在尝试访问DynamoDB时,我遇到了一个AWS Lambda node.js超时问题,但症状不同,我找到的解决方案无法解决此问题

超时设置为5分钟,内存设置为128MB,但使用量不超过30MB。
该角色的IAM策略包括:

  • AWSLAMDAFULLACCESS
  • AmazondynamodFullAccess
  • 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: 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
以及结果:

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版本问题不适用于我,返回一个
“ReferenceError:https未在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);
    }
  });
};
结果

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: 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将无法在分配的时间范围内返回表列表,权限问题通常会出现在日志中


谢谢您的关注。

我猜您的Lambda位于一个私有子网中。在这种情况下,默认情况下,Lambda将无法访问出站internet。您需要创建一个NAT网关或NAT实例,以允许VPC保护的资源访问Internet外部。从VPC的角度来看,DynamoDB API在Internet之外。

您不再需要创建NAT网关/实例

您可以为Dynamo DB创建VPC端点,该端点将在专用子网中打开Lambda以访问Dynamo。在VPC中创建一个端点,该端点与针对lambda的VPC/子网设置保持一致,您将不会遇到访问问题

您可以限制对特定服务或资源的访问


这可以针对任何全球AWS服务、S3等进行更新:使用“无VPC”允许正确完成,因此这肯定是VPC问题:开始请求ID:11930536-fb72-11e6-a386-25115dc82eee版本:$最新结束请求ID:11930536-fb72-11e6-a386-25115dc82eee报告请求ID:11930536-fb72-11e6-a386-25115dc82eee持续时间:978.54毫秒计费持续时间:1000毫秒内存大小:128 MB最大使用内存:28 MB我如何排除VPC错误配置的故障?显然VPC是您真正的问题,但是关于
https未定义的问题,您只需要添加
var https=require('https'))
到您的文件顶部。您运行此Lambda功能的VPC是否有NAT网关?您选择的VPC和子网中只有专用IP的实例是否可以实际路由到internet?谢谢@idbehold;我会试试的。@jarmod:没有NAT-我只是需要一个NAT到互联网吗?