在Heroku上托管应用程序时,我经常通过代码中的Heroku API触发一次性dynos,以便在后台进行繁重的工作。我最近在AWS上设置了一些堆栈,并使用AWS ECS运行任务遵循类似的模式。
我没有使用长时间运行的队列工作程序,因为硬件资源根据特定任务而变化很大,并且通常工作负载发生在峰值中。
对于本地开发,我通常通过在正在运行的容器中执行后台任务或从控制台手动触发后台命令来跳过此主题。在本地运行一次性容器的好方法是什么?
答案 0 :(得分:0)
ECS支持计划任务,如果您知道何时计划峰顶,则可以使用计划任务按计划启动Fargate容器。
如果您不这样做,我们所做的就是编写一个小的API网关-> Lambda函数,该函数基本上动态启动具有在POST中定义的一些变量的fargate容器,这些变量在API网关端点的API(如CPU / Mem / port等)中定义。或预先创建任务定义,然后将任务def传递给api,如果您知道容器的大多数“设置”应该是什么,则这是另一种选择。
答案 1 :(得分:0)
您可以简单地从容器内部调用ECS RunTask API调用。
您需要做的就是设置ECS任务角色以拥有runtask权限,并在容器中具有aws cli或任何aws sdk来调用runtask调用。
答案 2 :(得分:0)
您可以将Docker套接字作为卷传递
volumes:
- /var/run/docker.sock:/var/run/docker.sock
之后,您可以在容器内运行docker命令,它们将由docker在主机上执行。
特别是您可以运行
docker run ...
或
docker start ...
(也许您需要通过Dockerfile
中的命令在您的容器中安装docker)