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

如何通过Serverless Framework创建Lambda和公网均可访问的RDS实例

问题根因

你当前的配置缺失3个核心部分:

  • RDS未绑定VPC子网组和专属安全组,公网访问、VPC内访问的端口规则未放行
  • Lambda未配置VPC访问权限,无法访问VPC内的RDS资源
  • 缺少Lambda访问VPC资源所需的IAM权限

修改后的完整配置片段

service: myapp

provider:
    name: aws
    runtime: provided.al2
    lambdaHashingVersion: 20201221
    # 新增:Lambda访问VPC资源所需的官方托管权限
    iam:
        managedPolicies:
            - arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
    # 新增:Lambda绑定的VPC配置,和RDS同子网
    vpc:
        subnetIds:
            - <替换为你的VPC公有子网ID1>
            - <替换为你的VPC公有子网ID2>
        securityGroupIds:
            - !Ref LambdaSecurityGroup

functions:
    console:
        handler: bin/console
        timeout: 120 # in seconds
        layers:
            - ${bref:layer.php-80} # PHP
            - ${bref:layer.console} # The "console" layer

resources:
    Resources:
        # 新增:Lambda专用安全组
        LambdaSecurityGroup:
            Type: AWS::EC2::SecurityGroup
            Properties:
                GroupDescription: Security group for Lambda functions to access RDS
                VpcId: <替换为你的VPC ID>
        # 新增:RDS专用安全组
        RDSSecurityGroup:
            Type: AWS::EC2::SecurityGroup
            Properties:
                GroupDescription: Security group for RDS instance
                VpcId: <替换为你的VPC ID>
                SecurityGroupIngress:
                    # 规则1:放行Lambda安全组访问RDS的3306端口
                    - IpProtocol: tcp
                      FromPort: 3306
                      ToPort: 3306
                      SourceSecurityGroupId: !Ref LambdaSecurityGroup
                    # 规则2:放行本地公网IP访问RDS的3306端口
                    - IpProtocol: tcp
                      FromPort: 3306
                      ToPort: 3306
                      CidrIp: <替换为你的本地公网IP,格式如111.222.333.444/32>
        # 新增:RDS子网组,RDS强制要求绑定至少两个跨可用区的子网
        RDSSubnetGroup:
            Type: AWS::RDS::DBSubnetGroup
            Properties:
                DBSubnetGroupDescription: Subnet group for RDS instance
                SubnetIds:
                    - <替换为你的VPC公有子网ID1>
                    - <替换为你的VPC公有子网ID2>
        # RDS实例(新增两项配置)
        ProductDatabase:
            Type: AWS::RDS::DBInstance
            Properties:
                AllocatedStorage: 5
                DBInstanceClass: db.t3.micro
                DBName: myapp
                Engine: mysql
                EngineVersion: 8.0.25
                MasterUsername: myappuser
                MasterUserPassword: redacted
                PubliclyAccessible: true
                # 新增:关联RDS子网组
                DBSubnetGroupName: !Ref RDSSubnetGroup
                # 新增:关联RDS安全组
                VPCSecurityGroups:
                    - !Ref RDSSecurityGroup

配置说明

  • 所有带< >的占位符需要替换为你AWS账号对应区域的实际资源ID,VPC、子网ID可在AWS控制台VPC服务页面查询,本地公网IP可直接搜索「我的IP」获取
  • 测试阶段如果临时需要放开所有公网访问,可以把RDSSecurityGroup的第二个入站规则的CidrIp设为0.0.0.0/0,生产环境务必关闭该配置,避免数据库暴露风险
  • 生产环境建议不要硬写数据库密码,可通过AWS Secrets Manager存储,配置时用!Ref引用对应的密钥资源即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:04