You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python连接私有子网中的PostgreSQL RDS并实现端口转发?

用Python查询私有子网中的PostgreSQL RDS及SSM端口转发实现

完全可行。你的PostgreSQL RDS部署在私有子网中无法直接从公网访问,但借助已配置SSM的堡垒机,可通过端口转发打通本地Python程序与RDS的网络连接,进而执行查询操作。

实现步骤及示例代码

以下是通过Python调用AWS CLI实现SSM端口转发,并连接RDS查询的方案:

  1. 环境准备
    先安装必要依赖:

    pip install boto3 awscli psycopg2-binary
    

    确保本地AWS凭证(通过配置文件、环境变量或IAM角色)拥有ssm:StartSession权限,且堡垒机实例的安全组允许访问RDS的5432端口。

  2. Python代码实现

    import subprocess
    import time
    import psycopg2
    
    # 替换为你的实际参数
    SSM_INSTANCE_ID = "堡垒机EC2实例ID"
    RDS_ENDPOINT = "你的RDS数据库端点"
    RDS_PORT = 5432
    LOCAL_FORWARD_PORT = 54320  # 本地映射端口,可自定义
    DB_NAME = "目标数据库名"
    DB_USER = "数据库用户名"
    DB_PASSWORD = "数据库密码"
    
    # 启动SSM端口转发会话
    ssm_cmd = [
        "aws", "ssm", "start-session",
        "--target", SSM_INSTANCE_ID,
        "--document-name", "AWS-StartPortForwardingSessionToRemoteHost",
        "--parameters", f"host={RDS_ENDPOINT},portNumber={str(RDS_PORT)},localPortNumber={str(LOCAL_FORWARD_PORT)}"
    ]
    
    # 启动端口转发子进程
    tunnel_process = subprocess.Popen(ssm_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    # 等待端口转发通道建立
    time.sleep(5)
    
    try:
        # 通过本地转发端口连接RDS
        conn = psycopg2.connect(
            dbname=DB_NAME,
            user=DB_USER,
            password=DB_PASSWORD,
            host="localhost",
            port=LOCAL_FORWARD_PORT
        )
    
        # 执行查询示例
        with conn.cursor() as cur:
            cur.execute("SELECT current_date;")
            query_result = cur.fetchone()
            print(f"查询结果: {query_result[0]}")
    
        conn.close()
    finally:
        # 关闭端口转发进程
        tunnel_process.terminate()
        tunnel_process.wait()
    

关键说明

  • 堡垒机需部署在能访问私有子网RDS的VPC中,且安全组规则允许堡垒机向RDS的5432端口发起连接。
  • 若不想依赖AWS CLI,也可使用boto3直接调用SSM API启动会话,再手动处理Socket端口转发,但实现复杂度更高。
  • 确保SSM Agent在堡垒机上正常运行,这是SSM会话建立的前提。

内容的提问来源于stack exchange,提问作者Judi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:35:29