通过弹性 beantalk 部署的 Node 应用程序的问题
Posted
技术标签:
【中文标题】通过弹性 beantalk 部署的 Node 应用程序的问题【英文标题】:Issues with a Node app deployed through elastic beanstalk 【发布时间】:2016-08-28 22:40:17 【问题描述】:我正在通过 aws elastic beanstalk 将节点应用程序部署到 ec2 实例。我使用 cron 节点包设置了一个 cron 作业,它在滴答时将运行一个 sequelize 查询,解析返回的数据,然后将其发送到电子邮件的正文中。
在本地测试时,它可以正常工作并发送电子邮件。当我使用 awsebcli 命令eb deploy
部署它时,它说部署成功,但我没有收到任何电子邮件。
起初我认为npm start
命令在服务器上不起作用,但我检查了错误日志,似乎 sequelize 在尝试连接时抛出超时错误。
我为 sequelize 编写了一个配置,以一次连接到多个模式。其中三个架构托管在同一个 RDS 上,一个托管在单独的 RDS 上。
我用另一个节点应用程序做了几乎完全相同的事情,它运行良好。唯一不同的是,我在本地机器上可以正常连接的单独 RDS 上的附加架构。
任何想法或建议将不胜感激。
编辑:检查服务器日志,发现 Sequelize 连接错误。
【问题讨论】:
服务器日志有错误吗? @MarkB 拉出最后 100 行,看到这一行出现了几次。Unhandled rejection SequelizeConnectionError: connect ETIMEDOUT
这显然意味着 sequelize 无法连接到我的数据库,但为什么呢?
没有办法用给出的信息回答你的问题。也许检查您的安全组。
鉴于您的最后一条评论,由于某种原因您已将其删除,听起来您只需更新单独 RDS 实例的安全组以允许从 EC2 实例进行访问。
好吧,我想留下答案,我之前的评论几乎给出了答案,所以我想我只是编辑问题并删除评论。但是,是的,这将是唯一真正的解决方案,没有将架构迁移到已经允许该实例访问的 RDS。
【参考方案1】:
发现问题是由 aws 上的安全组阻止我的实例连接到它所需的数据库之一引起的。
编辑:
已要求提供详细信息。由于这是一篇非常古老的帖子,而且我无法再访问 AWS,所以我可以大胆猜测一下我做了什么。
如果我没记错的话,我被阻止的数据库托管在不同的 aws 帐户中。更改数据库上的安全组不是一种选择,因为该帐户的安全性得到了牢固的维护。我能够在本地连接的原因是因为我工作的设施在数据库安全组上有一个列入白名单的 IP。我最终决定在我的本地机器上运行脚本,因为我的机器很少离开那个位置,而且脚本在哪里运行并不重要,只是它定期运行。不过,理想情况下,我应该能够更改数据库上的安全组以允许来自我的服务器的传入流量。
【讨论】:
请提供更具体的细节,说明您是如何解决问题的。 这是一个非常古老的问题,我无法再访问这些 AWS 服务,但如果您坚持... @NickYoung以上是关于通过弹性 beantalk 部署的 Node 应用程序的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用弹性 beantalk 部署复杂的 node.js 项目
升级弹性 beantalk 堆栈时,Rails 应用程序无法部署
使用弹性 beantalk 问题部署 Asp.net Web 应用程序
尝试通过弹性 beantalk 运行救援时忽略 .ebextensions 文件