Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在几个ec2实例上运行相同的github python代码的最佳实践是什么?_Python_Amazon Web Services_Docker_Amazon Ec2_Python Venv - Fatal编程技术网

什么';在几个ec2实例上运行相同的github python代码的最佳实践是什么?

什么';在几个ec2实例上运行相同的github python代码的最佳实践是什么?,python,amazon-web-services,docker,amazon-ec2,python-venv,Python,Amazon Web Services,Docker,Amazon Ec2,Python Venv,我在github上使用venv进行python repo,并希望在10+ec2实例上运行相同的代码(每个实例将有一个cronjob,它只在相同的时间表上运行相同的代码) 关于如何最好地实现这一点的任何建议+继续确保所有实例都获得github上的最新版本分支?我想尝试并自动化我需要执行的任何配置,这样我就不会这样做: 创建一个ec2实例,设置我需要的所有配置,比如下载最新的python版本,等等。然后git clone,使用venv设置我需要的所有python包。验证代码在此实例上是否有效 对剩

我在github上使用venv进行python repo,并希望在10+ec2实例上运行相同的代码(每个实例将有一个cronjob,它只在相同的时间表上运行相同的代码)

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

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

  • 对剩余的10+ec2实例重复此操作

  • 每当有人发布一个新的主分支时,我必须ssh到每个ec2实例,git拉到正确的分支,重新更新我需要的任何新配置,对所有剩余的10+ec2实例重复

  • 理想情况下,我可以运行一些脚本,推动所有需要使代码在所有ec2实例上工作的内容。我对这类事情几乎没有经验,但通过阅读,我正在考虑采用这种方法。我走对了吗

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

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

  • 如果您的机队是静态的并且需要快速部署,那么Capistrano类似于SSH部署()。这不是最佳实践,也不是非常安全,但您在帖子中提到了类似的方案

  • 使用AWS Image Builder()或Packer()构建新的发行版映像,然后在EC2自动缩放组中将旧映像替换为新映像

  • 构建应用程序的docker映像,并使用ECS或EKS托管。如果您还没有使用EC2,我建议您使用这种方法


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

  • 如果您的机队是静态的并且需要快速部署,那么Capistrano类似于SSH部署()。这不是最佳实践,也不是非常安全,但您在帖子中提到了类似的方案

  • 使用AWS Image Builder()或Packer()构建新的发行版映像,然后在EC2自动缩放组中将旧映像替换为新映像

  • 构建应用程序的docker映像,并使用ECS或EKS托管。如果您还没有使用EC2,我建议您使用这种方法


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