我有一个dockerized Python进程,客户端希望每月运行一次或两次。它调用许多Google API,并将结果存储在Google表格中。它不接受网络请求。我想提供一个“魔术按钮”,该按钮将旋转Docker容器,然后关闭所有容器。

一些背景:我之前已通过Docker Cloud将其部署到AWS EC2微型实例。我的客户拥有一个Docker Cloud帐户,并且能够相对轻松地按需运行该容器。此工作流程存在两个问题:


所配置的EC2实例(Docker主机)正在24/7运行,无论Docker容器是否已运行。这变得很昂贵。
一个月前关闭了Docker云。

替代品似乎是Google和AWS Kubernetes服务。我的保留意见是,它们对于我的客户来说太复杂了。忠告?

评论

此过程需要运行多长时间?

将python代码烘烤到AWS lambda中

@PrestonM,约有25分钟的数百个受限制的网络API调用。

@Tensibai,我认为是这样,但是我的客户需要一个AWS账户,并且需要学习如何启动Lambda。绝对是一个选择,但是我已经有了这个功能齐全的可移植Docker容器,我应该可以将它简单地扔到云上:)

他们不需要了解Lambda,您可以通过API Gateway,S3或任何其他受支持的触发器给他们一个“按钮”。话虽如此,对于Lambda调用,25分钟的时间大约是其5倍:P

#1 楼

AWS现在提供Fargate,由他们管理,而不是像ECS这样的服务,您可以为其运行服务器并由它们管理控制平面。 Fargate基本上是“无服务器” ECS。您甚至可以使用计划的cloudwatch来偶尔在fargate ECS群集上按计划运行某些任务。因此,您只为所用的东西付费。需要考虑的一点是,fargate比在您自己的EC2实例上运行的ECS贵很多,但是如果您频繁运行,则可能会节省相当多的费用。自动化类似的东西。因此,创建一个带有ASG支持的ECS集群,并调整规模以匹配ECS需求,然后使用cloudwatch启动该容器。然后,ECS可以上下扩展,但这很棘手,因为该方法通常用于基于cloutwatch触发器自动缩放ECS集群,因此,由于您在技术上很熟练,因此您可能不得不在cloudwatch中乱砍,甚至可能一起砍掉lambda脚本不能按预期方式使用它。最后,这可能是最具成本效益的,但是在您的情况下,节省的成本可以忽略不计。

我认为Kubernetes是十吨重的锤子,您将用它来挂画。在墙壁上。

您可以探索这两种选择,看看它们是否具有成本效益并且易于管理。其他容器编排通常会显得过大,ECS具有愚蠢简单的优点(通常是缺点),您只需支付很少的钱,并且基本上没有控制平面的操作开销。

#2 楼

最便宜的方法是使用Heroku的Container Registry。

它是完全免费的,易于使用和部署的(您甚至不需要heroku CLI,只需docker用您的身份验证令牌)

虽然它可能不是最好的,但根据您的评论,我认为这对您应该很好,请参见此处的缺点。 .sh。

#3 楼

您可以混合使用Zappa和Hug的强大功能,在无服务器的AWS Lambda函数中转换代码,仅在python进程主函数中添加一个装饰器。
部署到具有zappa deploy prod的AWS Lambda,您仅需要每月两次调用返回的URL。

#4 楼

虽然我通常会同意Kubernetes是过大的其他答案,但KubeSail尽可能简化了它,以使其易于执行像您这样的任务。有一个免费套餐可以让您无限期地开展工作。您只需要登录GitHub,获取Kube配置,然后就可以使用以下命令: dockerhub(或其他注册表)上的映像名称,然后运行
选项:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

全面披露,我是KubeSail创始人之一

#5 楼

亚马逊的ECS服务非常简单,您可以安排容器任务

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html

#6 楼

现成的ec2模块具有必需的功能(启动实例,运行一些任务然后终止它们)。甚至还有示例剧本。