已配置区域仍报错:生成S3预签名URL提示需设置区域
问题排查与解决
你的问题核心是调用getSignedUrl时用错了客户端实例:
你在函数里初始化了配置好区域的S3Client实例s3,但生成预签名URL时,传入的是函数参数里的client——这个外部传入的client并没有配置S3所需的区域,才触发了报错。
修复方法
直接把getSignedUrl调用中的client替换为你创建的s3实例,如果这个外部client参数没有其他用途,也可以直接移除:
async function generateFileReturn(fileName, fileKey) { console.log('generateFileReturn: process.env.AWS_REGION: ', process.env.AWS_REGION); const s3 = new S3Client({ region: process.env.AWS_REGION, }); const getKeyPromise = getSignedUrl(s3, new GetObjectCommand({ Bucket: `eva-documentation`, Key: fileKey, }), { expiresIn: 3600 }); const deleteKeyPromise = getSignedUrl(s3, new DeleteCommand({ Bucket: `eva-documentation`, Key: fileKey, }), { expiresIn: 3600 }); return { label: fileName, awsGetUrl: await getKeyPromise, awsDeleteUrl: await deleteKeyPromise, }; }
额外验证点
- 确认S3桶
eva-documentation的实际区域和process.env.AWS_REGION的值一致,跨区域调用也可能引发类似错误提示 - 检查Lambda执行角色是否拥有
s3:GetObject和s3:DeleteObject权限,部分权限问题可能会伪装成区域配置错误
内容的提问来源于stack exchange,提问作者Tyler Findlay
相关产品推荐
相关产品推荐

