我有三个python脚本1.py
,2.py
和3.py
,每个脚本都有3个运行时参数要传递。
所有三个python程序彼此独立。这3个批处理程序可能会按顺序依次运行,也可能会发生某些情况,这取决于某些配置。
手动方式:
自动方法将通过lambda触发上述过程,并使用某种服务组合来复制上述过程。
在AWS中实现此目标的最佳方法是什么?
答案 0 :(得分:0)
您可以使用AWS boto3库(https://aws.amazon.com/pt/sdk-for-python/)通过Python脚本运行EC2实例。因此,一种可能的解决方案是定期触发Lambda函数(您可以使用Amazon Cloudwatch进行定期事件),然后在该函数中,您可以使用Python脚本启动EC2实例。
在您的实例中,您可以将操作系统配置为在每次启动时运行Python脚本,我建议您使用Crontab(请参阅此链接https://www.instructables.com/id/Raspberry-Pi-Launch-Python-script-on-startup/)
在脚本结尾处,您可以向将关闭第一个实例的函数触发Aamazon SQS事件,然后调用另一个将启动第二个脚本的函数。
答案 1 :(得分:0)
AWS Batch具有DAG调度程序,从技术上讲,您可以定义job1,job2,job3,并告诉AWS Batch以该顺序运行它们。但是我不推荐那条路线。
要使以上各项正常工作,您基本上需要创建3个docker映像。 image1,image2,image3。然后将它们放在ECR中(如果不使用Fargate启动类型,Docker Hub也可以工作)。
除非每个工作都很庞大,否则我认为这没有道理。
相反,我将编写一个调用1.py 2.py和3.py的Python程序,将其放在Docker映像中并运行AWS批处理作业或仅执行ECS Fargate任务。
main.py:
import subprocess
exit_code = subprocess.call("python3 /path/to/1.py", shell=True)
# decide if you want call 2.py and so on ...
# 1.py will see the same stdout, stderr as main.py
# with batch and fargate you can retrieve these form cloudwatch logs ...
现在您有了一个Docker映像,只需要在某个地方运行即可。 Fargate快速启动,价格昂贵,临时存储最大限制为10GB。 AWS Batch在冷启动时启动缓慢,但是可以在您的账户中使用竞价型实例。您可能需要针对AWS批次进行自定义AMI才能工作。也就是说,如果您想要更多存储空间。
注意:对于任何想在shell = True尖叫的人,main.py和1.py都来自同一代码库。这是一个批处理工作,而不是从用户请求中获取的面向Internet的API。