#aws-sdk-js
Вопрос:
У меня есть корзина S3 с открытым доступом для чтения. У меня есть веб-приложение, и в нем я хочу использовать AWS SDK JS для выполнения клиентских вызовов для перечисления объектов в корзине.
У меня нет варианта использования учетных данных, но, похоже, при инициализации клиента требуются учетные данные, так как я продолжаю получать ошибку «Отсутствуют учетные данные в конфигурации».
import S3 from 'aws-sdk/clients/s3';
var s3 = new S3({
apiVersion: '2006-03-01',
});
// the above initialises without error
var params = {
Bucket: 'my_bucket',
Delimiter: '/',
Prefix: "some-path/"
}
// throws Missing credentials in config
s3.listObjects(params, function (err, data) {
if(err)throw err;
console.log(data);
});
Поэтому мои вопросы таковы:
- Требуются ли учетные данные, и если нет, то как моя конфигурация неверна?
- Если требуются учетные данные, как бы я настроил их для вызовов на стороне клиента в общедоступную корзину.
Заранее спасибо,
Ответ №1:
Хорошо, так что, по-видимому, требуются учетные данные. Это кажется мне немного странным при использовании SDK для общедоступных вызовов, которые не требуют аутентификации?
Ответ №2:
Учетные данные определенно требуются, fwiw, вот как я это делаю для простого тестирования:
import { config as env } from 'https://deno.land/x/dotenv/mod.ts' // https://github.com/pietvanzoen/deno-dotenv
import { S3Client, ListObjectsV2Command } from 'https://cdn.skypack.dev/@aws-sdk/client-s3' // https://github.com/aws/aws-sdk-js-v3
const {AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY} = env()
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/modules/credentials.html
const credentials = {
accessKeyId: AWS_ACCESS_KEY_ID,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/s3clientconfig.html
const config = {
region: 'us-east-1',
credentials,
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/s3client.html
const client = new S3Client(config)
export async function list() {
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/interfaces/listobjectsv2commandinput.html
const input = {
Bucket: 'my_bucket'
}
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/command.html
const cmd = new ListObjectsV2Command(input)
// https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/classes/listobjectsv2command.html
return await client.send(cmd)
}