如果在Lambda中使用此代码,这符合我在堆栈溢出和AWS文档中看到的所有内容。
但是,它既不返回任何内容,也不抛出错误。代码只是停留在s3.getObject(params).promise()上,因此lambda函数在超时时运行,即使超过30秒。我试图获取的文件实际上是25 is。
知道为什么会这样吗?
var AWS = require('aws-sdk');
var s3 = new AWS.S3({httpOptions: {timeout: 3000}});
async function getObject(bucket, objectKey) {
try {
const params = {
Bucket: bucket,
Key: objectKey
}
console.log("Trying to fetch " + objectKey + " from bucket " + bucket)
const data = await s3.getObject(params).promise()
console.log("Done loading image from S3")
return data.Body.toString('utf-8')
} catch (e) {
console.log("error loading from S3")
throw new Error(`Could not retrieve file from S3: ${e.message}`)
}
}在测试函数时,我会收到以下超时。
START RequestId: 97782eac-019b-4d46-9e1e-3dc36ad87124版本:$LATEST 2019-03-19T07:51:30.225Z 97782eac-019b-4d46-9e1e-9e1e-3 dc36ad87124试图从桶状扎尔日提取RequestId-pimdata-测试209-03-19T07:51:54.979Z97782eac-019b-4d46-9e1e-3 dc36ad87124errorMessage“:”无法从S3检索文件:连接在3000 S3之后超时“,“errorType”:"stackTrace":"getObject (/var/task/index.js:430:15)","","process._tickDomainCallback (内部/进程/next_tick.js:228:7)“} RequestId: 97782eac-019b-4d46-9e1e-3 dc36ad87124报告RequestId: 97782eac-019b-4d46-9e1e-3dc36ad87124持续时间: 24876.90 ms记帐时间: 24900 ms内存大小:24900 MB最大内存: 120 MB
我正在获取的图像实际上是公开的:LI.jpg
发布于 2019-03-18 19:19:05
const data = (await (s3.getObject(params).promise())).Body.toString('utf-8')发布于 2019-09-25 18:02:44
如果您的Lambda函数与VPC相关联,它将失去访问S3所需的internet访问权限。但是,您可以在VPC >终结点设置中创建一个S3端点,而不必手动为您的VPC设置设置Internet,而不必按照预期运行Lambda功能。
https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/
发布于 2019-03-19 07:56:49
AWS的默认超时为120000 ms。如果您的lambda超时时间短于此,您将永远不会收到实际的错误。
要么延长AWS超时
var AWS = require('aws-sdk');
var s3 = new AWS.S3({httpOptions: {timeout: 3000}});或者延长你的灯的超时时间。
https://stackoverflow.com/questions/55228171
复制相似问题