Следующий код хорошо работает в локальном NodeJS процессе windows. Тем не менее, он не работает в AWS лямбда.
Я не совсем понимаю, почему он не может загрузить модуль: Не удается найти модуль './data/packed/latest.json'
Ввод лямбда-события:
{
"Service": "snowflake",
"Profile": "testetl",
"Interval": 10,
"Content": "select * from mytable limit 20",
"Data": null
}
Учетные данные предоставляются в переменной среды: testetl: {account: '[my-account]', accessUrl: ' https:. // [мой-счет] [мой регион] .snowflakecomputing.com 'имя пользователя: "[мой-имя пользователя], пароль: '[мой-пароль]', склад:' [my- хранилище данных] ', база данных:' [my-db] ', jsTreatIntegerAsBigInt: true}
function connectSnowflake(connection) {
return new Promise((resolve, reject) => {
connection.connect((err, conn) => {
if (err)
reject(err);
else
resolve(conn);
});
});
}
function executeSnowflake(connection, sqlText) {
return new Promise((resolve, reject) => {
connection.execute({
sqlText: sqlText,
streamResult: true,
complete: (err, stmt, rows) => {
if (err)
reject(err);
else
resolve(stmt);
}
});
});
}
function readSnowflakeRows(statement, start, end) {
return new Promise((resolve, reject) => {
let rows = [];
statement
.streamRows({ start: start, end: end })
.on('error', (err) => {
throw err;
})
.on('data', (row) => {
for (let key in row) {
rows.push(row[key]);
break;
}
})
.on('end', () => resolve(rows));
});
}
const snowflake = require('snowflake-sdk');
exports.handler = async (event) => {
const connection = snowflake.createConnection(eval(`(${process.env[event.Profile]})`));
let connectionInstance = await connectSnowflake(connection);
let id = connectionInstance.getId();
let statement = await executeSnowflake(connection, event.Content);
let rowsCount = statement.getNumRows();
let maxRows = Math.min(1000, rowsCount);
event.Values = await readSnowflakeRows(statement, 0, maxRows);
return event;
};
Сведения об ошибке:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module './data/packed/latest.json'\nRequire stack:\n- /var/task/node_modules/moment-timezone/index.js\n- /var/task/node_modules/snowflake-sdk/lib/connection/result/sf_timestamp.js\n- /var/task/node_modules/snowflake-sdk/lib/connection/result/column.js\n- /var/task/node_modules/snowflake-sdk/lib/connection/result/result.js\n- /var/task/node_modules/snowflake-sdk/lib/connection/statement.js\n- /var/task/node_modules/snowflake-sdk/lib/connection/connection.js\n- /var/task/node_modules/snowflake-sdk/lib/core.js\n- /var/task/node_modules/snowflake-sdk/lib/snowflake.js\n- /var/task/node_modules/snowflake-sdk/index.js\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module './data/packed/latest.json'",
"Require stack:",
"- /var/task/node_modules/moment-timezone/index.js",
"- /var/task/node_modules/snowflake-sdk/lib/connection/result/sf_timestamp.js",
"- /var/task/node_modules/snowflake-sdk/lib/connection/result/column.js",
"- /var/task/node_modules/snowflake-sdk/lib/connection/result/result.js",
"- /var/task/node_modules/snowflake-sdk/lib/connection/statement.js",
"- /var/task/node_modules/snowflake-sdk/lib/connection/connection.js",
"- /var/task/node_modules/snowflake-sdk/lib/core.js",
"- /var/task/node_modules/snowflake-sdk/lib/snowflake.js",
"- /var/task/node_modules/snowflake-sdk/index.js",
"- /var/task/index.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:955:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)",
" at Module.load (internal/modules/cjs/loader.js:811:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:723:14)",
" at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)",
" at internal/main/run_main_module.js:17:11"
]
}
Пакет. json Файл :
{
"name": "snowflakeclient",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"build": "tsc"
},
"dependencies": {
"snowflake-sdk": "^1.5.0"
},
}