c# - 根据输入从 Azure 函数启动和停止 Docker 容器

标签 c# azure docker azure-functions azure-container-instances

我想知道是否有某种方法可以在 Azure 云平台上实现以下目标:

  1. 根据输入参数和发布到 Azure 函数的文件,使用 C# 代码从 Azure 函数启动 Docker 容器(Azure 容器实例)。

  2. 容器启动后,必须启动容器内的软件来根据发布到 Azure 函数的输入文件和参数执行一些工作。

  3. 在 Docker 容器内的软件完成并将输出写入某个数据库(Azure 中也有 MS SQL Server)后,Azure 函数必须停止容器(也可以是轮询的不同 Azure 函数,例如,每分钟一次,检查任何 Docker 镜像是否没有执行任何工作)。

  4. 如果在 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/

相关文章:

docker - 在 Docker Alpine 镜像中设置 NSCA 以进行被动 nagios 检查

linux - 在 Docker 中为多个应用程序分配不同的 IP 地址

c# - 在 .NET Core 中使用 JWT token 或 API key 的授权机制

azure - 在哪里设置 Azure ServiceBus 超时

java - 使用 MSI 从本地运行的 java 应用程序连接到 Azure Keyvault 的方法

azure - 如何关闭Azure应用服务上的端口8010

node.js - 无法从Docker Registry Remote API获得有效响应

C# 将多个数组合并为一个数组

c# - 无法表示的日期时间

c# - 如何在 SQL Server 2012 中加密某些行的某些列