用于连接 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 连接

出于开发目的,无法从本地主机连接到 AWS RDS Postgresql

使用 python 从 AWS S3 到 PostgreSQL Amazon RDS 的 CSV 文件