共用方式為


使用容器和 Azure Functions

本文示範 Azure Functions 針對使用在 Azure 容器應用程式環境中執行的容器化函式應用程式所提供的支援。 如需詳細資訊,請參閱 Azure Functions 的 Azure 容器應用程式裝載

本文示範 Azure Functions 針對使用在 Linux 容器中執行的函式應用程式所提供的支援。

請在本文頂端選擇適用於您容器化函式應用程式的裝載環境。

如果您想要直接開始,下列文章會說明如何建立您的第一個在 Linux 容器中執行的函式,並將映像從容器登錄部署到支援的 Azure 裝載服務:

建立容器化函式應用程式

函式可讓您輕鬆地以由您建立和維護的 Linux 容器的形式,部署和執行函式應用程式。 Functions 會維護一組可在建立容器化函式應用程式時使用的語言特定基礎映像

重要

在建立自己的容器時,必須讓容器的基礎映像持續更新為最新的受支援基礎映像。 Azure Functions 的受支援基礎映像為語言特定,可在 Azure Functions 基礎映像存放庫中找到。

Functions 小組致力於發佈這些基礎映像的每月更新。 一般更新包括 Functions 執行階段和語言的最新次要版本更新與安全性修正。 請定期從最新的基礎映像更新容器,並重新部署更新後的容器版本。

如需如何從命令列建立本機容器化函式應用程式,並將映像發佈至容器登錄的完整範例,請參閱在本機容器中建立函式應用程式

產生 Dockerfile

Functions 工具會提供可使用函式程式碼專案來產生 Dockerfile 的 Docker 選項。 您可以將此檔案與 Docker 搭配使用,在衍生自正確基礎映像 (語言和版本) 的容器中建立函式。

Dockerfile 的建立方式取決於專案的建立方式。

  • 當您使用 Azure Functions Core Tools 建立 Functions 專案時,請在執行 func init 命令時包含 --docker 選項,如下列範例所示:

    func init --docker
    
  • 當您在現有的專案資料夾中執行 func init 命令時,也可以使用 --docker-only 選項將 Dockerfile 新增至現有專案,如下列範例所示:

    func init --docker-only
    

如需完整範例,請參閱在本機容器中建立函式應用程式

在容器中建立函式應用程式

程式碼專案中有 Functions 產生的 Dockerfile,便可以使用 Docker 在本機電腦上建立容器化的函式應用程式。 下列 docker build 命令會在本機目錄中建立專案中容器化函式的映像:

docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .

如需如何建立容器的範例,請參閱在本機建置容器映像並驗證

更新登錄中的映像

當您變更函式程式碼專案或需要更新至最新的基礎映像時,您必須在本機重建容器,並將更新後的映像重新發佈至您選擇的容器登錄。 下列命令會從根資料夾重建有更新後版本號碼的映像,並將其推送至登錄:

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

請將 <REGISTRY_NAME> 取代為您的 Container Registry 執行個體,並將 <LOGIN_SERVER> 取代為登入伺服器名稱。

此時,您必須更新現有部署以使用新的映像。 您可使用 Azure CLI 或在 Azure 入口網站中,更新函式應用程式以使用新的映像:

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

在此範例中,<IMAGE_NAME> 是具有版本的新映像完整名稱。 私人登錄需要您提供使用者名稱和密碼。 請安全地儲存這些認證。

也請考慮啟用持續部署

使用容器的 Azure 入口網站建立

當您在 Azure 入口網站中建立函式應用程式時,您可以選擇從容器登錄中的映像部署函式應用程式。 若要了解如何在容器登錄中建立容器化的函式應用程式,請參閱在容器中建立函式應用程式

下列步驟會從容器登錄建立及部署現有的容器化函式應用程式。

  1. 從 Azure 入口網站功能表或 [首頁] 頁面,選取 [建立資源]

  2. 在 [新增] 頁面中,選取 [計算]>[函數應用程式]

  3. 在 [選取裝載選項] 下,選擇 [進階方案]>[選取]

    這會在進階方案中建立 Azure Functions 所裝載的函式應用程式,其支援動態縮放。 您也可以選擇在 App Service 方案中執行,但在這類專用方案中,您必須管理函式應用程式的縮放

  4. 在 [基本] 頁面中,使用下表中指定的函式應用程式設定。

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 要在其中建立函式應用程式的訂用帳戶。
    資源群組 myResourceGroup 要在其中建立函式應用程式的新資源群組名稱。 您應該建立資源群組,因為在現有的資源群組中建立新的函式應用程式時,存在已知的限制
    函數應用程式名稱 唯一名稱* 用以識別新函式應用程式的名稱。 有效的字元是 a-z (不區分大小寫)、0-9-
    您要部署程式碼或容器映像嗎? 容器映像 從登錄部署容器化的函式應用程式。 若要在登錄中建立函式應用程式,請參閱在本機容器中建立函式應用程式
    區域 慣用區域 選取的區域應靠近您或靠近函式能夠存取的其他服務。
    Linux 方案 新方案 (預設值) 建立新的進階方案來裝載您的應用程式。 您也可以選擇現有的進階方案。
    定價方案 彈性進階 EP1 EP1 是最實惠的方案。 如有需要,您可以選擇較大的方案。
    區域備援 停用 您在非生產應用程式中不需要此功能。

    *應用程式名稱在所有 Azure Functions 裝載的應用程式之間必須具有全域唯一性。

  5. 接受在 [儲存體] 索引標籤上建立新儲存體帳戶的預設選項,並在 [監視] 索引標籤上新建 Application Insight 執行個體。您也可以選擇使用現有的儲存體帳戶或 Application Insights 執行個體。

  6. 選取 [檢閱 + 建立],以檢閱應用程式組態選項。

  7. 在 [檢閱 + 建立] 頁面中檢閱您的設定,然後選取 [建立] 來使用預設的基底映像佈建函數應用程式。

  8. 建立函數應用程式資源之後,請選取 [移至資源],然後在函數應用程式頁面中選取 [部署中心]

  9. 部署中心內,您可以將容器登錄當作映像的來源並與之連線。 您也可以啟用 GitHub Actions 或 Azure Pipelines,讓登錄中的容器更新具有更強固的持續部署。

