簡體   English   中英

無法從 lambda Nodejs 連接到 EC2 Postgres DB

[英]Cannot connect to EC2 Postgres DB from lambda Nodejs

我無法從我的 lambda 函數連接到 EC2 Postgres DB

我在 S3 createAll 事件之后創建了一個 lambda 函數,在這個 lambda 函數中,我需要更新我的數據庫中的數據。 我所做的是在本地測試了數據庫連接。 它工作正常。 但是,在我發布到 lambda 之后,client.connect 函數中的每個 console.log 都不會被觸發。 我認為這會是我 lambda 角色的許可,所以我給了這個角色管理員權限。 此外,在 EC2 規則中,我將傳入流量向所有人開放。 也傳出給所有人。 1. EC2 是 ubuntu,Postgres 是 DB 2. 用於 Lambda 函數的 Nodejs

const { Client } = require('pg');
exports.handler = async (event,context,callback) => {
context.callbackWaitsForEmptyEventLoop = true;
var client = new Client({
    host:'example.com',
    port:5432,
    user:'postgres',
    password:'examplepassword',
    database:'db'
});
console.log('start connecting db : log client');
client.connect().then(() => {
    console.log('DB is connected');
    const text1 = 'SELECT * FROM unime.lecture_content';
    const text = 'INSERT INTO uni.institute_type(name) VALUES($1) 
RETURNING *';
    const values = ['Test Data 2'];
    callback('DB Connected')
}).catch(e => {console.error('connection error', e.stack)
  callback('DB failure',e.stack)
 })
 };

我的 Package.json

  {
 "name": "node_postgres",
 "version": "1.0.0",
 "description": "node postgres api",
 "main": "index.js",
 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "deploy": " — zip-file fileb://Lambda-Deployment.zip",
    "predeploy": "zip -r Lambda-Deployment.zip * -x *.zip *.log"
 },
 "keywords": [
    "postgres"
 ],
 "author": "JUNXILI",
 "license": "ISC",
 "dependencies": {
     "pg": "^7.0.3"
 }
}

在此處輸入圖片說明

我想在 client.connect 函數中顯示所有日志。 請幫助我謝謝

您的問題可能出在 EC2 安全組上,因為您發現可以從本地計算機進行連接,但不能從 Lambda 函數進行連接。 安全組使用 IP 和端口白名單來確定是否允許連接。 首次設置 EC2 實例時,其默認安全組通常只允許簡單的流量,如 HTTP/HTTPS。 它不會為 PostgreSQL 打開端口 (5432)。 此外,必須允許來自任何 IP 的這些連接,因為 Lambda 函數支持實例的 IP 因調用而異。

如果是這種情況,我的解決方案是:

  • 更改 EC2 實例的安全組以允許來自任何 IP 的 PostgreSQL 端口 (5432) 連接。
  • 確保您在 EC2 實例上的 PostgreSQL 配置僅允許安全連接(使用密碼和最好還有證書建立的連接)。 它將是公開的,因此它必須是安全的。

您也可以考慮使用 VPC 來提高安全性。 請參閱https://docs.aws.amazon.com/lambda/latest/dg/vpc.html

另請注意,如果您使用 VPC 路線:

AWS Lambda 使用此信息來設置彈性網絡接口 (ENI),使您的函數能夠安全地連接到私有 VPC 中的其他資源。

使用 ENI 可能會導致您的 Lambda 具有更長的冷啟動時間,直到 AWS 解決 ENI 配置時間的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM