我正在尝试使用下面的代码将 lambda 函数连接到 oracle rds,但超时。 我的 lambda 函数与 rds 位于同一 vpc 中,并且还附加了与 rds 相同的安全组,我还允许在 sg 中使用 vpc cide。我创建了一个 ec2 实例来下载 oracle 库和客户端,将它们压缩并放入 s3 中,然后为该函数创建 lambda 层。有人可以让我知道我错过了什么吗? Cloudwatch 日志也只显示超时,没有其他内容。如果我在主机中添加任何其他内容,例如任何其他随机名称,它会给我一个不同的错误“ORA-12545:连接失败,因为目标主机或对象不存在”。我目前正在使用 oracle rds dns 名称,该名称显示在 rds 屏幕中
import json
import boto3
import os
import cx_Oracle
def lambda_handler(event, context):
port = os.getenv('1521') # 1521
sid = os.getenv('SID') # ORCL
db_user = os.getenv('admin') # <user-id>
db_password = os.getenv('password') # <password
dsnStr = cx_Oracle.makedsn("host", "1521", "SID")
conn = cx_Oracle.connect(user = db_user, password = db_password, dsn = dsnStr, encoding =
'UTF-8')
c = conn.cursor()
return "Connection established with Oracle database"
应该是网络端问题检查您的安全组,请检查安全组入站规则并允许从 lambda function sg 到 oracle 数据库 sg 的流量。检查一下这将解决这个问题
我最近遇到了这个问题,在我的例子中,默认附加到 lambda 的安全组(称为 (lambda-rds-1))需要额外的出站规则。
默认情况下,它指向 RDS Oracle SG,这似乎足够,但显然还不够。我发现需要添加出站规则:
Type: All traffic
Destination: Anywhere-IPv4
有趣的是添加:
Type: Oracle-RDS
Destination: Anywhere-IPv4
or
Type: All TCP
Destination: Anywhere-IPv4
-> is still not enough
老实说不明白,但分享它解决了我的超时问题。我从 RDS 配置了 lambda -> 设置 Lambda 连接