共用方式為


在 Azure Arc 上建立您的第一個容器化 Azure Functions (預覽)

在本文中,您會建立在 Linux 容器中執行的函數應用程式,並從容器登錄將它部署到 已啟用 Azure Arc 的 Kubernetes 叢集。 建立自己的容器時,您可以自訂函數應用程式的執行環境。 若要深入了解,請參閱 Azure Arc 上的 App Service、Functions 和 Logic Apps

注意

在已啟用 Azure Arc 的 Kubernetes 叢集上部署自訂容器的支援目前處於預覽狀態。

您也可以將函式發佈至已啟用 Azure Arc 的 Kubernetes 叢集,而不需要先建立容器。 若要深入了解,請參閱在 Azure Arc (預覽) 上建立您的第一個函式

選擇您的開發語言

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

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

必要條件

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

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

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

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

建立並啟用虛擬環境

在適用的資料夾中執行下列命令,以建立並啟用名為 .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"

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

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

若要在本機測試函式,請啟動專案根資料夾中的本機 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>
    

    在上一個命令中,以 Azure Container Registry 執行個體的名稱取代 <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
    

    重要

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

建立 App Service Kubernetes 環境

開始之前,您必須為已啟用 Azure Arc 的 Kubernetes 叢集建立 App Service Kubernetes 環境

注意

當您建立環境時,請務必記下包含自訂位置的自訂位置名稱和資源群組名稱。 您可以使用這些識別碼來尋找自訂位置識別碼,而您在環境中建立函數應用程式時需要此識別碼。

如果您未建立環境,則請洽詢叢集管理員。

新增 Azure CLI 延伸模組

Azure Cloud Shell 中啟動 Bash 環境。

由於這些 CLI 命令還不屬於核心 CLI 集合,因此使用下列命令予以新增:

az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

建立 Azure 資源

您需要先建立兩個以上的資源,才能將容器部署至新的 App Service Kubernetes 環境:

  • 一個儲存體帳戶。 雖然本文會建立儲存體帳戶,但在某些情況下,可能不需要儲存體帳戶。 如需詳細資訊,請參閱儲存體考量一文中的已啟用 Azure Arc 的叢集
  • 函數應用程式,這提供用於執行容器的內容。 函數應用程式會在 App Service Kubernetes 環境中執行,並對應至本地函數專案。 函式應用程式可讓您將多個函式以邏輯單位分組,以方便您管理、部署和共用資源。

注意

函數應用程式會在專用 (App Service) 方案中的 App Service Kubernetes 環境中執行。 當您在沒有現有方案的情況下建立函數應用程式時,會為您建立方案。

建立儲存體帳戶

使用 az storage account create 命令,在資源群組和區域中建立一般用途的儲存體帳戶:

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

注意

在某些情況下,可能不需要儲存體帳戶。 如需詳細資訊,請參閱儲存體考量一文中的已啟用 Azure Arc 的叢集

在上述範例中,請將 <STORAGE_NAME> 取代為適合您且在 Azure 儲存體中是唯一的名稱。 名稱只能包含 3 到 24 個字元的數字和小寫字母。 Standard_LRS 會指定受 Functions 支援的一般用途帳戶。 --location 值是標準 Azure 區域。

建立函數應用程式

執行 az functionapp create 命令,在環境中建立新的函數應用程式。

az functionapp create --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 

在此範例中,將 <CUSTOM_LOCATION_ID> 取代為您為 App Service Kubernetes 環境所決定的自訂位置識別碼。 也請將 <STORAGE_NAME> 取代為您在上一個步驟中使用的帳戶名稱、將 <APP_NAME> 取代為全域唯一名稱,並將 <DOCKER_ID><LOGIN_SERVER> 分別取代為您的 Docker Hub 帳戶識別碼或容器登錄伺服器。 從自訂容器登錄進行部署時,映像名稱會指出登錄的 URL。

當您第一次建立函數應用程式時,會從您的 Docker Hub 中提取初始映像。

設定必要的應用程式設定

執行下列命令,以建立儲存體帳戶連接字串的應用程式設定:

storageConnectionString=$(az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv)
az functionapp config appsettings set --name <app_name> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=$storageConnectionString

此程式碼必須在本機電腦的 Cloud Shell 或 Bash 中執行。 將 <STORAGE_NAME> 取代為儲存體帳戶的名稱,並將 <APP_NAME> 取代為函數應用程式名稱。

在 Azure 上叫用函式

由於您的函式會使用 HTTP 觸發程序,因此您在叫用函式時,可以在瀏覽器中對其 URL 提出 HTTP 要求,或使用 curl 之類的工具。

將發佈命令的輸出中顯示的完整叫用 URL 複製到瀏覽器網址列中 (請附加查詢參數 ?name=Functions)。 瀏覽器應該會顯示與您在本機執行函式時類似的輸出。

使用瀏覽器在 Azure 上執行函式的輸出

清除資源

如果您想使用您在本文中建立的資源來繼續使用 Azure 函式,您可以保留所有這些資源。

當您完成此函數應用程式部署時,請刪除 AzureFunctionsContainers-rg 資源群組,以清除該群組中的所有資源:

az group delete --name AzureFunctionsContainers-rg

這只會移除本文中建立的資源。 基礎 Azure Arc 環境仍在原位。

下一步