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

如何通过VPC Endpoint实现VPC-1的Lambda访问VPC-2 EC2内的SQL数据库?

通过VPC Endpoint实现跨VPC Lambda访问EC2 SQL数据库(禁用VPC对等)

要在禁用VPC对等的前提下,让VPC-1的Lambda访问VPC-2 EC2上的SQL数据库,你需要利用VPC Endpoint Service(基于PrivateLink) + Interface VPC Endpoint的组合方案,以下是具体配置步骤:

一、基础设施配置

VPC-2(EC2 SQL数据库所在环境)

  • 创建Network Load Balancer(NLB)
    • 在VPC-2的子网中部署NLB,监听SQL数据库对应的端口(比如MySQL用3306,SQL Server用1433)
    • 创建目标组,将运行SQL的EC2实例添加到目标组,确保NLB能把流量转发到EC2的SQL端口
  • 配置VPC Endpoint Service
    • 基于刚才创建的NLB创建VPC Endpoint Service,允许指定的AWS账户(即VPC-1所属账户)访问
    • 若为同一账户下的资源,可关闭“Require acceptance for endpoint connections”选项,避免手动审批连接请求
  • 安全组规则调整
    • EC2实例的安全组:允许NLB所在安全组的流量访问SQL端口
    • NLB的安全组:允许后续VPC-1中Interface Endpoint所在安全组的流量访问监听端口

VPC-1(Lambda所在环境)

  • 创建Interface VPC Endpoint
    • 选择VPC-2中创建的VPC Endpoint Service,指定VPC-1内Lambda部署所在的子网
    • 配置Endpoint的安全组:允许Lambda所在安全组的流量访问SQL端口
  • Lambda网络配置
    • 确保Lambda部署在VPC-1的子网中,关联的安全组允许出站访问Interface Endpoint的SQL端口
    • 给Lambda的IAM执行角色添加ec2:DescribeNetworkInterfaces权限(Lambda在VPC内运行需要该权限管理弹性网卡)

二、代码层面配置

  • 修改数据库连接字符串
    • 替换原来EC2的私有IP为Interface VPC Endpoint的DNS名称(可在AWS控制台的Endpoint详情页获取)
    • 端口保持SQL数据库的原有端口
  • 示例代码(Python MySQL)
import mysql.connector

def lambda_handler(event, context):
    db_config = {
        'user': 'your_db_username',
        'password': 'your_db_password',
        'host': 'vpce-xxxx-yyyy.vpce-svc-zzzz.us-east-1.vpce.amazonaws.com',  # Endpoint的DNS地址
        'database': 'your_target_db',
        'port': 3306
    }

    conn = None
    cursor = None
    try:
        conn = mysql.connector.connect(**db_config)
        cursor = conn.cursor()
        cursor.execute("SELECT COUNT(*) FROM your_table")
        result = cursor.fetchone()
        return {"statusCode": 200, "message": "Connection successful", "data": result}
    except Exception as e:
        return {"statusCode": 500, "error": f"Database connection failed: {str(e)}"}
    finally:
        if cursor:
            cursor.close()
        if conn and conn.is_connected():
            conn.close()
  • 关键注意事项
    • 若使用IAM认证的SQL服务(比如部分EC2上的自定义SQL实现了IAM认证),需给Lambda的IAM角色添加对应的数据库访问权限
    • 可通过Lambda执行简单的DNS解析测试(比如用Python的socket.gethostbyname())验证Endpoint的DNS是否能正常解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:48:36