Я пытаюсь получить доступ к файлу в приватной корзине S3 с помощью лямбда-функции, определенной Cognito.
- Чтение потока работает вне лямбды , но не внутри лямбды
- Создание предварительно подписанного URL-адреса работает внутри лямбды
- Ожидание, когда содержимое будет готово, поскольку строка работает внутри лямбды
Мне удалосьчтобы получить предварительно подписанный URL для загрузки файла.Используя те же параметры, я попытался записать поток чтения в локальный файл.Файл создается, но он пуст.Я не смог уловить ни одной ошибки в процессе.
const s3 = new AWS.S3({ apiVersion: 'latest' });
const file = 's3Filename.csv'
const userId = event.requestContext.identity.cognitoIdentityId;
const s3Params = {
Bucket: 'MY_BUCKET',
Key: `private/${userId}/${file}`,
};
var fileStream = require('fs').createWriteStream('/path/to/my/file.csv');
var s3Stream = s3.getObject(s3Params).createReadStream();
// Try to print s3 stream errors
s3Stream
.on('error', function (err) {
console.error(err); // prints nothing
});
// Try to print fs errors
s3Stream
.pipe(fileStream)
.on('error', function (err) {
console.error('File Stream:', err); // prints nothing
})
.on('data', function (chunk) {
console.log(chunk); // prints nothing
})
.on('end', function () {
console.log('All the data in the file has been read'); // prints nothing
})
.on('close', function (err) {
console.log('Stream has been Closed'); // prints nothing
});
Я совершенно уверен, что мои параметры верны, потому что я могу получить предварительно подписанный URL-адрес, который позволяет мне загрузить файл.
console.log(s3.getSignedUrl('getObject', s3Params));
Я также могу прочитать содержимое файла, используя getObject().promise()
.Это может сработать, но я разбираю CSV-файл, и я предпочитаю немного разбираться в памяти и анализировать поток.
try
{
const s3Response = await s3.getObject(s3Params).promise();
let objectData = s3Response.Body.toString('utf-8');
console.log(objectData);
}
catch (ex)
{
console.error(ex);
}
Почему файл, созданный из потока S3, пуст?И почему ничего не печатается?
Может ли это быть проблемой политики доступа?Если это так, почему я не получил ошибку при выполнении?