Я не могу понять это. Любая помощь приветствуется.
У меня есть лямбда, которая в основном копирует HTML файлы из одного блока S3 в другой блок S3, включая некоторые "magi c" (повторное использование частей других файлов HTML).
У меня было это и работает внутри узлов. js 10
exports.handler = async (event, context, callback) => { }
с обратными вызовами. Переключение на node.js 12 с
exports.handler = async (event) => { }
Мне пришлось переключаться с обратных вызовов на обещания.
Полученный код работает в 60% случаев.
exports.handler = async (event) => {
for (var record of event.Records) {
if(record.s3.object.key.indexOf(".") != -1){
if (record.s3.object.key.localeCompare("website/") != 0) {
const objectCopied = await s3.putObject( { Body: (await generateHTML( (await s3.getObject({ Bucket: record.s3.bucket.name, Key: record.s3.object.key }).promise()).Body.toString('utf-8'), record.s3.bucket.name )), Bucket: DestBucket, Key: record.s3.object.key.slice("website/".length), ACL: 'public-read', ContentType: 'text/html'}).promise();
}
}
}
return 0;
};
В остальных 40% я получаю эту ошибку:
Response:
{
"errorType": "TypeError",
"errorMessage": "Cannot read property 'push' of undefined",
"trace": [
"TypeError: Cannot read property 'push' of undefined",
" at Request.HTTP_DATA (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:389:35)",
" at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)",
" at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)",
" at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
" at IncomingMessage.onReadable (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:289:32)",
" at IncomingMessage.emit (events.js:311:20)",
" at IncomingMessage.EventEmitter.emit (domain.js:482:12)",
" at emitReadable_ (_stream_readable.js:562:12)",
" at onEofChunk (_stream_readable.js:540:5)",
" at readableAddChunk (_stream_readable.js:242:5)"
]
}
Понятия не имею, что я здесь не так делаю. Пожалуйста, помогите!
Еще одно предложение о «почему»: мое исследование подняло вопрос о том, что у AWS были проблемы с цепочками обещаний, но в предложенном мной решении было использование обратных вызовов. Насколько я знаю, это не вариант с nodejs 12, плюс в коде это выглядит ужасно.