我的目標
我試圖用AWS's JDBC Driver允許lambda函數運行節點6.10連接到AWS雅典娜和創建數據庫。 (我也希望能夠創建和查詢該數據庫中的表)。麻煩通過JDBC連接到AWS雅典娜使用節點LAMBDA
我已經試過
我曾嘗試下面的代碼從一個答案,一個similar question:
var JDBC = require('jdbc');
var jinst = require('jdbc/lib/jinst');
if (!jinst.isJvmCreated()) {
jinst.addOption("-Xrs");
jinst.setupClasspath(['./AthenaJDBC41-*.jar']);
}
var config = {
// Required
url: 'jdbc:awsathena://athena.us-east-1.amazonaws.com:443',
// Optional
drivername: 'com.amazonaws.athena.jdbc.AthenaDriver',
minpoolsize: 10,
maxpoolsize: 100,
properties: {
s3_staging_dir: 's3://aws-athena-query-results-*/',
log_path: '/logs/athenajdbc.log',
user: 'access_key',
password: 'secret_key'
}
};
var hsqldb = new JDBC(config);
hsqldb.initialize(function(err) {
if (err) {
console.log(err);
}
});
我看到
的錯誤,當我對我自己的運行這個(Mac OSX El Capitan 10.11.6)中,我看到下面的彈出窗口,其中顯示消息No Java runtime present, requesting install.
已打印到我的控制檯。
當我將代碼部署到Lambda和在它上面運行時,出現以下消息:
Error: /var/task/node_modules/java/build/Release/nodejavabridge_bindings.node: invalid ELF header
在本地運行,我可以看到的東西不能在var hsqldb = new JDBC(config);
行,但在Lambda上運行時,需要JDBC(上面的代碼的第一行)時會立即發生錯誤。
更新
的invalid ELF header
問題似乎指向的想法,node_modules/java/build/Release/nodejavabridge_bindings.node
文件編譯爲與在其AWS LAMBDA運行一個(Linux的x64)的不兼容的架構。
這解釋了在本地運行時與在Lambda上運行時的行爲差異。
我曾嘗試使用node-gyp專門爲x64體系結構編譯資源,並且看到問題更改爲但未解決。
我跑的節點GYP命令成功爲node-gyp configure --arch=x64
(在node_modules/java/
目錄內運行)
而不是invalid ELF header
誤差對LAMBDA運行的時候,我們現在看到一個module initialization error
(見下文日誌)
module initialization error: Error
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/var/task/node_modules/java/lib/nodeJavaBridge.js:21:16)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)