【发布时间】:2021-03-28 13:03:17
【问题描述】:
我对 AWS 非常陌生,正在尝试编写一个简单的无服务器应用程序来检测 S3 存储桶中上传图像的文本。图像“2272922.jpg”已上传到 S3 存储桶中。下面的 sn-p 通过节点在本地工作并返回完美的响应
但在从 Lambda 执行(或从 api 网关调用)时总是返回 null。
'use strict'
const AWS = require('aws-sdk')
AWS.config.update({ region: process.env.AWS_REGION })
var rekognition = new AWS.Rekognition();
console.log('Calling lmabda function detect with arguments');
// Lambda function entry point
exports.handler = async (event) => {
return await processImage(event)
}
//function which will extract the text from S3 bucket image
const processImage = async function (event) {
try {
var params = {
Image: {
S3Object: {
Bucket: "s3uploadbucket",
Name: "2272922.jpg"
}
},
};
rekognition.detectText(params, function (err, data) {
console.log(data);
if (err) console.log(err, err.stack); // an error occurred
else {
var table = "<table><tr><th>Low</th><th>High</th></tr>";
// show each text data detected
for (var i = 0; i < data.TextDetections.length; i++) {
table += '<tr><td>' + "Detected: " + data.TextDetections[i].DetectedText + '</td></tr>' +
'<tr><td>' + "Confidence: " + data.TextDetections[i].Confidence + '</td></tr>' +
'<tr><td>' + "Id : " + data.TextDetections[i].Id + '</td></tr>'
'<tr><td>' + "Parent Id: " + data.TextDetections[i].ParentId + '</td></tr>'
'<tr><td>' + "Type: " + data.TextDetections[i].Type + '</td></tr>'
}
table += "</table>";
console.log(table);
const response = {
statusCode: 200,
body: JSON.stringify(table)
}
return response;
}
});
} catch (error) {
console.log(error);
return error;
}
}
我给了以下角色来执行这个 lamda 函数。由于认为问题是由于 lambda 在某处遗漏了 Rekognition 相关策略(因为该函数在本地工作),因此通过控制台编辑了角色并尝试使用所有 Rekognition 相关策略,但没有奏效。
Policies:
- Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- s3:GetObject
Resource: arn:aws:s3:::*
- Effect: Allow
Action:
- rekognition:DetectText
- rekognition:DetectLabels
Resource: "*"
【问题讨论】:
-
我认为你在 rekognition.detectText(..... 之前缺少
return await -
没错@PankajYadav,我错过了
await关键字,而promise()得到了响应。谢了哥们。我也面临其他问题,我将在下面发布完整的代码。
标签: node.js amazon-web-services amazon-s3 aws-lambda