使用容器和 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
    

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

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

程式碼專案中有 Core Tools 產生的 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> 取代為登入伺服器名稱。

此時,您必須更新部署以使用新的映像。 下列範例會將函式應用程式更新為使用新的映像:

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. 在 [基本] 頁面中,使用下表中指定的函式應用程式設定。

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

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

  1. 在 [裝載選項和方案] 中,選擇 [Functions 進階]

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

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

*應用程式名稱在 Azure 容器應用程式環境內必須是唯一的。 預覽版不支援所有區域。 如需詳細資訊,請參閱容器應用程式裝載的考量

  1. 在 [裝載選項和方案] 中,選擇 [Azure 容器應用程式環境方案]

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    這會建立新的 Azure 容器應用程式環境資源來裝載函式應用程式容器。 如需詳細資訊,請參閱 Azure Functions 的 Azure 容器應用程式裝載

    根據預設,環境會建立在沒有區域備援的使用量方案中,以將成本降至最低。 您也可以選擇現有的容器應用程式環境。 若要了解環境,請參閱 Azure 容器應用程式環境

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

  2. 選取 [部署] 索引標籤,並取消選取 [使用快速入門映像]。 如果您未這麼做,便會從適用於您函式應用程式語言的基礎映像部署函式應用程式。

  3. 選擇您的 [映像類型],可以是公用或私人。 如果您使用 Azure Container Registry 或其他某些私人登錄,請選擇 [私人]。 提供 [映像] 名稱,包括登錄前置詞。 如果您使用私人登錄,請提供映像登錄驗證認證。

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

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

在 Azure Functions 中使用映像

從登錄部署函式應用程式容器時,Functions 會保有來源映像的相關資訊。 請使用下列命令來取得該映像的相關資料,或變更所使用的部署映像:

應用程式設定

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

啟用持續部署至 Azure

重要

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

您可以在每次更新登錄中的映像時,讓 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,然後選取 [建立]

    Screenshot showing how to add the webhook in your Docker Hub window.

  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 命令來檢視目前執行中的程序。

    Screenshot that shows Linux top command running in an SSH session.

下一步

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