使用容器的 Azure 入口網站建立

當您在 Azure 入口網站中建立容器應用程式裝載的函式應用程式時,您可以選擇從容器登錄中的映像部署函式應用程式。 若要了解如何在容器登錄中建立容器化的函式應用程式,請參閱在容器中建立函式應用程式

下列步驟會從容器登錄建立及部署現有的容器化函式應用程式。

  1. 從 Azure 入口網站功能表或 [首頁] 頁面,選取 [建立資源]

  2. 在 [新增] 頁面中,選取 [計算]>[函數應用程式]

  3. 在 [選取裝載選項] 底下,選擇 [容器應用程式環境]>[選取]

  4. 在 [基本] 頁面中,使用下表中指定的函式應用程式設定。

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶 要在其中建立函式應用程式的訂用帳戶。
    資源群組 myResourceGroup 要在其中建立函式應用程式的新資源群組名稱。 您應該建立資源群組,因為在現有的資源群組中建立新的函式應用程式時,存在已知的限制
    函數應用程式名稱 唯一名稱* 用以識別新函式應用程式的名稱。 有效的字元是 a-z (不區分大小寫)、0-9-
    區域 慣用區域 選取的區域應靠近您或靠近函式能夠存取的其他服務。

    *應用程式名稱在 Azure 容器應用程式環境內必須是唯一的。

  5. 仍在 [基本資料] 頁面上,接受 [Azure 容器應用程式環境] 的建議新環境。 為了降低成本,會在具有預設工作負載設定檔但沒有區域備援的 [取用 + 專用] 中建立新的預設環境。 如需詳細資訊,請參閱 Azure Functions 的 Azure 容器應用程式裝載

    您也可以選擇使用現有的容器應用程式環境。 若要建立自訂環境,請改為選取 [新建]。 在 [建立容器應用程式環境] 頁面中,您可以新增非預設的工作負載設定檔或啟用區域備援。 若要了解環境,請參閱 Azure 容器應用程式環境

  6. 選取 [部署] 索引標籤,並取消選取 [使用快速入門映像]。 否則,便會從適用於您函式應用程式語言的基礎映像部署函式應用程式。

  7. 選擇您的 [映像類型],可以是公用或私人。 如果您使用 Azure Container Registry 或其他某些私人登錄,請選擇 [私人]。 提供 [映像] 名稱,包括登錄前置詞。 如果您使用私人登錄,請提供映像登錄驗證認證。 [公用] 設定僅支援在 Docker Hub 中公開儲存的映像。

  8. 在 [容器資源配置] 底下,選取所需的 CPU 核心數目和可用的記憶體。 如果您的環境已新增其他工作負載設定檔,您可以選取非預設的工作負載設定檔。 此頁面上的選擇會影響裝載應用程式的成本。 請參閱容器應用程式定價頁面,以預估您的潛在成本。

  9. 選取 [檢閱 + 建立],以檢閱應用程式組態選項。

  10. 在 [檢閱 + 建立] 頁面上檢閱您的設定,然後選取 [建立] 來佈建函式應用程式,以及從登錄部署容器映像。

在 Azure Functions 中使用映像

從登錄部署函式應用程式容器時,Functions 會保有來源映像的相關資訊。

請使用下列命令來取得該映像的相關資料,或變更所使用的部署映像:

容器應用程式的工作負載設定檔

工作負載設定檔是容器應用程式的功能,可讓您更妥善地控制部署資源。 Azure 容器應用程式上的 Azure Functions 也支援工作負載設定檔。 如需詳細資訊,請參閱 Azure 容器應用程式中的工作負載設定檔

您也可以設定為您應用程式配置的 CPU 和記憶體資源數量。

您可以使用 Azure CLI 或在 Azure 入口網站中建立和管理工作負載設定檔和資源配置。

