我有一个相当简单的Unix shell脚本,打包在Azure容器注册表中托管的Alpine Linux Docker容器中。 VM使用cron运行此脚本:

docker login <snip>
docker pull example.com/bar:latest
docker run  example.com/bar:latest


我可以不使用VM而是使用Azure服务吗,也许可以使用某种调度程序在Azure容器实例上运行此脚本?

我的动机不是想要维护和购买VM。

#1 楼

如您建议的那样,Azure容器实例
(ACI)可能是一个不错的选择。这些使您可以直接在Azure上运行容器,而无需管理VM,并按使用容器的时间计费。

尽管该博客上的一个演示中提到了Kubernetes,但是ACI的想法是您可以使用az container create通过Azure CLI创建容器,就像在本地工作站上使用docker create一样。

要创建容器,可以使用Azure CLI(az命令,请参阅快速入门文档)或Azure Cloud Shell。

您需要按计划从某个地方创建/运行容器否则-Azure Functions可能是从计划函数运行“容器创建”命令的好地方。它支持bash,PowerShell和其他语言-全部在Windows上运行。

如果您想在不运行VM或不学习Kubernetes的情况下继续使用Docker容器,那么这可能是个不错的选择。

或者,您可以将所有代码移入Azure函数,但这是一个更大的决定。

更新:2019年1月-Azure Logic Apps可用于运行计划任务好吧。

评论


我不知道我可以将PowerShell或Bash用于Azure Functions!谢谢

–西门·穆尔德(Sijmen Mulder)
17年7月30日在12:12

是的,您可以从Azure Functions运行任何可执行文件,并且在本概述文档中明确提到了bash。要调用PowerShell模块,请参阅此博客。

– RichVel
17年7月31日在5:51



通常会使用Azure功能,AWS Lambda等云功能来运行用于配置云服务的安装脚本(例如,设置新的云环境)。因此,您可以期望所有无服务器服务和框架都支持运行bash或类似服务。传统上,您要设置的第一台VM是一台“控制主机”服务器,用作运行所有环境的所有设置的位置。无服务器运行所有此类脚本意味着无需主机付费。如果遭到入侵,控制服务器将泄露您的环境,旧脚本以及可能缓存的密码的地图。无服务器bash更安全。

–simbo1905
19年1月4日在6:55

不是所有的FaaS(无服务器)服务都支持bash。实际上,AWS Lambda仅通过自定义图层支持bash,自定义图层是2018年末添加的功能-您可以使用此开源图层来简化bash的运行。通常,无服务器/ FaaS服务支持特定的语言,一些提供商启用了扩展语言的方式-例如,AWS具有Layers,而Google具有允许任何Docker容器运行的FaaS服务。

– RichVel
20-2-1在8:26

为简单起见,如果您不想使用图层-您可以编写一个运行bash的Node / Python Lambda,而无需使用图层-请参见lambdash作为一个示例。

– RichVel
20年2月1日在8:33

#2 楼

对于替代方法,我将调查Azure函数:


https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-overview
https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-create-scheduled-function

没有VM持续运行。

#3 楼

预定的devops管道是一种可重复运行的简单,免费的方式来运行Azure cli任务。

https://docs.microsoft.com/zh-cn/azure/devops/pipelines/process/ Scheduled-triggers?view = azure-devops&tabs = yaml