簡體   English   中英

根據輸入從 Azure 函數啟動和停止 Docker 容器

[英]Start and stop Docker container from Azure function based on input

我想知道是否有某種方法可以在 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 中啟動和停止容器。 這是Nuget 包鏈接和我找到的示例:

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();

有很多方法可以實現您的目標。 您可以使用邏輯應用程序來啟動和停止使用ACI 連接器ACI 中的容器,而不是使用函數。 您可以想到與此類似的工作流程:

  • 添加將觸發邏輯應用程序的操作,就像隊列中的新消息一樣。
  • 使用連接器創建 ACI 容器組。
  • 使用連接器在 ACI 中啟動容器。
  • 您觀察容器狀態以查看它是否已成功創建。
  • 您可以通過使用 ACI 連接器設置 env 變量(如文件名或作業編號)來將值傳遞給容器。
  • 您添加一個循環來監視容器中代碼的完成情況(您在日志中發送的輸出)
  • 您使用連接器刪除 ACI

您當然可以並行運行多個邏輯應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM