Как настроить учетные данные AWS -SDK в NextJS - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно загрузить несколько файлов в S3 из приложения Next Js. Поскольку это серверная часть, у меня сложилось впечатление, что установка переменных среды должна работать, но это не так. Я знаю, что есть другие альтернативы, такие как назначение роли для 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

Если я жестко закодирую учетные данные в коде, все будет нормально.

Как я могу заставить его работать правильно?

1 Ответ

0 голосов
/ 04 августа 2020

Если я не ошибаюсь, вы хотите также превратить AWS_ACCESS_KEY_ID в переменную времени выполнения. В настоящее время это переменная времени сборки, которая не будет доступна в вашем приложении узла.

// replace this 
env: {
    //..others
    AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID
  },

// with this
module.exports = {
  serverRuntimeConfig: {
    //..others
    AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID
  }
}

Ссылка: https://nextjs.org/docs/api-reference/next.config.js/environment-variables

...