【发布时间】:2021-05-26 12:56:16
【问题描述】:
我已经编写了一个 lambda 函数来将文件复制到另一个 s3 存储桶并从当前存储桶中删除该对象,但是它在某行被弯腰并且在那之后没有执行。我尝试了以下两个选项,第一个停止在第二个完成但响应没有到达 API 网关代理
var AWS = require("aws-sdk");
// Main Lambda entry point
exports.handler = async (event) => {
await getUploadURL(event);
var responseBody = {
"status": "success",
"message": "The file was successfully moved"
};
const response = {
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET,DELETE"
},
"body": JSON.stringify(responseBody),
"isBase64Encoded": false
};
return response;
};
const getUploadURL = async function(event) {
console.log("invoking lambda starting");
var s3 = new AWS.S3();
var sourceBucket = "sourcebucket";
var destinationBucket = "destbucket";
var objectKey = event.queryStringParameters.fileName;
console.log("Object Key", objectKey);
//Only execute till here after that no execution log
var copySource = encodeURI(sourceBucket + "/" + objectKey);
var copyParams = {
Bucket: destinationBucket,
CopySource: copySource,
Key: objectKey
};
var deleteParams = {
Bucket: sourceBucket,
Key: objectKey
};
/** var responseBody = {
"status": "success",
"message": "The file was successfully marked as read"
};
var failedResponseBody = {
"status": "Failed",
"message": "The file was not copied"
};**/
await s3.copyObject(copyParams, function (err, data) {
console.log("Starting Copying function");
if (err) {
console.log("error occured during copy", err, err.stack);
} else {
console.log("The copy was successful, response");
}
});
await s3.deleteObject(deleteParams, function (err, data) {
console.log("Deleting the file from S3");
if (err)
console.log(err, err.stack); // error
else
console.log("Deleted the File from S3"); // deleted
});
};
我尝试了另一个带有回调的选项,它正在工作,但 lambda 没有返回正确的响应。文件已移动,但对 API 网关的响应为空。 API 抱怨 502 无效响应
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
console.log("invoking lambda starting")
var s3 = new AWS.S3();
var sourceBucket = "source";
var destinationBucket = "destination";
var objectKey = event.queryStringParameters.fileName
console.log("Object Key", objectKey)
var copySource = encodeURI(sourceBucket + "/" + objectKey);
var copyParams = {
Bucket: destinationBucket,
CopySource: copySource,
Key: objectKey
};
var deleteParams = {
Bucket: sourceBucket,
Key: objectKey
}
var responseBody = {
"status": "success",
"message": "The file was successfully marked as read"
};
var failedResponseBody = {
"status": "Failed",
"message": "The file was not copied"
};
s3.copyObject(copyParams, function (err, data) {
console.log("Starting Copying function");
if (err) {
console.log("error occured during copy", err, err.stack);
} else {
console.log("The copy was successful, response", response);
}
});
s3.deleteObject(deleteParams, function (err, data) {
console.log("Deleting the file from S3");
if (err)
console.log(err, err.stack); // error
else
console.log("Deleted the File from S3"); // deleted
});
const response = {
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET,DELETE"
},
"body": JSON.stringify(responseBody),
"isBase64Encoded": false
};
return callback(response);
};
【问题讨论】:
-
能否正确格式化您的代码?这真的很难阅读和理解,因为你的行的缩进是混淆的。
标签: node.js amazon-web-services aws-lambda aws-api-gateway