簡體   English   中英

無法通過 Lambda 連接到 VPC 中的公共 RDS

[英]Unable to connect to Public RDS in VPC via Lambda

圍繞這個有幾個問題,但似乎沒有一個能解決我的具體問題。

因此,我在具有兩個安全組的 VPC 中有一個可公開訪問的 RDS 實例:一個是 VPC 的默認 SG,另一個是允許來自我們的開發人員機器的傳入連接。 由於第二個安全組,我能夠通過我的開發人員機器(個人筆記本電腦/PC)成功連接到此 RDS。

現在,當我嘗試通過在同一 VPC 中運行的 Lambda 連接到此 RDS 時,它失敗並出現以下錯誤:“java.net.UnknownHostException: ****.rds.amazonaws.com: Name or service not known”

我的 lambda 將在與 RDS 相同的 VPC 中啟動,我已為 lambda 選擇了所有 RDS VPC 子網。 它還綁定到默認 VPC 安全組。

以下是我的理解(顯然不正確,因為連接不起作用),我在這里缺少什么?

與 lambda 關聯的 Default VPC SG(安全組)的出站規則設置為 0.0.0.0/0,因此它應該允許 lambda 訪問整個世界; 所以至少應該可以訪問 VPC 中的 RDS。

相同的默認 VPC SG 應該允許 RDS 接受來自 SG 子網中任何 ip 的傳入連接(入站規則提到 SG/默認); 因此 lambda 應該能夠訪問它。

該錯誤消息表明它無法解析 RDS 數據庫的 DNS 名稱( Name or service not known )。

我懷疑這是因為 RDS 實例已配置為可公開訪問,這為其提供了公共DNS 名稱和 IP 地址。

連接到 VPC 的 AWS Lambda function 將通過 VPC 發送所有網絡流量。 除非 VPC 中有 NAT 並且 Lambda function 連接到私有子網,否則它無法訪問 Internet。 因此,來自 Lambda function 的連接嘗試可能試圖解析公共 DNS 名稱,但沒有這樣做。

這可以通過將 RDS 實例更改為Publicly Available = No來解決。 This not only makes it safer, but it means that the DNS Name will resolve to a Private IP address, which should work correctly with a Lambda function connected to the VPC.

或者,您可以將 Lambda function 配置為連接到 VPC。 這使它可以訪問 Internet,因此它將像 Internet 上的任何其他計算機一樣連接到 RDS 數據庫。

所以問題是,在我的開發人員機器中,我使用的是數據庫實例端點,但在 lambda 中,我使用的是集群端點。 它們看起來很相似,因此我無法更早地抓住它。 在修復 lambda 以使用實例端點時,lambda 和開發人員機器都可以成功連接到 RDS。

但是,我現在很好奇為什么集群 url 無法訪問,但我會為此創建另一個問題。

暫無
暫無

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

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