我正在尝试通过Cloudfront Viewer请求调用Lambda
。这是我的Lambda代码
'use strict';
const AWS = require("aws-sdk");
const docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
/* Get request */
const request = event.Records[0].cf.request;
const requestbody = Buffer.from(request.body.data, 'base64').toString();
const data = JSON.parse(requestbody);
const Id = data.Name;
console.log(Id);
/* Generate body for response */
const body =
'<html>\n'
+ '<head><title>Hello From Lambda@Edge</title></head>\n'
+ '<body>\n'
+ '<h1>You clicked more than 10 Times </h1>\n'
+ '</body>\n'
+ '</html>';
var params = {
TableName: "Test",
ProjectionExpression: "#V,#N",
KeyConditionExpression: "#N = :v1",
ExpressionAttributeNames: {
"#N" : "Name",
"#V" : "Value"
},
ExpressionAttributeValues: {
":v1": Id
}
};
var querydb = docClient.query(params).promise();
querydb.then(function(data) {
console.log(data.Items[0].Value);
if(data.Items[0].Value >= 11){
const response = {
status: '200',
body: body,
};
callback(null, response);
}else {
callback(null,request);
}
}).catch(function(err) {
console.log(err);
});
};
当我通过控制台触发相同的Lambda时,它给出了正确的响应。但是,当我通过Cloudfront部署时,它给出的是503 Error
。但是我尝试使用代码Dynamodb Client
进行相同的代码,效果很好。这是工作中的人
'use strict';
const AWS = require("aws-sdk");
const docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
/* Get request */
const request = event.Records[0].cf.request;
const requestbody = Buffer.from(request.body.data, 'base64').toString();
const data = JSON.parse(requestbody);
/* Generate body for response */
const body =
'<html>\n'
+ '<head><title>Hello From Lambda@Edge</title></head>\n'
+ '<body>\n'
+ '<h1>You clicked more than 10 Times </h1>\n'
+ '</body>\n'
+ '</html>';
if(data.Value >= 10){
const response = {
status: '200',
body: body,
};
callback(null, response);
}
else {
callback(null, request);
}
};
我已将完全的dynamodb权限授予了lambda @ edge。
感谢任何帮助 谢谢
答案 0 :(得分:1)
您在哪里指定了DyanamoDB的区域?
Lambda @ Edge可能在缺少DDB表的区域中执行。
在region's order of precedence上查看AWS文档。您还可以查看此L@E workshop code和documentation,以获取有关调用DDB的更多详细信息。
附带说明:面向Lambda函数的查看器,调用跨区域的dynamodb表将对您的延迟产生负面影响。不确定您的用例,但看看是否可以将此调用移至面向原始事件或对ddb进行异步调用。