大家好 AWS 貢獻者,我目前正在開展一個專案,以建立一個將 Lambda 函式連接到我們在 RDS 上托管的 PostgreSQL 資料庫的示例。我在本地測驗了我的 Python SQL 代碼(在 VS 代碼和 DBeaver 中),它只包含基本憑據(主機、資料庫名、用戶名密碼)就可以很好地作業。但是,當我將代碼粘貼到 Lambda 函式中時,它給了我各種錯誤。我按照這個模板修改了我的代碼,改為從秘密管理器中檢索憑據。
我目前正在使用 boto3、psycopg2 和 secret manager 來獲取憑據并連接到資料庫。
我得到的錯誤串列-
- 服務器意外關閉了連接。這可能意味著服務器在處理請求之前或期間例外終止
- 無法連接到服務器:連接超時。服務器是否在主機“db endpoint”上運行并接受埠 5432 上的 TCP/IP 連接?
- 致命:主機“ip:xxx”、用戶“userXXX”、資料庫“dbXXX”沒有 pg_hba.conf 條目,SSL 關閉
我嘗試過的事情 -
- RDS 和 Lambda 在同一個 VPC、同一個子網、同一個安全組。
- IP 地址包含在入站規則中
- Lambda 函式設定為最多運行 15 分鐘,并且它總是在達到 15 分鐘之前停止
- 我嘗試了資料庫端點和資料庫代理端點,但都不起作用。
對我來說,當我在本地運行代碼時,我只需要提供主機、資料庫名、用戶名和密碼,僅此而已,我就可以撰寫我想要的所有查詢和功能。但是當我將代碼放入 lambda 函式時,它需要所有這些秘密管理器、VPC 安全組、SSL、代理、TCP/IP 規則等。有人可以解釋為什么在本地運行它和在 lambda 上運行它之間存在要求差異嗎?
最后,有人知道我的設定有什么問題嗎?我很高興提供與此相關的任何資訊,任何一般的研究方向都會非常有幫助。謝謝!
uj5u.com熱心網友回復:
按照以下鏈接中的說明構建特定的 psycopg2 包,并驗證 VPC 子網和安全組是否已正確配置,為我解決了這個問題。
我使用 psycopg2 v2.9.3 為 PostgreSQL 10.20 構建了一個包,用于在 Amazon Linux 2 AMI 實體上運行的 Python 3.7.10。我必須做的唯一更改是在壓縮它之前將 psycopg2 目錄放在 python 目錄中(即“python/psycopg2/”)——在import psycopg2我這樣做之前,Lambda 函式中的陳述句失敗了。
- https://kalyanv.com/2019/06/10/using-postgresql-with-python-on-aws-lambda.html
這是我正在使用的 VPC 場景。Lambda 函式在公共子網和關聯的安全組內執行。專用子網安全組的入站規則僅允許公共子網安全組到 5432 的 TCP 連接。
- https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.Scenarios.html#USER_VPC.Scenario1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446064.html
標籤:Python PostgreSQL 亚马逊网络服务 aws-lambda 亚马逊-rds
上一篇:請求不更新行但回傳成功
下一篇:郵遞員。插入多個不存在的行
