【问题标题】:Deploying bot instances in AWS在 AWS 中部署机器人实例
【发布时间】:2018-10-08 19:27:14
【问题描述】:

我没有在生产环境中部署 AWS 或机器人的经验,因此我正在寻找一些关于最佳实践的建议。

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

我需要什么:

  • 能够轻松部署机器人/代码库。
  • 多个实例,因此我可以为每个用户部署一个新实例。
  • 轻松访问日志和更新。
  • 使用情况报告。
  • 能够为用户绑定到前端。

如果可能的话,我想使用 AWS 来熟悉这个平台,但我愿意接受任何可以整合简单工作流程的建议。

部署新机器人的当前工作流程:

  1. 创建 Cloud9 EC2 实例
  2. 安装依赖项
  3. 从存储库克隆 Git
  4. 使用用户的访问密钥编辑配置
  5. 从控制台运行机器人
  6. 让后台运行

到目前为止,这很容易,但我只是不知道它是否实用。感谢任何建议!

【问题讨论】:

    标签: node.js amazon-web-services bots cloud9-ide cloud9


    【解决方案1】:

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

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

    1. 首先,create a Docker image 运行您的机器人,并将其加载到 ECRDocker Hub
    2. 设置 ECS。我建议使用AWS Fargate,这样您就不必为了运行容器而管理 VPC 和 EC2 实例。您需要使用您的机器人 Docker 映像 create your task definition
    3. 使用您的任务定义根据需要运行新任务。这可以通过 AWS API、AWS SDK、AWS 控制台等来完成。

    更新机器人只需要更新您的 Docker 映像和任务定义,然后重新启动任务以便它们使用新映像。

    您也应该能够为您的 ECS 任务设置 logging 并使用 CloudWatch 监控/警报。

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

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

    【讨论】:

    • 嘿,很抱歉在这里回复晚了,这个答案真的需要几个月的时间,所以我想先玩一下你写的东西来熟悉自己,但似乎这是我们前面的完美解决方案结束在 Google Scripts 上运行以处理登录,而无需构建我们自己的系统。感谢您的帮助!
    • 考虑到每个用户都有一个不同的 config.js 实例,它们有自己的消费者/访问权限和不同的设置参数,在这种差异不会影响其他实例的情况下部署这些的最佳方法是什么以及利用某种形式的冗余来确保正常运行时间?
    • 这可以通过从表单 POST 脚本创建环境变量来有效吗?
    • 是的,我可能会让 config.js 使用您可以为您运行的每个任务覆盖的环境变量。您可以在通过AWS CLI 或 AWS 开发工具包 (NodeJS, for example) 运行任务时覆盖,然后可以轻松地运行具有特定用户设置的任务,甚至可以运行具有相同设置的多个任务以实现冗余。
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 2019-10-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多