如何在aws lambda中使用node pg?

时间:2018-02-06 23:43:33

标签: node.js amazon-web-services aws-lambda node-postgres

UPDATE / SOLVED ...问题是pgpass插件正在寻找$ HOME / .pgpass,并且$ HOME没有在lambda上定义,导致{{1}失败}。真的不值得为自己提供答案......

我在lambda处理程序中有以下测试代码(从typescript编译):

join(undefined, '.pgpass')

通过环境中的PGHOST PGPORT PGUSER PGDATABASE创建连接。我知道配置是"几乎是正确的"因为我第一次尝试它时得到了:

  

{" errorMessage":"错误:主机没有pg_hba.conf条目\" 10.1.1.249 \",   用户\" foo \",数据库\" bar \",SSL off \ n at   Connection.parseE(/var/task/handler.js:9209:11)   Connection.parseMessage(/var/task/handler.js:9034:19)nn at   插座。 (/var/task/handler.js:8777:22)nn在emitOne   (events.js:96:13)\ n在Socket.emit(events.js:188:7)\ n at   readableAddChunk(_stream_readable.js:176:18)\ n at   TCP.onread中的Socket.Readable.push(_ stream_readable.js:134:10)\ n   (net.js:547:20)"}

这看起来很有希望。我将postgres配置更改为允许来自子网,并再次尝试。但是,现在我得到了:

const db = new Pool()
const {rows} = await db.query('select 1 as x')
console.log('rows', JSON.stringify(rows))

发生了什么事?它似乎已经进入数据库并第一次连接......现在它在2018-02-06 18:14:21.183 (-05:00) 76761ca5-0b93-11e8-8783-a74d098c9f4a select 2018-02-06 18:14:21.202 (-05:00) 76761ca5-0b93-11e8-8783-a74d098c9f4a TypeError: Path must be a string. Received undefined at assertPath (path.js:7:11) at Object.join (path.js:1211:7) at Object.module.exports.getFileName (/var/task/handler.js:32434:16) at module.exports (/var/task/handler.js:32355:23) at Connection.<anonymous> (/var/task/handler.js:31255:9) at emitOne (events.js:96:13) at Connection.emit (events.js:188:7) at Socket.<anonymous> (/var/task/handler.js:8781:12) at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) END RequestId: 76761ca5-0b93-11e8-8783-a74d098c9f4a 上失败了。我应该使用一些选项吗?

1 个答案:

答案 0 :(得分:1)

首先,您没有要求pool.connect从池中获取客户端。

其次,AWS Lambda does not support async functions上的当前Node.js运行时6.10。 (除非您使用Babel直接将代码转换为ES5或使用Babel的其他样板文件(例如es2017-lambda-boilerplate

话虽如此,你必须使用回调或承诺(然后是/ catch)。例如:

memmove(dest, dest + strlen(c) - 1, 1 + strlen(dest + strlen(c)));