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

如何用Node.js模块(.mjs)在AWS Lambda中连接MySQL?

在AWS Lambda的.mjs格式中连接MySQL实例

核心思路

原版mysql包仅支持CommonJS语法(require),不适用于ES模块(.mjs)。推荐使用**mysql2**——它完全兼容ES模块,同时支持Promise/async-await,更适配Lambda的异步执行模型。


步骤1:准备依赖与部署包

  1. 本地创建项目目录,初始化package.json并声明ES模块:
    npm init -y
    echo '"type": "module"' >> package.json
    
  2. 安装mysql2:
    npm install mysql2
    
  3. 将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:12:10