Node.js 在AWS中部署bot实例

Node.js 在AWS中部署bot实例,node.js,amazon-web-services,bots,cloud9-ide,cloud9,Node.js,Amazon Web Services,Bots,Cloud9 Ide,Cloud9,我没有为生产部署AWS或bot的经验,因此我正在寻找一些关于最佳实践的建议 该项目是一个简单的Twitter自动化bot,作为node.js应用程序编写。目前我正在AWS中使用Cloud9来托管它,但我觉得这可能不是最有效的方法 我需要的是: 能够轻松部署bot/codebase 多个实例,因此我可以为每个用户部署一个新实例 易于访问日志和更新 使用情况报告 能够为用户连接到前端 如果可能的话,我想使用AWS来熟悉这个平台,但是我愿意接受任何建议,我可以合并一个简单的工作流 部署新bot的当

我没有为生产部署AWS或bot的经验,因此我正在寻找一些关于最佳实践的建议

该项目是一个简单的Twitter自动化bot,作为node.js应用程序编写。目前我正在AWS中使用Cloud9来托管它,但我觉得这可能不是最有效的方法

我需要的是:

  • 能够轻松部署bot/codebase
  • 多个实例,因此我可以为每个用户部署一个新实例
  • 易于访问日志和更新
  • 使用情况报告
  • 能够为用户连接到前端
如果可能的话,我想使用AWS来熟悉这个平台,但是我愿意接受任何建议,我可以合并一个简单的工作流

部署新bot的当前工作流:

  • 创建Cloud9EC2实例
  • 安装依赖项
  • 从存储库克隆Git
  • 使用用户的访问密钥编辑配置
  • 从控制台运行bot
  • 在后台运行

  • 到目前为止,这很容易,但我不知道它是否实用。谢谢你的建议

    考虑到机器人需要持续运行(也就是说,它不能按需旋转几分钟,这就排除了AWS Lambda),而且每个用户都需要自己的,我会尝试一下AWS ECS

    您的初始设置将如下所示:

  • 首先,运行bot,并将其加载到或中
  • 设置ECS。我建议使用,这样您就不必为了运行容器而管理VPC和EC2实例。您将希望使用您的机器人Docker映像
  • 根据需要使用任务定义运行新任务。这可以通过AWS控制台中的AWS API、AWS SDK等实现
  • 更新机器人只需要更新Docker映像和任务定义,然后重新启动任务,以便它们使用新映像

    您也应该能够使用CloudWatch为您的ECS任务进行设置和监视/报警

    使用情况报告取决于您想要报告的内容。您可以从CloudWatch事件/度量中获得所需的一切,或者您可能希望将数据从容器发送到某个存储解决方案(RDS、DynamoDB、S3等)


    将前端绑定到机器人程序取决于机器人程序的设置方式。例如,如果他们的REST服务器监听某个特定端口,那么如果他们在ECS上运行,您就可以点击该端口。

    鉴于机器人需要持续运行(即,它不能只按需旋转几分钟,这就排除了AWS Lambda),并且每个用户都需要自己的,我会尝试一下AWS ECS

    您的初始设置将如下所示:

  • 首先,运行bot,并将其加载到或中
  • 设置ECS。我建议使用,这样您就不必为了运行容器而管理VPC和EC2实例。您将希望使用您的机器人Docker映像
  • 根据需要使用任务定义运行新任务。这可以通过AWS控制台中的AWS API、AWS SDK等实现
  • 更新机器人只需要更新Docker映像和任务定义,然后重新启动任务,以便它们使用新映像

    您也应该能够使用CloudWatch为您的ECS任务进行设置和监视/报警

    使用情况报告取决于您想要报告的内容。您可以从CloudWatch事件/度量中获得所需的一切,或者您可能希望将数据从容器发送到某个存储解决方案(RDS、DynamoDB、S3等)


    将前端绑定到机器人程序取决于机器人程序的设置方式。例如,如果他们的REST服务器正在监听某个特定端口,那么如果他们在ECS上运行,您就可以访问该端口。

    嘿,很抱歉这里的响应太晚,这个答案还有几个月的时间,所以我想先看看您写的内容,让自己熟悉一下,但这似乎是一个完美的解决方案,我们的前端运行在谷歌脚本上,无需构建自己的系统即可处理登录。谢谢你的帮助!考虑到每个用户都会有一个不同的config.js实例,具有自己的使用者/访问权限和不同的设置参数,在这种差异不会影响其他实例以及利用某种形式的冗余来确保正常运行时间的情况下,部署它们的最佳方式是什么?通过从表单POST脚本创建环境变量,这是否有效?是的,我可能会让config.js使用您可以为运行的每个任务覆盖的环境变量。您可以在通过或AWS SDK()运行任务时进行覆盖,这样就可以轻松地使用特定的用户设置运行任务,甚至可以使用相同的设置运行多个任务以实现冗余。抱歉,这里的响应太晚,这个答案还需要几个月的时间,所以我想先看看你写的内容,让自己熟悉一下,但这似乎是一个完美的解决方案,我们的前端在谷歌脚本上运行,无需构建自己的系统即可处理登录。谢谢你的帮助!考虑到每个用户都会有一个不同的config.js实例,具有自己的使用者/访问权限和不同的设置参数,在这种差异不会影响其他实例以及利用某种形式的冗余来确保正常运行时间的情况下,部署它们的最佳方式是什么?通过从表单POST脚本创建环境变量,这是否有效?是的,我可能会让config.js使用您可以为运行的每个任务覆盖的环境变量。您可以在通过或AWS SDK()运行任务时进行覆盖,这样就可以轻松地使用特定的用户设置运行任务,甚至可以使用相同的冗余设置运行多个任务。