如何用Node.js模块(.mjs)在AWS Lambda中连接MySQL?
在AWS Lambda的.mjs格式中连接MySQL实例
核心思路
原版mysql包仅支持CommonJS语法(require),不适用于ES模块(.mjs)。推荐使用**mysql2**——它完全兼容ES模块,同时支持Promise/async-await,更适配Lambda的异步执行模型。
步骤1:准备依赖与部署包
- 本地创建项目目录,初始化
package.json并声明ES模块:npm init -y echo '"type": "module"' >> package.json - 安装
mysql2:npm install mysql2 - 将
node_modules文件夹和你的.mjs函数文件打包为ZIP,上传至Lambda;或使用Lambda层管理依赖(适合多个函数复用)。
步骤2:编写.mjs格式的Lambda代码
以下是完整的连接与查询示例:
import mysql from 'mysql2/promise'; export const handler = async (event) => { // 数据库配置(建议从Secrets Manager读取,不要硬编码) const dbConfig = { host: 'your-mysql-instance-endpoint', user: 'db-username', password: 'db-password', database: 'target-db-name', port: 3306 }; let connection; try { // 建立异步连接 connection = await mysql.createConnection(dbConfig); console.log('MySQL连接成功'); // 执行查询(示例) const [rows] = await connection.execute('SELECT * FROM your_table LIMIT 5'); return { statusCode: 200, body: JSON.stringify({ message: '查询完成', data: rows }) }; } catch (err) { console.error('数据库操作失败:', err); return { statusCode: 500, body: JSON.stringify({ error: err.message }) }; } finally { // 确保连接关闭,避免资源泄漏 if (connection) await connection.end(); } };
关键注意事项
- VPC配置:确保Lambda与MySQL实例处于同一VPC,且MySQL的安全组允许Lambda安全组访问3306端口。
- 凭证安全:绝对不要在代码中硬编码数据库密码,使用AWS Secrets Manager存储敏感信息,在Lambda中通过SDK获取。
- 连接复用:如果Lambda调用频繁,可使用
mysql2.createPool()创建连接池,利用Lambda执行环境复用特性减少连接开销,但需注意在函数结束时合理释放资源。
内容的提问来源于stack exchange,提问作者Conrad
相关产品推荐
相关产品推荐

