我正在嘗試開發一個 AWS Lambda 作為我的應用程式和同樣托管在 AWS 上的 RDS MSSQL 資料庫之間的中間點。當我從 PyCharm 運行以下代碼時,我從我的資料庫中獲得了正確的資料。
import pyodbc
server = 'RDSDB endpoint port'
database = 'vanim8'
username = 'RDSDB username'
password = 'RDSDB password'
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' server ';DATABASE=' database ';UID=' username ';PWD=' password)
cursor = conn.cursor()
cursor.execute("SELECT * FROM login")
row = cursor.fetchone()
while row:
print(row[2])
row = cursor.fetchone()
但是當我使用相同的代碼從 AWS CLI 運行呼叫 lambda 時,它回傳
[ODBC Driver 17 for SQL Server]Login timeout expired
我無法弄清楚它會是什么,我認為這與安全性有關,可能會拒絕來自 lambda 的入站流量,而不是來自我的 IP,但我不確定我是云計算的新手
uj5u.com熱心網友回復:
我發現我的 RDS 資料庫使用的安全組允許來自我的 IP 地址的流量,但不允許導致錯誤的 VPC 的 IP
uj5u.com熱心網友回復:
請記住,默認情況下 lambda 是一項公共服務,這意味著任何名稱決議和路由都將通過公共路徑進行。如果您的資料庫位于私有 VPC 中,您將需要一個 VPC 終端節點將 lambda 函式與私有 VPC 聯系起來,并且您還需要考慮該 VPC 的 DNS 決議。一旦 VPC 終端節點就位,您就可以將 lambda 函式系結到特定的 VPC,它會在內部進行路由。
如果您的資料庫可公開訪問,那么您只需要確認您的入站安全組和 ACL 允許來自 lambda IP 范圍的流量。
在任何一種情況下,您都需要將名稱決議和網路可達性視為罪魁禍首,網路可達性(安全組、ACL 和路由)最有可能基于您遇到的錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/366948.html
上一篇:SQLServer:從結果集ID生成WHERE子句?
下一篇:SQL查詢GROUPBY組
