我想知道是否有某种方法可以在 Azure 云平台上实现以下目标:
根据输入参数和发布到 Azure 函数的文件,使用 C# 代码从 Azure 函数启动 Docker 容器(Azure 容器实例)。
容器启动后,必须启动容器内的软件来根据发布到 Azure 函数的输入文件和参数执行一些工作。
在 Docker 容器内的软件完成并将输出写入某个数据库(Azure 中也有 MS SQL Server)后,Azure 函数必须停止容器(也可以是轮询的不同 Azure 函数,例如,每分钟一次,检查任何 Docker 镜像是否没有执行任何工作)。
如果在 Docker 容器当前启动并运行时有请求传入 Azure 函数,这些函数会从同一镜像启动一个新的 Docker 容器并执行相同的操作。
需要启动和停止 Docker 容器的原因是为了降低成本,因为工作负载要求很高,需要使用多个 CPU 核心和大量 RAM 的实例。
最佳答案
在您的函数中,您可以使用 C# 中的 Microsoft.Azure.Management.ContainerInstance 命名空间启动和停止 ACI 中的容器。这是 link to the Nuget package和我找到的一个样本:
var containerGroup = azure.ContainerGroups.Define(containerGroupName)
.WithRegion(azureRegion)
.WithExistingResourceGroup(resourceGroupName)
.WithLinux()
.WithPublicImageRegistryOnly()
.WithoutVolume()
.DefineContainerInstance(containerGroupName)
.WithImage(containerImage)
.WithExternalTcpPort(80)
.WithCpuCoreCount(1.0)
.WithMemorySizeInGB(1)
.Attach()
.WithDnsPrefix(containerGroupName)
.Create();
实现目标的方法有很多。您可以使用 Logic App 使用 ACI connector 来启动和停止 ACI 中的容器,而不是使用函数。 。你可能会想 与此类似的工作流程:
- 添加一个将触发逻辑应用的操作,就像队列中的新消息一样。
- 使用连接器创建 ACI 容器组。
- 使用连接器在 ACI 中启动容器。
- 您可以观察容器状态以查看它是否已成功创建。
- 您可以通过使用 ACI 连接器设置环境变量(例如文件名或作业编号)来将值传递到容器。
- 您添加一个循环来监视容器中代码的完成情况(您在日志中发送的输出)
- 您使用连接器删除 ACI
您当然可以并行运行多个逻辑应用。
关于c# - 根据输入从 Azure 函数启动和停止 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60016663/