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
相关产品推荐
相关产品推荐

