我有一个问题与S3客户端从aws sdk v3:
如果我按照文档中的说明使用S3Client,并使用环境变量提供的凭据,则会得到错误The AWS Access Key Id you provided does not exist in our records.
起初我以为是因为我没有使用正确的AWS_ACCESS_KEY_ID
,但是在客户端初始化之后添加这一行修复了这个问题,并记录了正确的值:
s3.config.credentials().then(console.log)
最让我烦恼的是,如果我在其他任何地方拨打这条线路(即:在异步函数中),它不能解决这个问题。
- 为什么这个异步函数调用修复了执行的其余部分?
- 它只是临时修复客户端吗?(客户端在多次函数调用时保持示例化状态)
- 承诺是否可以延迟结束:在客户第一次打电话之后
- 为什么在s3调用之前调用它时不起作用(不管有没有
await
)?
下面是我的代码:
const s3Config: S3ClientConfig = {}
s3Config.endpoint = new HttpRequest({...} as Endpoint) // used with a local s3 server
const s3 = new S3Client(s3Config);
// this is the hack
s3.config.credentials().then(console.log)
export const upload = async (...) => {
// here it does not work
// await s3.config.credentials().then(console.log)
const streamUpload = new Upload({client: s3,...})
return await streamUpload.done()
}
export const getTempLink = async (...) => {
// here it does not work
// await s3.config.credentials().then(console.log)
//* Get the pre-signed url
const command = new GetObjectCommand({Bucket,Key})
return await getSignedUrl(s3 as any, command as any, { expiresIn })
}
谢谢你的帮忙!
1条答案
按热度按时间t8e9dugd1#
我也有类似的问题
首先是
aws-sdk
与aws-sdk/client-s3
之间的差异我的问题是,在.env文件中,键的名称如下所示
那不起作用,所以我改变了名字,就像下面和准备去。它采取了凭据。
请记住,AWS具有用于凭据的chain of precedence