我在 aws lambda 上的代码:
import sys, boto3, logging, rds_config, psycopg2
rds_host = "hostname"
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
s3 = boto3.resource('s3')
rds_client = boto3.client('rds',aws_access_key_id=Access_Key,aws_secret_access_key=Secret_Access_Key)
instances = rds_client.describe_db_instances()
print (instances)
try:
conn = psycopg2.connect(host=rds_host,
database=db_name,
user=name,
password=password)
cur = conn.cursor()
except:
logger.error("ERROR: Unexpected error: Could not connect to Postgresql instance.")
sys.exit()
我相信我已经使用 boto3.client 连接到 RDS 实例,因为实例的信息输出到屏幕。
但对于 psycopg2 来说这是不行的。
我收到的不是 logger.error 而是超时错误消息:
Task timed out after 60.06 seconds
此外:
我可以使用本地 psql 控制台或本地服务器上的 python 脚本连接到 RDS。仅当我在线使用 aws-lambda 测试脚本时,它才不起作用
关于这个有什么帮助吗?
谢谢你!
RDS 文档建议,如果您收到超时错误并且主机和端口正确,那么您应该检查数据库所在的安全组是否允许网络访问。默认情况下,数据库实例不具有网络访问权限。
See 入门 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html#CHAP_GettingStarted.Connecting.PostgreSQL and 使用 Amazon RDS 安全组控制访问 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)