當您建立容器應用程式環境時,您就可以啟用工作負載設定檔。 如需範例,請參閱在設定檔中建立容器應用程式

您可以在環境中新增、編輯和刪除設定檔。 如需範例,請參閱新增設定檔

當您在已啟用工作負載設定檔的環境中建立容器化函數應用程式時,您也應該指定要在其中執行的設定檔。 您可使用 az functionapp create 命令的 --workload-profile-name 參數來指定設定檔,如下列範例所示:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI> --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

az functionapp create 命令中,--environment 參數會指定容器應用程式環境,而 --image 參數會指定要用於函數應用程式的映像。 在此範例中,請將 <STORAGE_NAME> 取代為您在上一節中用於儲存體帳戶的名稱。 此外,請使用適合您的全域唯一名稱來取代 <APP_NAME>

若要設定配置給應用程式的資源,請將 <CPU_COUNT> 取代為所需的虛擬 CPU 數目,至少為 0.5,最多可達設定檔允許的最大值。 針對 <MEMORY_SIZE>,請選擇專用記憶體數量,從 1 GB 到設定檔所允許的最大值。

您可以使用 az functionapp container set 命令來管理應用程式所使用的已配置資源和工作負載設定檔。

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

應用程式設定

Azure Functions 可讓您以標準方式使用容器化函式應用程式的應用程式設定。 如需詳細資訊,請參閱使用應用程式設定

啟用持續部署至 Azure

當您在 Azure 容器應用程式上裝載容器化函式應用程式時,有兩種方式可從原始程式碼存放庫設定持續部署:

您目前無法根據容器登錄中的映像變更持續部署容器。 您必須改為使用這些原始程式碼型持續部署管線。

啟用持續部署至 Azure

重要

彈性進階方案中執行容器時,目前不支援以 Webhook 為基礎的部署。 如果您需要使用本節所述的持續部署方法,請改為在 App Service 方案中部署容器。 在彈性進階方案中執行時,每當您更新存放庫中的容器時,都必須手動重新啟動應用程式。

您也可以使用 Azure PipelinesGitHub Actions,從原始程式碼存放庫設定持續部署。

您可以在每次更新登錄中的映像時,讓 Azure Functions 自動更新您的映像部署。

  1. 使用下列命令啟用持續部署,並取得 Webhook URL:

    az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
    

    az functionapp deployment container config 命令會啟用持續部署,並傳回部署 Webhook URL。 您稍後隨時可以使用 az functionapp deployment container show-cd-url 命令擷取此 URL。

    如前所述,請將 <APP_NAME> 取代為您的函式應用程式名稱。

  2. 將部署 Webhook URL 複製到剪貼簿。

  3. 開啟 Docker Hub 並登入,然後選取導覽列上的 [存放庫]。 找出並選取映像,選取 [Webhook] 索引標籤、指定 [Webhook 名稱]、在 [Webhook URL] 中貼入您的 URL,然後選取 [建立]

    顯示如何在 Docker Hub 視窗中新增 Webhook 的螢幕擷取畫面。

  4. 設定 Webhook 後,每當您在 Docker Hub 中更新映像時,Azure Functions 就會重新部署您的映像。

啟用 SSH 連線

SSH 可讓容器和用戶端之間進行安全通訊。 啟用 SSH 之後,您就能使用 App Service 進階工具 (Kudu) 連線到您的容器。 為了方便您使用 SSH 連線至容器,Azure Functions 提供已啟用 SSH 的基底映像。 您只需要編輯 Dockerfile,然後重建並重新部署映像。 接著,您可以透過進階工具 (Kudu) 連線至容器。

  1. 在您的 Dockerfile 中,將字串 -appservice 附加至 FROM 指令中的基礎映像,如下列範例所示:

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    此範例使用已啟用 SSH 的 Node.js 18 版基礎映像版本。 請瀏覽 Azure Functions 基礎映像存放庫,確認您使用的是已啟用 SSH 的最新版基礎映像。

  2. 使用 docker build 命令重建映像,並將 <DOCKER_ID> 取代為您的 Docker Hub 帳戶識別碼,如下列範例所示。

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. 將已更新的映像推送至 Docker Hub,其所需時間應該會比第一次推送時少很多。 這次只需要上傳映像的更新區段。

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Azure Functions 會自動將映像重新部署至您的函式應用程式;此程序所需的時間不到一分鐘。

  5. 在瀏覽器中開啟 https://<app_name>.scm.azurewebsites.net/,並將 <app_name> 取代為您的唯一名稱。 此 URL 是您函式應用程式容器的進階工具(Kudu) 端點。

  6. 登入您的 Azure 帳戶,然後選取 [SSH],以建立與容器的連線。 如果 Azure 仍在更新容器映像,連線可能需要幾分鐘的時間。

  7. 建立與容器的連線之後,執行 top 命令來檢視目前執行中的程序。

    此螢幕擷取畫面顯示在 SSH 工作階段中執行的 Linux top 命令。

下列文章會提供有關部署和管理容器的詳細資訊: