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

Amplify Gen2:如何将Lambda函数连接到RDS实例

Amplify Gen2 连接Lambda到Amazon RDS的正确步骤

一、代码优先配置Lambda与RDS连接

Amplify Gen2采用代码优先架构,所有后端资源需通过本地代码定义(控制台修改不会同步到本地代码),以下是标准配置流程:

  1. 在后端代码中定义RDS实例与Lambda函数
    在amplify/backend.ts文件中,同时定义RDS数据库和需要访问它的Lambda函数,并配置权限与环境变量:

    import { defineBackend } from '@aws-amplify/backend';
    import { PostgresDb } from '@aws-amplify/backend';
    import { Function } from '@aws-amplify/backend';
    
    const backend = defineBackend({
      // 定义RDS PostgreSQL数据库(按需选择引擎)
      myRdsCluster: new PostgresDb({
        name: 'MyAppDatabase',
        engineVersion: '15.4',
        instanceClass: 'db.t3.micro',
        credentials: {
          username: 'db_admin',
          // 推荐用Secrets Manager存储密码,避免硬编码
          password: '{{resolve:secretsmanager:rds-db-password:SecretString:password}}'
        },
        storage: {
          allocatedStorage: 20,
          maxAllocatedStorage: 100
        }
      }),
      // 定义访问RDS的Lambda函数
      rdsAccessLambda: new Function({
        name: 'RdsDataAccessLambda',
        codePath: 'backend/functions/rdsAccessLambda',
        // 注入RDS连接参数到Lambda环境变量
        environment: {
          DB_HOST: '{{resolve:aws:rds:cluster:myRdsCluster:Endpoint}}',
          DB_PORT: '{{resolve:aws:rds:cluster:myRdsCluster:Port}}',
          DB_NAME: 'MyAppDatabase',
          DB_USER: 'db_admin',
          DB_PASSWORD: '{{resolve:secretsmanager:rds-db-password:SecretString:password}}'
        },
        // 赋予Lambda访问RDS集群的权限
        permissions: [backend.myRdsCluster]
      })
    });
    
  2. 在Lambda代码中实现RDS连接逻辑
    在Lambda的代码目录(如backend/functions/rdsAccessLambda/src/index.ts)中,使用数据库驱动(如pg for PostgreSQL)连接RDS:

    import { Client } from 'pg';
    
    export const handler = async () => {
      const dbClient = new Client({
        host: process.env.DB_HOST,
        port: parseInt(process.env.DB_PORT || '5432'),
        database: process.env.DB_NAME,
        user: process.env.DB_USER,
        password: process.env.DB_PASSWORD
      });
    
      try {
        await dbClient.connect();
        const queryResult = await dbClient.query('SELECT * FROM your_table LIMIT 10');
        return {
          statusCode: 200,
          body: JSON.stringify({ data: queryResult.rows })
        };
      } catch (error) {
        console.error('RDS connection failed:', error);
        return {
          statusCode: 500,
          body: JSON.stringify({ error: 'Failed to access database' })
        };
      } finally {
        await dbClient.end();
      }
    };
    
  3. 部署配置
    运行以下命令将本地代码部署到云端,完成Lambda与RDS的绑定:

    amplify deploy
    

二、同步云端控制台更改到本地(Gen2等效amplify pull)

Gen2优先推荐代码优先工作流,控制台修改的资源不会自动同步到本地。如果需要将云端修改拉取到本地,可使用:

amplify pull --app-id <你的Amplify应用ID> --env-name <目标环境名>

注意:该命令会覆盖本地后端代码,操作前请备份本地代码。官方建议尽量通过本地代码定义资源,保持版本控制与一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:52:32