首页 > 解决方案 > 如何使用 sqs 启动 ec2 实例并在实例内触发 python 脚本

问题描述

我有一个 python 脚本,它可以拍摄视频并将其转换为一系列小全景图。现在,有一个 S3 存储桶将用于上传视频 (mp4)。每次上传时,我都需要将此文件发送到 ec2 实例。这是流程:

  1. 将视频文件上传到 S3。
  2. 这应该会触发 EC2 实例启动。
  3. 一旦它运行,我希望将文件复制到实例内的特定目录。
  4. 在此之后,我希望 py 文件(panorama.py)开始运行并从目录中读取视频文件并对其进行处理,然后生成输出图像。
  5. 这些输出图像需要上传到新的存储桶或最初使用的相同存储桶。
  6. 实例应在此之后终止。

到目前为止我所做的是,我创建了一个 lambda 函数,只要将对象添加到该存储桶中就会触发该函数。它存储文件的名称和路径。我已经读到我现在需要使用 SQS 队列并将这个名称和路径元数据传递给队列并使用 SQS 来触发实例。然后,我需要在实例中运行一个脚本,该脚本从 SQS 队列中提取元数据,然后使用它将文件(mp4)从存储桶复制到实例。我该怎么做呢?我是 AWS 新手,因此不太了解 SQS 或如何传输元数据和自动触发实例等。

标签: python-3.xamazon-web-servicesamazon-ec2aws-lambdaamazon-sqs

解决方案


你的措辞有点混乱。它说你想“启动”一个实例(这表明该实例已经存在),但它说它想“终止”一个实例(这将永久删除它)。我将假设您实际上打算“停止”该实例以便再次使用它。

/var/lib/cloud/scripts/per-boot/您可以在目录中放置一个 shell 脚本。然后每次实例启动时都会执行此脚本

当实例完成处理后,它可以调用sudo shutdown now -h关闭实例。(或者,它可以告诉 EC2 停止实例,但使用起来shutdown更容易。)

有关详细信息,请参阅:EC2 实例完成任务后自动停止 - DEV 社区


推荐阅读