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

AWS Elastic Beanstalk部署成功但RDS数据库迁移失败求助

问题排查:AWS Elastic Beanstalk上Sequelize数据库迁移未执行

核心问题

Node.js项目已成功部署到AWS Elastic Beanstalk,主页可正常访问,但配置的Sequelize数据库迁移(含seed操作)未按预期执行。

配置回顾

  • 数据库连接配置(config/config.js):通过环境变量配置生产环境RDS连接
    production: {
        host: process.env.RDS_HOSTNAME,
        username: process.env.RDS_USERNAME,
        password: process.env.RDS_PASSWORD,
        port: process.env.RDS_PORT,
        database: process.env.RDS_DB_NAME,
        dialect: "mysql",
    },
    
  • EB迁移配置(.ebextensions/migration.config):
    option_settings:
      container_commands:
        database_migration:
            leader_only: true
            command: "npm run dbmigrate"
    
  • 迁移脚本(package.json):
    "dbmigrate": "npx sequelize db:migrate && npx sequelize db:seed:undo:all && npx sequelize db:seed:all"
    

排查与解决步骤

1. 显式指定执行环境

EB的container_commands默认不会自动加载production环境配置,需在命令中显式指定,确保Sequelize读取生产环境的RDS连接信息:

option_settings:
  container_commands:
    database_migration:
        leader_only: true
        command: "NODE_ENV=production npm run dbmigrate"

2. 输出执行日志定位错误

修改命令添加日志捕获,记录迁移过程的所有输出(包括错误):

option_settings:
  container_commands:
    database_migration:
        leader_only: true
        command: "NODE_ENV=production npm run dbmigrate > /tmp/migrate_exec.log 2>&1"

部署后,通过EB控制台下载完整日志,查看/tmp/migrate_exec.log内容,确认是否存在sequelize命令报错、数据库连接失败等信息。

3. 验证RDS环境变量是否加载

在迁移命令前添加环境变量打印,确认EB是否正确注入RDS相关变量:

option_settings:
  container_commands:
    database_migration:
        leader_only: true
        command: "printenv | grep RDS > /tmp/rds_env.log && NODE_ENV=production npm run dbmigrate > /tmp/migrate_exec.log 2>&1"

查看/tmp/rds_env.log,确认RDS_HOSTNAME、RDS_USERNAME等变量是否存在且值正确。

4. 检查Sequelize CLI路径配置

确保项目根目录存在.sequelizerc文件,指定migrations、seeds等目录的正确路径(若未使用默认结构):

const path = require('path');

module.exports = {
  'config': path.resolve('config', 'config.js'),
  'models-path': path.resolve('models'),
  'seeders-path': path.resolve('seeders'),
  'migrations-path': path.resolve('migrations')
};

5. 确认RDS访问权限

  • 检查RDS安全组入站规则,允许EB环境的EC2实例安全组访问3306端口(MySQL默认端口)。
  • 确认RDS数据库用户拥有CREATE、ALTER、DROP等迁移所需的权限。

6. 手动执行迁移验证

登录EB环境的EC2实例,切换到应用目录(/var/app/current),手动执行迁移命令:

NODE_ENV=production npm run dbmigrate

观察执行过程中的错误信息,直接定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:17:14