将 aws lambda 连接到 oracle rds 超时

问题描述 投票:0回答:2

我正在尝试使用下面的代码将 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"
amazon-web-services aws-lambda amazon-rds python-3.7
2个回答
0
投票

应该是网络端问题检查您的安全组,请检查安全组入站规则并允许从 lambda function sg 到 oracle 数据库 sg 的流量。检查一下这将解决这个问题


0
投票

我最近遇到了这个问题,在我的例子中,默认附加到 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 连接

© www.soinside.com 2019 - 2024. All rights reserved.