python - 在多个 ec2 实例上运行相同的 github python 代码的最佳实践是什么?
问题描述
我在 github 上将 venv 用于我的 python 存储库,并希望在 10 多个 ec2 实例上运行相同的代码(每个实例将有一个 cronjob,它只在相同的时间表上运行相同的代码)
关于如何最好地实现这一点的任何建议 + 继续确保所有实例都在 github 上获得最新版本的分支?我想尝试自动化我需要做的任何配置,所以我不这样做:
创建一个ec2实例,设置我需要的所有配置,比如下载最新的python版本等。然后git clone,使用venv设置我需要的所有python包。验证代码在此实例上有效。
对剩余的 10 多个 ec2 实例重复此操作
每当有人发布一个新的主分支时,我必须 ssh 进入每个 ec2 实例,git pull 到正确的分支,重新更新我需要的任何新配置,对所有剩余的 10 多个 ec2 实例重复。
理想情况下,我可以运行一些脚本来推送使代码在所有 ec2 实例上工作所需的一切。我对这类事情几乎没有经验,但通过阅读这是我正在考虑的一种方法。我在正确的轨道上吗?:
- 创建一个脚本,我运行 ssh 到我的所有 ec2 实例和 git clone/update 以更正分支
- 使用 Docker 确保正确设置所有 ec2 实例,以便 python 代码正常工作(这是 Docker 的正确用例吗?)。上面的脚本将运行必要的 Docker 命令
- 与使用 venv 并读取 requirements.txt 文件类似,因此所有 ec2 实例都具有正确的 python 包和版本
解决方案
根据您的应用程序和要求(EC2 100% 是否必要?)我可以推荐以下内容:
如果您的舰队是静态的并且您需要快速部署,则可以使用类似 Capistrano 的 SSH 部署 ( https://github.com/dlapiduz/fabistrano )。不是最佳实践,也不是非常安全,但您在帖子中提到了类似的方案
使用 AWS Image Builder ( https://aws.amazon.com/image-builder/ ) 或 Packer ( https://www.packer.io/ ) 构建新的发布映像,然后在您的 EC2 自动缩放中将旧映像替换为新映像团体
构建应用程序的 docker 映像并使用 ECS 或 EKS 托管它。如果您不喜欢直接在 EC2 主机上运行代码,我会推荐这种方法。
推荐阅读
- java - 'void android.widget.TextView.setText(java.lang.CharSequence)' 在空对象引用 Adapter.Messageadapter.onBindViewHolder
- visual-c++ - MySQL 工作台安装程序需要 Visual C++ 2015,但我已经安装了它(Windows 7)
- perl - 如何从另一个 if 条件中的一个 if 条件中获取变量的值?
- javascript - 无法以特定方式对 JSON 数组进行排序
- android - Android Navigation Error: java.lang.IllegalArgumentException: navigation destination com.example--- is unknown to this NavController
- python - python中用于图像清晰度或模糊度估计的任何现有代码/库?
- firefox - 使用 tabs.executeScript 欺骗该选项卡处于活动状态的网页
- python - 将多个 .txt 文件作为数据框加载到 python
- python - 如何使用事件同步两个持续运行的线程?
- google-apps-script - Gmail 插件 - 撰写没有卡片/用户界面的触发器选择操作