AWS Lambda - не удается получить доступ к файлу JS, связанному в Layer (Node.js)
Я создал лямбда-функцию на node.js и прикрепил к ней слой. Но когда я выполняю свою лямбда-функцию, она не читает JS, встроенную в слой. Пожалуйста, дайте мне знать, если я здесь ошибаюсь.
Следуя этому посту, создал слой "my-utility" и загрузил nodejs.zip.
Консоль AWS> Лямбда> Слои> Создать слой
Структура слоя
my-utility
- nodejs
- node_modules
- myutil.js
- package.json
- package-lock.json
- nodejs.zip
myutil.js
function myFun(name) {
console.log("Hello.. " + name);
}
Лямбда-код (Node.js 10.x)
const myutil = require('/opt/nodejs/myutil.js');
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
console.log('Layer Code :', myutil);
return response;
};
После тестирования выше лямбда, это дает следующий результат:
Response:
{
"statusCode": 200,
"body": "\"Hello from Lambda!\""
}
Request ID:
"5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0"
Function Logs:
START RequestId: 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0 Version: $LATEST
2019-06-18T18:35:35.125Z 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0 INFO Layer Code : {}
END RequestId: 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0
REPORT RequestId: 5dbfd4ab-04d2-47eb-89dd-c9c6a650cbb0 Duration: 133.56 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 26 MB
Если вы заметили, когда я пытаюсь напечатать константу 'myutil', она печатается как пустая. Это означает, что код слоя не внедряется во время лямбда-выполнения.
Код уровня INFO: {}
1 ответ
Если вы пытаетесь получить доступ к статическим файлам внутри слоя Lambda без использования сервера, убедитесь, что они упаковываются, загрузив.zip слоя из раздела AWS Layers, и если они там есть, вы можете вывести содержимое /opt
папку в журнал CloudWatch, чтобы убедиться, что ваши файлы там.
console.log('/opt/');
fs.readdirSync('/opt/').forEach(file => {
console.log(file);
});
Я обратился в службу поддержки AWS и решил эту проблему. Я должен кодировать функцию, как показано ниже в myutil.js. Эта ссылка также помогла.
module.exports = {
myFun:function (name) {
console.log("Hello.. " + name);
return 'narendra';
}
};
Я мог видеть лямбда-функцию js из слоя и правильно выводить возвращаемое значение.
Журналы лямбда-функции
START RequestId: 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf Version: $LATEST
2019-06-18T21:28:06.505Z 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf INFO Hello.. narendra
2019-06-18T21:28:06.505Z 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf INFO Layer Code : narendra
END RequestId: 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf
REPORT RequestId: 39bfa864-9a31-4c0c-b9d3-ce7c2b3d1aaf Duration: 85.38 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 26 MB