Lambda@Edge 中的 DynamoDB 访问

DynamoDB access in Lambda@Edge

需要您的帮助来理解一些概念。我有一个在 CloudFront 上使用 Lambda@Edge 的 Web 应用程序。此 lambda 函数访问 DynamoDB - 进行大约 10 个独立查询。这偶尔会产生错误,尽管当我单独测试 lambda 函数时它工作得很好。我无法从 Cloudfront 日志中获得太多意义,并且 Lambda@Edge 没有出现在 CloudWatch 中。

我觉得 DynamoDB 查询是罪魁祸首。 (因为这就是我在 Lambda 函数中所做的一切)为了确保,我在所有区域复制了数据。但这并没有解决问题。我增加了分配给 lambda 函数的超时和内存。但这没有任何帮助。但是,减少数据库查询的数量似乎有所帮助。

你能帮我理解一下吗?在 Lambda@Edge 中进行数据库查询是否错误?有没有办法获取 Lambda@Edge 的详细日志?

Lambda@Edge 日志显示在调用 Lambda 的区域下的 CloudWatch 中。我怀疑您只需要进入 CloudWatch 并切换到正确的区域即可查看日志。如果您自己调用 CloudWatch,这将是您所在的区域,而不是您创建 Lambda 的区域。

一旦你有了日志,你应该有更多的信息可以继续。

晚了一年多,但你永远不知道有人从中受益。 Lambda@Edge 不在特定区域 运行,因此,如果您连接到 DynamoDB table,您需要定义可以找到此 table 的区域。

在 NodeJS 中,这将导致 below:

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'REGION'});

// Create DynamoDB document client
var docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});

如 F_SO_K 所述,您可以在离您最近的区域找到您的 CloudWatch 日志。如何找出哪个区域(如果您是唯一使用该特定 Lambda@Edge 的区域,您可以查看 this documentation