在 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 Functions Core Tools 4.0.5198 版或更新版本。
- 安裝 Azure Functions Core Tools 4.x 版。
- 安裝 Azure Functions 支援的Node.js版本。
- 安裝 Azure Functions 支援的 Python 版本。
安裝 Azure Functions 支援的 Java Developer Kit 版本。
安裝 Apache Maven 3.0 版或更新版本。
- Azure CLI 2.4 版或更新版本。
如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
若要將您建立的容器化函式應用程式映像發佈至容器登錄,您需要在本機計算機上執行的 Docker 標識符和 Docker 。 如果您沒有 Docker 識別符,您可以 建立 Docker 帳戶。
您也需要完成 Container Registry 快速入門的建立容器登錄 區段,以建立登錄實例。 記下完整的登入伺服器名稱。
建立並啟用虛擬環境
在適當的資料夾中,執行下列命令來建立並啟動名為 .venv
的虛擬環境。 請務必使用 Azure Functions 支援的其中一個 Python 版本 。
python -m venv .venv
source .venv/bin/activate
如果 Python 未在 Linux 發行版上安裝 venv 套件,請執行下列命令:
sudo apt-get install python3-venv
您會在此啟動的虛擬環境中執行所有後續命令。
建立及測試本機函式專案
在終端機或命令提示字元中,針對您選擇的語言執行下列命令,以在目前資料夾中建立函式應用程式專案:
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
會告知 Functions 運行時間要使用的 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
。 瀏覽器必須顯示回顯 Functions
的 「hello」 訊息,也就是提供給 name
查詢參數的值。
按 Ctrl+C (macOS 上的命令+C) 以停止主機。
建置容器映像並在本機驗證
(選擇性) 檢查項目資料夾根目錄中的 Dockerfile 。 Dockerfile 描述在 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 Hub 帳戶識別碼再次取代 <DOCKER_ID>
,並將埠自變數新增為 -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 上的命令+C) 停止執行。
將容器映像發佈至登錄
若要讓您的容器映像可供部署至裝載環境,您必須將其推送至容器登錄。
Azure Container Registry 是私人登錄服務,用於建置、儲存和管理容器映像和相關成品。 您應該使用私人登錄服務將容器發佈至 Azure 服務。
使用下列命令登入您的登入您的登入者:
az acr login --name <REGISTRY_NAME>
在上一個命令中,將 取代
<REGISTRY_NAME>
為您的 Container Registry 實例名稱。使用下列命令,以登入伺服器的完整名稱標記映像:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
取代登入伺服器的完整名稱,並以
<DOCKER_ID>
您的 Docker 識別碼取代<LOGIN_SERVER>
。使用下列命令將容器推送至您的登錄實例:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
使用下列命令來啟用內建系統管理員帳戶,讓 Functions 可以使用使用者名稱和密碼連線到登錄:
az acr update -n <REGISTRY_NAME> --admin-enabled true
使用下列命令來擷取管理員使用者名稱和密碼,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 儲存體 中是唯一的。 名稱必須包含三到 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 帳戶標識碼或 Container Registry 伺服器。 當您從自定義容器登錄進行部署時,映像名稱會指出登錄的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 中執行。 取代為記憶體帳戶名稱,並以<APP_NAME>
函式應用程式名稱取代 <STORAGE_NAME>
。
在 Azure 上叫用函式
因為您的函式會使用 HTTP 觸發程式,所以您會在瀏覽器中對其 URL 提出 HTTP 要求,或使用 curl 之類的工具來叫用它。
清除資源
如果您想要使用本文中建立的資源繼續使用 Azure Function,您可以將所有這些資源都保留到位。
當您完成此函式應用程式部署時,請刪除 AzureFunctionsContainers-rg
資源群組以清除該群組中的所有資源:
az group delete --name AzureFunctionsContainers-rg
這隻會移除本文中建立的資源。 基礎 Azure Arc 環境仍已就緒。