如何使用 Web 界面触发 ec2 实例和 运行 一个 python 脚本?

How use web interface to trigger ec2 instance & run a python script?

我有一个 python 脚本,可以拍摄 N 张图像并将其转换为一张全景图像。

工作流程如下:

  1. 通过网页界面上传n张图片到s3
  2. 这应该触发 EC2 实例启动和 运行 脚本
  3. 将图像从 S3 复制到本地实例存储
  4. 执行脚本后,将结果复制到S3 bucket
  5. 已在网络上展示的脚本竞争。
  6. 可从网上下载结果

在这个过程中,上传图片后如何启动实例?我怎么知道它执行了脚本?

我需要关于 2 和 5 的帮助。如何实施?我应该使用任何其他 AWS 服务吗? 注意:我不需要lambda。

如果您经常转换图像,那么传统架构将是:

  • 某些东西将消息推送到 Amazon SQS 队列中(例如,单击 Web 应用程序上的 'convert' 按钮,或者上传到 S3 会触发 AWS Lambda 函数来检查最终图像是否已上传)
  • Amazon EC2 实例上的工作人员不断轮询 SQS 队列以查看是否有可用消息
  • 如果找到一条消息,它会触发转换过程

但是,如果您只是 很少 处理图像并且您需要 start/stop EC2 实例来处理图像,那么架构将是:

  • 图像上传到 Amazon S3 存储桶
  • Amazon S3 为每次上传触发一个 AWS Lambda 函数。 Lambda 函数判断是否所有图片都已上传。如果是这样,它就会调用 StartInstances() 来打开一个已经创建并加载了所有必要软件的 EC2 实例。 (或者,如果您有一个控制进程的 Web 应用程序,它可以启动 EC2 实例并且不需要 Lambda 函数。)
  • 当实例 启动 时,存储在 /var/lib/cloud/scripts/per-boot/ 中的 EC2 实例上的任何脚本将自动 运行(请注意,这与用户数据脚本不同只有 运行 在实例的第一次启动时)。该脚本应从 S3 存储桶中获取文件并处理图像
  • 处理完成后,脚本可以使用 sudo shutdown now -h
  • 关闭 EC2 实例

但是上面是一个异步过程。也就是说,Web 应用程序(或 Lambda 函数)启动了实例,但没有返回 'response'。您将需要一些机制来 'know' 该实例已完成其工作。这可能就像在 S3 存储桶中查找具有特定名称的输出文件一样简单。此名称可能源自输入图像的名称,或者您的应用可能会在 S3 中创建一个配置文件,其中包含输入图像的文件名并指定输出图像的文件名。

因此,您的第 5 步(“脚本竞争它已显示在网络上”)可能需要网页每 15 秒检查一次结果,而不是简单地 'showing' 发生时检查结果.

另请参阅:Auto-Stop EC2 instances when they finish a task - DEV Community