![](/img/trans.png)
[英]unable to connect to AWS RDS instance in default VPC from AWS Lambda
[英]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.