Amplify Gen2:如何将Lambda函数连接到RDS实例
Amplify Gen2 连接Lambda到Amazon RDS的正确步骤
一、代码优先配置Lambda与RDS连接
Amplify Gen2采用代码优先架构,所有后端资源需通过本地代码定义(控制台修改不会同步到本地代码),以下是标准配置流程:
在后端代码中定义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] }) });在Lambda代码中实现RDS连接逻辑
在Lambda的代码目录(如backend/functions/rdsAccessLambda/src/index.ts)中,使用数据库驱动(如pgfor 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(); } };部署配置
运行以下命令将本地代码部署到云端,完成Lambda与RDS的绑定:amplify deploy
二、同步云端控制台更改到本地(Gen2等效amplify pull)
Gen2优先推荐代码优先工作流,控制台修改的资源不会自动同步到本地。如果需要将云端修改拉取到本地,可使用:
amplify pull --app-id <你的Amplify应用ID> --env-name <目标环境名>
注意:该命令会覆盖本地后端代码,操作前请备份本地代码。官方建议尽量通过本地代码定义资源,保持版本控制与一致性。
内容的提问来源于stack exchange,提问作者Orl13
相关产品推荐
相关产品推荐

