【问题标题】:What's the best practice to run the same github python code on several ec2 instances?在多个 ec2 实例上运行相同的 github python 代码的最佳实践是什么?
【发布时间】:2021-07-24 22:28:27
【问题描述】:

我在 github 上将 venv 用于我的 python 存储库,并希望在 10 多个 ec2 实例上运行相同的代码(每个实例将有一个 cronjob,它只是在相同的时间表上运行相同的代码)

关于如何最好地实现这一点的任何建议 + 继续确保所有实例都在 github 上获得最新版本的分支?我想尝试自动化我需要做的任何配置,所以我不会这样做:

  1. 创建一个ec2实例,设置我需要的所有配置,比如下载最新的python版本等。然后git clone,使用venv设置我需要的所有python包。验证代码在此实例上有效。

  2. 对剩余的 10 多个 ec2 实例重复此操作

  3. 每当有人发布一个新的 master 分支时,我必须 ssh 进入每个 ec2 实例,git pull 到正确的分支,重新更新我需要的任何新配置,对所有剩余的 10 多个 ec2 实例重复此操作。

理想情况下,我可以只运行一些脚本来推送使代码在所有 ec2 实例上运行所需的一切。我对这类事情几乎没有经验,但通过阅读这是我正在考虑的一种方法。我在正确的轨道上吗?:

  • 创建一个脚本,我运行 ssh 到我的所有 ec2 实例和 git clone/update 以更正分支
  • 使用 Docker 确保正确设置所有 ec2 实例,以便 python 代码正常工作(这是 Docker 的正确用例吗?)。上面的脚本将运行必要的 Docker 命令
  • 与使用 venv 并读取 requirements.txt 文件类似,因此所有 ec2 实例都有正确的 python 包和版本

【问题讨论】:

  • 您多久更改一次 ec2 实例的数量?代码多久运行一次?代码多久更改一次?
  • 啊,好点子,这个用例是一个在 10 多台机器上运行的爬虫,所以来自用户的外部流量不会是一个因素。它会尽可能多地运行,尽管实际上可能每天运行 10-20 小时。 ec2实例的数量暂时不会改变,可以认为是固定的。不需要自动缩放,因为决定何时添加/删除实例以完成更多/更少的抓取将是手动调用。同样没有问题的是,启动并运行新实例最多需要几个小时。代码每周更改 2-3 次。

标签: python amazon-web-services docker amazon-ec2 python-venv


【解决方案1】:

根据您的应用和要求(EC2 100% 是否必要?)我可以推荐以下内容:

  1. 类似 Capistrano 的 SSH 部署 (https://github.com/dlapiduz/fabistrano) 如果您的舰队是静态的并且您需要快速部署。不是最佳实践,也不是非常安全,但您在帖子中提到了类似的方案

  2. 使用 AWS Image Builder (https://aws.amazon.com/image-builder/) 或 Packer (https://www.packer.io/) 构建新的发布映像,然后在您的 EC2 自动缩放组中将旧映像替换为新映像

  3. 为您的应用构建 docker 镜像并使用 ECS 或 EKS 来托管它。如果您不喜欢直接在 EC2 主机上运行代码,我会推荐这种方法。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 2015-02-03
    • 2017-12-21
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多