gpt4 book ai didi

amazon-web-services - 如何在 NextJS 中设置 AWS-SDK 凭证

转载 作者:行者123 更新时间:2023-12-03 08:38:31 25 4
gpt4 key购买 nike

我需要从 NextJs 应用程序将一些文件上传到 S3。由于它是服务器端,我的印象是简单地设置环境变量应该可以工作,但事实并非如此。我知道还有其他选择,例如向 EC2 分配角色,但我想使用 accessKeyID 和 SecretKey。

这是我的next.config.js

module.exports = {
env: {
//..others
AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID
},
serverRuntimeConfig: {
//..others
AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY
}
}

这是我的config/index.js

export default {
//...others
awsClientID: process.env. AWS_ACCESS_KEY_ID,
awsClientSecret: process.env.AWS_SECRET_ACCESS_KEY
}

这就是我在代码中使用的方式:

import AWS from 'aws-sdk'
import config from '../config'

AWS.config.update({
accessKeyId: config.awsClientID,
secretAccessKey: config.awsClientSecret,
});

const S3 = new AWS.S3()

const params = {
Bucket: "bucketName",
Key: "some key",
Body: fileObject,
ContentType: fileObject.type,
ACL: 'public-read'
}

await S3.upload(params).promise()

我收到此错误:未处理的拒绝(CredentialsError):配置中缺少凭证,如果使用 AWS_CONFIG_FILE,请设置 AWS_SDK_LOAD_CONFIG=1

如果我在代码中硬编码凭据,它就可以正常工作。

怎样才能让它正常工作?

最佳答案

看起来 Vercel 文档目前已过时(AWS SDK V2 而不是 V3)。您可以在实例化凭证对象时将其传递给 AWS 服务。例如,通过添加应用程序的名称来使用未保留的环境变量。

.env.local

YOUR_APP_AWS_ACCESS_KEY_ID=[your key]
YOUR_APP_AWS_SECRET_ACCESS_KEY=[your secret]

将这些环境变量添加到您的 Vercel 部署设置(或 Netlify 等)中,并在启动 AWS 服务客户端时将它们传入。

import { S3Client } from '@aws-sdk/client-s3'

...

const s3 = new S3Client({
region: 'us-east-1',
credentials: {
accessKeyId: process.env.TRENDZY_AWS_ACCESS_KEY_ID ?? '',
secretAccessKey: process.env.TRENDZY_AWS_SECRET_ACCESS_KEY ?? '',
},
})

(注意:未定义的检查,以便 Typescript 保持满意)

关于amazon-web-services - 如何在 NextJS 中设置 AWS-SDK 凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63247216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com