在本機 Linux 容器中建立函數應用程式

本文說明如何使用 Azure Functions Core 工具,在本機電腦上的 Linux 容器中建立您的第一個函式,在本機驗證該函式,然後將容器化函式發佈至容器登錄。 從容器登錄,您可以輕鬆地將容器化函式部署至 Azure。

如需將容器化函式部署至 Azure 的完整範例 (其中包含本文所述的步驟),請參閱下列其中一篇文章:

您也可以從容器登錄使用現有的容器化函數應用程式,在 Azure 入口網站中建立函數應用程式。 如需詳細資訊,請參閱使用容器在 Azure 入口網站中建立

選擇您的開發語言

首先,使用 Azure Functions 工具,在使用特定語言 Linux 基礎映像的 Docker 容器中,建立專案程式碼作為函數應用程式。 請務必在文章頂端選取您所選擇的語言。

Core Tools 會自動為您的專案產生 Dockerfile,該專案會針對您的函式語言使用最新版的正確基礎映像。 您應該定期從最新的基礎映像中更新容器,並從容器的更新版本重新部署。 如需詳細資訊,請參閱建立容器化函數應用程式

必要條件

開始之前,您必須符合下列需求:

如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶

若要將您所建立的容器化函數應用程式映像發佈至容器登錄,您需要 Docker 識別碼,並在本機電腦上執行 Docker。 如果您沒有 Docker 識別碼,則可以建立 Docker 帳戶

您也需要完成容器登錄快速入門的建立容器登錄一節,以建立登錄執行個體。 請記下完整的登入伺服器名稱。

建立並啟用虛擬環境

在適用的資料夾中執行下列命令,以建立並啟用名為 .venv 的虛擬環境。 請務必使用 Azure Functions 支援的其中一個 Python 版本

python -m venv .venv
source .venv/bin/activate

如果 Python 未在您的 Linux 發行版本上安裝 venv 套件,請執行下列命令:

sudo apt-get install python3-venv

您將在這個已啟用的虛擬環境中執行所有後續命令。

建立和測試本機 Functions 專案

在終端機或命令提示字元中,針對您選擇的語言執行下列命令,以在目前的資料夾中建立函式應用程式專案:

func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker

在空的資料夾中,執行下列命令以從 Maven 原型產生 Functions 專案:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

-DjavaVersion 參數會告知函式執行階段要使用哪個 JAVA 版本。 若您想讓函式在 Java 11 上執行,請使用 -DjavaVersion=11。 若未指定 -DjavaVersion,Maven 預設為 JAVA 8。 如需詳細資訊,請參閱 JAVA 版本

重要

JAVA_HOME 環境變數必須設定為正確 JDK 版本的安裝位置,才能完成本文。

Maven 會要求您提供在部署時完成產生專案所需的值。 依照提示操作並提供下列資訊:

提示 Description
groupId com.fabrikam 此值可在所有專案中唯一識別您的專案,並遵循適用於 Java 的套件命名規則
artifactId fabrikam-functions 此值是 jar 的名稱 (不含版本號碼)。
version 1.0-SNAPSHOT 選取預設值。
套件 com.fabrikam.functions 此值是所產生函式程式碼的 Java 套件。 使用預設值。

輸入 Y 或按 Enter 進行確認。

Maven 會在名為 artifactId 的新資料夾中建立專案檔,在此範例中為 fabrikam-functions

--docker 選項會產生專案的 Dockerfile,這會定義適合用於 Azure Functions 和所選執行階段的容器。

瀏覽至專案資料夾:

cd fabrikam-functions

使用下列命令將函式新增至您的專案,其中,--name 引數是函式的唯一名稱,而 --template 引數會指定函式的觸發程序。 func new 會在您的專案中建立 C# 程式碼檔案。

func new --name HttpExample --template "HTTP trigger" --authlevel anonymous

使用下列命令將函式新增至您的專案,其中,--name 引數是函式的唯一名稱,而 --template 引數會指定函式的觸發程序。 func new 會建立符合函式名稱的子資料夾,其中包含名為 function.json 的組態檔。

func new --name HttpExample --template "HTTP trigger" --authlevel anonymous

若要在本機測試函式,請啟動專案根資料夾中的本機 Azure Functions 執行階段主機。

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

看到 HttpExample 端點寫入輸出之後,請瀏覽至該端點。 您應該會在回應輸出中看到歡迎訊息。

看到 HttpExample 端點寫入輸出之後,請瀏覽至 http://localhost:7071/api/HttpExample?name=Functions。 瀏覽器必須顯示 "hello" 訊息,回應 Functions,這是提供給 name 查詢參數的值。

Ctrl+C (在 macOS 上是 Command+C) 以停止主機。

建立容器映像並在本機進行驗證

(選用) 檢查專案根資料夾中的 DockerfileDockerfile 說明在 Linux 上執行函式應用程式所需的環境。 在 Azure Functions 基底映像頁面中可找到針對 Azure Functions 支援的完整基底映像清單。

在根專案資料夾中執行 docker build 命令,提供名稱 azurefunctionsimage 和標籤 v1.0.0。 將 <DOCKER_ID> 取代為 Docker Hub 帳戶識別碼。 此命令會建置容器的 Docker 映像。

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

當命令完成時,您就能在本機執行新容器。

若要驗證組建,請使用 docker run 命令在本機容器中執行映像 (同樣將 <DOCKER_ID> 取代為您的 Docker Hub 帳戶識別碼),並新增連接埠引數 -p 8080:80

docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0

映像在本機容器中啟動後,請瀏覽至 http://localhost:8080/api/HttpExample,該處必須顯示與過去相同的問候訊息。 由於您建立的 HTTP 觸發函式使用匿名授權,因此您可以直接呼叫在容器中執行的函式,而無須取得存取金鑰。 如需詳細資訊,請參閱授權金鑰

映像在本機容器中啟動後,請瀏覽至 http://localhost:8080/api/HttpExample?name=Functions,該處必須顯示與過去相同的 "hello" 訊息。 由於您建立的 HTTP 觸發函式使用匿名授權,因此您可以直接呼叫在容器中執行的函式,而無須取得存取金鑰。 如需詳細資訊,請參閱授權金鑰

驗證容器中的函數應用程式之後,請按 Ctrl+C (在 macOS 中為 Command+C) 以停止執行。

將容器映像發佈至登錄

若要讓您的容器映像可供部署至裝載環境,您必須將其推送至容器登錄。

Azure Container Registry 是私人登錄服務,用於建置、儲存和管理容器映像和相關成品。 您應該使用私人登錄服務,將容器發佈至 Azure 服務。

  1. 使用下列命令登入您的登錄執行個體:

    az acr login --name <REGISTRY_NAME>
    

    在上一個命令中,以容器登錄執行個體的名稱取代 <REGISTRY_NAME>

  2. 使用下列命令,以登錄登入伺服器的完整名稱標記映像:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    以登錄登入伺服器的完整名稱取代 <LOGIN_SERVER>,並以 Docker 識別碼取代 <DOCKER_ID>

  3. 使用下列命令將容器推送至您的登錄執行個體:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. 使用下列命令來啟用內建的系統管理員帳戶,讓 Functions 可以利用使用者名稱和密碼連線到登錄:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. 使用下列命令來擷取管理員的使用者名稱和密碼,Functions 需要這些資訊才能連線到登錄:

    az acr credential show -n <REGISTRY_NAME> --query "[username, passwords[0].value]" -o tsv
    

    重要

    管理帳戶的使用者名稱和密碼是重要認證。 請務必以安全的方式儲存這些資訊,絕對不要存放在公用存放庫等可存取的位置。

下一步