postgresql - 尝试访问 Amazon RDS 数据库实例时来自 Lambda 的超时错误
问题描述
我正在编写一个 Python 应用程序以作为 lambda 函数运行,并希望连接到 RDS 数据库实例而不使其可公开访问。
RDS 数据库实例已在安全组“sg-abcd”的默认 VPC 下创建。
所以我有:
- 在相同的默认 VPC 下创建了一个 lambda 函数
- 创建具有以下权限 AWSLambdaVPCAccessExecutionRole 的角色并将其分配给 lambda 函数,如https://docs.aws.amazon.com/lambda/latest/dg/services-rds-tutorial.html
- 将 sg-abcd 设置为 lambda 函数的安全组
- 在安全组的入站规则中添加 sg-abcd 作为源
- 在安全组的入站规则中添加了 lambda 函数子网的 CIDR 范围作为源
但是,当我调用 lambda 函数时,它会超时。
我可以从我的笔记本电脑连接到 RDS 数据库(在 sg 的入站规则中将我的 IP 设置为源之后),所以我现在知道这不是身份验证问题。此外,对于 RDS DB,“可公开访问”设置为“是”。
这是应用程序代码的一部分(我尝试连接的地方):
rds_host = "xxx.rds.amazonaws.com"
port = xxxx
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = psycopg2.connect(host=rds_host, database=db_name, user=name, password=password, connect_timeout=20)
except psycopg2.Error as e:
logger.error("ERROR: Unexpected error: Could not connect to PostgreSQL instance.")
logger.error(e)
sys.exit()
我真的无法理解我错过了什么。欢迎任何建议,请帮我解决!
编辑:我设置的入站规则如下所示:
Security group rule ID: sgr-123456789
Type Info: PostgreSQL
Protocol Info: TPC
Port range Info: 5432
Source: sg-abcd OR IP or CIDR range
解决方案
推荐阅读
- javascript - ReactJs,带有按钮的下拉菜单还是我应该使用其他东西?
- oop - 组合与继承
- c++ - C++ R-Value 有大小吗?
- excel - 这些电话号码是什么类型的
- amazon-web-services - How to setup EMR cluster which supports Impala?
- ios - 分享你的ios开发证书安全吗?
- javascript - 在 php 中使用 Ajax 以 Json 数据格式在控制台上显示数据库中的数据记录时出错
- python - python中的溢出错误?
- angular - 如何从 slickgrid 中的自定义组件获取输出?
- c++ - 为什么我不能在 GMP 中使用带有 mpz_t 的向量?