s3.getObject().promise() 从不返回任何东西

Val*_*ale 4 amazon-s3 amazon-web-services node.js promise

如果在符合我在 stackoverflow 和 AWS SDK 文档中阅读的所有内容的 Lambda 中使用此代码。

但是,它既不返回任何内容也不抛出错误。代码只是停留在 s3.getObject(params).promise() 上,因此 lambda 函数会超时运行,即使超过 30 秒。我尝试获取的文件实际上是 25kb。

知道为什么会这样吗?

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}`)
        }
    }
Run Code Online (Sandbox Code Playgroud)

测试该功能时,我收到以下超时。

START请求ID:97782eac-019B-4d46-9e1e-3dc36ad87124版本:$最新2019-03-19T07:51:30.225Z 97782eac-019B-4d46-9e1e-3dc36ad87124试图从桶中取出ZARGES公共图像/低/ ZARGES_41137_PROD_TECH_ST_LI.jpg -pimdata-test 2019-03-19T07:51:54.979Z 97782eac-019b-4d46-9e1e-3dc36ad87124 从 S3 加载错误 2019-03-19T07:51:54.97812e37c7d-eac-2019-03-19T07:51:54.9716e37d-eac-edc36e-e-c36e-adc-36d-edc36ad87124 :"无法从 S3 检索文件:3000 毫秒后连接超时","errorType":"错误","stackTrace":["getObject (/var/task/index.js:430:15)","", "process._tickDomainCallback (internal/process/next_tick.js:228:7)"]} END RequestId: 97782eac-019b-4d46-9e1e-3dc36ad87124 REPORT RequestId: 97782eac-019b-4d46-126de7d46-94d90 毫秒计费持续时间:24900 毫秒内存大小:512 MB 已用最大内存:120 MB

我获取的图像实际上是公开的:https : //s3.eu-central-1.amazonaws.com/zarges-pimdata-test/public-images/low/ZARGES_41137_PROD_TECH_ST_LI.jpg

Tha*_*ssi 11

如果您不想像@tuulka 建议的那样在访问正文之前将其提取到变量中,只需将其包装在括号中。

const data = (await (s3.getObject(params).promise())).Body.toString('utf-8')
Run Code Online (Sandbox Code Playgroud)

  • 每个人都应该知道,经过几个小时的尝试解决这个问题后,这个解决方案对我来说是有效的。太感谢了。 (2认同)

ttu*_*lka 2

这个问题肯定与连接有关。

检查您的 VPC 设置,因为它可能会阻止 Lambda 与 Internet 的连接(AWS 托管服务作为 S3 只能通过 Internet 访问)。