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

Python Lambda如何连接到Windows Server 2019 EC2实例上的SQL Server数据库

Lambda连通EC2内SQL Server的最小化验证实操

以下步骤面向已完成Lambda执行角色、VPC、子网、安全组基础配置的场景,目标是跑通“Lambda -> EC2实例 -> 实例内SQL Server”全链路的Hello World级连通验证,暂不涉及S3触发、文件处理等业务逻辑。

前置网络配置校验

这部分是连通的基础,配置错了后面代码写得再对也连不上:

  • 确认Lambda与EC2实例处于同一VPC下的网络可达子网:两者的子网路由表需保证私网CIDR段双向路由打通,不需要额外配置公网路由,走私网路径访问即可
  • 双向安全组规则校准:
    • Lambda关联的安全组:出站规则需放行到EC2实例私网IP的1433端口流量,可将目标精确限定为EC2实例的私有IP段,无需开放全公网出站权限
    • EC2实例关联的安全组:入站规则需放行来自Lambda关联安全组的1433端口流量,来源不要填公网IP段,避免数据库端口直接暴露到公网
  • EC2实例侧的本地配置检查:
    • 打开预装镜像自带的SQL Server Configuration Manager,启用TCP/IP协议,确认其静态端口配置为默认1433(默认安装的实例如果没改端口的话一般是这个值)
    • 在Windows Defender防火墙的入站规则中,放行1433端口,允许VPC私网段的访问请求,避免系统级防火墙拦截流量

Lambda运行依赖准备

Python 3.7/3.8运行时没有内置SQL Server连接驱动,需要提前准备好依赖:

  • 适配对应Python版本的pymssql驱动,不要直接在本地打包依赖上传,可直接挂载同版本的兼容Lambda层,避免跨操作系统打包导致的二进制兼容问题
  • 初期验证阶段可直接通过Lambda环境变量存储连接参数,无需接入Secrets Manager,需要配置的变量包括:
    • SQL_HOST:填写EC2实例的私有IP地址,不要填公网IP
    • SQL_PORT:默认填1433
    • SQL_DBNAME:可直接填SQL Server默认的master库,不需要单独建业务库
    • SQL_USER:填SQL Server的认证账号(比如预装镜像默认的sa账号)
    • SQL_PASSWORD:对应账号的登录密码

最小化验证代码

代码逻辑仅保留数据库连接、简单查询的核心流程,不夹杂额外业务逻辑,执行成功就代表全链路连通:

import os
import pymssql

def lambda_handler(event, context):
    # 从环境变量读取连接配置
    db_config = {
        "server": os.environ.get("SQL_HOST"),
        "port": int(os.environ.get("SQL_PORT", 1433)),
        "user": os.environ.get("SQL_USER"),
        "password": os.environ.get("SQL_PASSWORD"),
        "database": os.environ.get("SQL_DBNAME")
    }

    try:
        conn = pymssql.connect(**db_config)
        cursor = conn.cursor()
        # 执行验证查询
        cursor.execute("SELECT 'Hello World! Lambda到SQL Server的连接已打通' AS status")
        query_result = cursor.fetchone()
        conn.close()

        return {
            "check_result": "success",
            "db_return": query_result[0]
        }
    except Exception as err:
        return {
            "check_result": "failed",
            "error_detail": str(err)
        }

验证标准:手动触发Lambda执行,若返回结果为success,且日志中能打印出数据库返回的Hello World字符串,就代表从Lambda到EC2、再到实例内SQL Server的全链路连通正常,可以在此基础上后续接入S3触发、文件处理等业务逻辑。

常见连通失败的排查方向

  • 连接超时类报错:优先检查是否误用了EC2公网IP、EC2侧Windows防火墙是否拦截1433端口、安全组的双向规则是否配反了来源/目标
  • 驱动导入类报错:优先检查挂载的pymssql层是否和Lambda的Python版本、运行架构(x86/arm)匹配,不要用本地Windows环境打包的依赖
  • 认证失败类报错:检查SQL Server是否配置为SQL Server身份认证模式(默认预装镜像一般是混合认证模式,如果改成了纯Windows认证就会导致账号密码登录失败)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 01:27:00