gpt4 book ai didi

postgresql - 带有 Knex JS 和 RDS Postgres 的 AWS Lambda

转载 作者:行者123 更新时间:2023-11-29 11:49:13 26 4
gpt4 key购买 nike

我一直在做一些研究,但我找不到关于在 Lambda 函数中使用 Knex JS 的好的答案:

How do I use Knex with AWS Lambda? #1875

Serverless URL Shortener with Apex and AWS Lambda

Use Promise.all() in AWS lambda

这是我的 index.js 中的内容:

const knex = require('knex')({
client: 'pg',
connection: {...},
});

exports.handler = (event, context, callback) => {
console.log('event received: ', event);
console.log('knex connection: ', knex);

knex('goals')
.then((goals) => {
console.log('received goals: ', goals);
knex.client.destroy();
return callback(null, goals);
})
.catch((err) => {
console.log('error occurred: ', err);
knex.client.destroy();
return callback(err);
});
};

我能够在本地连接并正常执行我的代码,但是当它部署到 AWS 时我遇到了一个有趣的错误 - 第一次调用总是成功,但之后的任何事情都失败了。我认为这与 knex 客户端被销毁有关,但随后又试图在下一次调用时再次使用。如果我重新上传我的 index.js,它会返回工作一次调用,然后失败。

我相信这可以使用 promises 以某种方式解决,但这是我第一次使用 Lambda,所以我不熟悉它如何在后续调用中管理与 RDS 的连接。提前感谢您的任何建议!

最佳答案

对我来说,它可以在我的本地机器上运行,但在部署后就不行了。我有点被误导了。

事实证明,RDS 入站源未对我的 Lambda 函数开放。在 AWS Lambda can't connect to RDS instance, but I can locally? 找到解决方案: 将 RDS 入站源更改为 0.0.0.0/0 或使用 VPC。

更新 RDS 入站源后,我可以成功地将 Lambda 与 Knex 一起使用。

我使用的 Lambda 运行时是 Node.js 8.10 和包:

knex: 0.17.0
pg: 7.11.0

下面使用异步的代码也对我有用

const Knex = require('knex');

const pg = Knex({ ... });

module.exports.submitForm = async (event) => {
const {
fields,
} = event['body-json'] || {};

return pg('surveys')
.insert(fields)
.then(() => {
return {
status: 200
};
})
.catch(err => {
return {
status: 500
};
});
};

希望它能帮助将来可能遇到同样问题的人。

关于postgresql - 带有 Knex JS 和 RDS Postgres 的 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com