用于连接 Postgresql 数据库的 AWS Lambda 函数
Posted
技术标签:
【中文标题】用于连接 Postgresql 数据库的 AWS Lambda 函数【英文标题】:AWS Lambda function to connect to a Postgresql database 【发布时间】:2017-11-26 13:46:37 【问题描述】:有谁知道我如何通过 AWS Lambda 函数连接到 PostgreSQL 数据库。我在网上搜索了它,但我找不到任何关于它的信息。如果你能告诉我该怎么做就太好了。
如果您发现我的代码 (node.js) 有问题,那会很好,否则您能告诉我该怎么做吗?
exports.handler = (event, context, callback) =>
"use strict"
const pg = require('pg');
const connectionStr =
"postgres://username:password@host:port/db_name";
var client = new pg.Client(connectionStr);
client.connect(function(err)
if(err)
callback(err)
callback(null, 'Connection established');
);
context.callbackWaitsForEmptyEventLoop = false;
;
代码抛出错误: 找不到模块“pg”
我直接在 AWS Lambda 上编写了它,如果有什么不同,我没有上传任何东西。
【问题讨论】:
请分享您采用的最终解决方案。您是否必须要求 'pg' 并在每个 lambda 函数中连接?这是最好的方法吗? 【参考方案1】:我直接在 AWS Lambda 上编写了它,如果有什么不同,我没有上传任何东西。
是的,这很重要! Lambda 不提供开箱即用的 3rd 方库。一旦您依赖第三方库,您就需要手动或使用 API 压缩和上传您的 Lambda 代码。
更多信息:Lambda Execution Environment and Available Libraries
【讨论】:
【参考方案2】:您需要参考Creating a Deployment Package (Node.js)
简单场景 – 如果您的自定义代码只需要 AWS 开发工具包库,那么您可以使用 AWS Lambda 控制台中的内联编辑器。使用控制台,您可以编辑代码并将其上传到 AWS Lambda。控制台会将包含相关配置信息的代码压缩到 Lambda 服务可以运行的部署包中。
和
高级场景 – 如果您正在编写使用其他资源的代码,例如用于图像处理的图形库,或者您想使用 AWS CLI 而不是控制台,您需要先创建Lambda 函数部署包,然后使用控制台或 CLI 上传包。
像我这样的情况属于高级方案。所以我们需要创建一个部署包,然后上传。这就是我所做的 -
-
mkdir 部署
cd 部署
vi index.js
在此文件中写入您的 lambda 代码。确保您的处理程序名称是 index.handler 在创建时。
npm install pg
您应该会看到在部署目录中创建的 node_modules 目录,其中包含多个模块
将部署目录打包成 zip 文件并上传到 Lambda。
那你应该很好
注意:npm install 会将节点模块安装在 node_modules 目录下的同一目录中,除非它在父目录中看到 node_module 目录。同样,首先执行npm init
,然后执行npm install
,以确保模块安装在同一目录中以进行部署。
【讨论】:
所以在每个exports.handler函数中我们需要导入pg然后连接数据库?这是正确的做法吗?以上是关于用于连接 Postgresql 数据库的 AWS Lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章
AWS EMR Airflow:Postgresql 连接器
AWS ECS 上的 PostgreSQL:psycopg2.OperationalError 无效端口号 5432
将Rstudio与PostgreSQL在AWS EC2中连接
AWS ElasticBeanstalk EC2 到 RDS postgresql 连接