快速入門:從命令列在 Azure 中建立 JAVA 函式
在本文中,您會使用命令列工具建立可回應 HTTP 要求的 Java 函式。 在本機測試程式碼之後,您可以將其部署到 Azure Functions 的無伺服器環境。
如果 Maven 不是您慣用的開發工具,請參閱供 Java 開發人員參考的類似教學課程:
完成本快速入門後,您的 Azure 帳戶中會產生幾美分或更少的少許費用。
設定您的本機環境
開始之前,您必須具備下列條件:
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
Azure CLI 2.4 版或更新版本。
JAVA Developer Kit 第 8、11、17、21 版 (僅限 Linux)。
JAVA_HOME
環境變數必須設定為正確 JDK 版本的安裝位置。Apache Maven 3.0 版或更高版本。
安裝 Azure Functions Core Tools
安裝 Core Tools 的建議方式取決於本機開發電腦的作業系統。
下列步驟使用 Windows 安裝程式 (MSI) 來安裝 Core Tools v4.x。 如需其他套件型安裝程式的詳細資訊,請參閱 Core Tools 讀我檔案。
根據您的 Windows 版本,下載並執行 Core Tools 安裝程式:
- v4.x - Windows 64 位元 (建議。Visual Studio Code 偵錯需要 64 位元。)
- v4.x - Windows 32 位元
如果您之前使用 Windows 安裝程式 (MSI) 在 Windows 上安裝 Core Tools,則應該先從 [新增移除程式] 解除安裝舊版本,再安裝最新版本。
建立本機函式專案
在 Azure Functions 中,函式專案是包含一或多個個別函式的容器,而每個函式分別會回應特定的觸發程序。 專案中的所有函式會共用相同的本機和裝載設定。 在本節中,您將建立包含單一函式的函式專案。
在空的資料夾中,執行下列命令以從 Maven 原型 \(英文\) 產生 Functions 專案。
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8
重要
- 若您想讓函式在 Java 11 上執行,請使用
-DjavaVersion=11
。 若要深入了解,請參閱 Java 版本。 JAVA_HOME
環境變數必須設定為正確 JDK 版本的安裝位置,才能完成本文。
- 若您想讓函式在 Java 11 上執行,請使用
Maven 會要求您提供在部署時完成產生專案所需的值。
當系統提示時,提供下列值:提示 值 Description groupId com.fabrikam
此值可在所有專案中唯一識別您的專案,並遵循適用於 Java 的套件命名規則。 artifactId fabrikam-functions
此值是 jar 的名稱 (不含版本號碼)。 version 1.0-SNAPSHOT
選擇預設值。 套件 com.fabrikam
此值是所產生函式程式碼的 Java 套件。 使用預設值。 輸入
Y
或按 Enter 進行確認。Maven 會以 artifactId 名稱在新資料夾中建立專案檔案,在此例中為
fabrikam-functions
。瀏覽至專案資料夾:
cd fabrikam-functions
此資料夾會包含專案的各種檔案,包括名為 local.settings.json 和 host.json 的組態檔。 由於 local.settings.json 可能會包含從 Azure 下載的秘密,因此 .gitignore 檔案依預設會將該檔案排除在原始檔控制以外。
(選擇性) 檢查檔案內容
如有需要,您可以跳到在本機執行函式,並於稍後再檢查檔案內容。
Function.java
Function.java 包含 run
方法,會接收 request
變數中的要求資料,而該變數是一個以 HttpTrigger 註釋裝飾的 HttpRequestMessage,可定義觸發程序行為。
package com.fabrikam;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import java.util.Optional;
/**
* Azure Functions with HTTP Trigger.
*/
public class Function {
/**
* This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
* 1. curl -d "HTTP Body" {your host}/api/HttpExample
* 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
*/
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
final String query = request.getQueryParameters().get("name");
final String name = request.getBody().orElse(query);
if (name == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
} else {
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
}
}
回應訊息是由 HttpResponseMessage.Builder API 所產生。
pom.xml
為裝載應用程式所建立的 Azure 資源設定,會定義於外掛程式的 configuration 元素中,並在產生的 pom.xml 檔案中使用 com.microsoft.azure
的 groupId。 例如,下方的 configuration 元素會指示以 Maven 為基礎的部署,以在 westus
區域的 java-functions-group
資源群組中建立函式應用程式。 函式應用程式本身會在 java-functions-app-service-plan
方案所裝載的 Windows 上執行,預設為無伺服器取用方案。
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<version>${azure.functions.maven.plugin.version}</version>
<configuration>
<!-- function app name -->
<appName>${functionAppName}</appName>
<!-- function app resource group -->
<resourceGroup>java-functions-group</resourceGroup>
<!-- function app service plan name -->
<appServicePlanName>java-functions-app-service-plan</appServicePlanName>
<!-- function app region-->
<!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-regions for all valid values -->
<region>westus</region>
<!-- function pricingTier, default to be consumption if not specified -->
<!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers for all valid values -->
<!-- <pricingTier></pricingTier> -->
<!-- Whether to disable application insights, default is false -->
<!-- refers https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details for all valid configurations for application insights-->
<!-- <disableAppInsights></disableAppInsights> -->
<runtime>
<!-- runtime os, could be windows, linux or docker-->
<os>windows</os>
<javaVersion>8</javaVersion>
</runtime>
<appSettings>
<property>
<name>FUNCTIONS_EXTENSION_VERSION</name>
<value>~4</value>
</property>
</appSettings>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
您可以變更這些設定,以控制在 Azure 中建立資源的方式,例如,在初始部署之前將 runtime.os
從 windows
變更為 linux
。 如需 Maven 外掛程式支援的設定完整清單,請參閱組態詳細資料。
FunctionTest.java
原型也會產生函式的單元測試。 變更函式以新增繫結或將新函式新增至專案時,也需要修改 FunctionTest.java 檔案中的測試。
在本機執行函式
啟動 LocalFunctionProj 資料夾中的本機 Azure Functions 執行階段主機,以執行您的函式:
mvn clean package mvn azure-functions:run
在輸出的結尾處,應該會出現下列幾行:
... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...
注意
如果 HttpExample 未如上顯示,表示您可能不是從專案的根資料夾啟動主機。 在此情況下,請使用 Ctrl+C 停止主機,瀏覽至專案的根資料夾,然後再次執行先前的命令。
從這個輸出中將
HttpExample
函式的 URL 複製到瀏覽器,並附加查詢字串?name=<YOUR_NAME>
,使其成為完整的 URL (如http://localhost:7071/api/HttpExample?name=Functions
)。 瀏覽器應該會顯示訊息,回應您的查詢字串值。 您在其中啟動專案的終端機,也會在您提出要求時顯示記錄輸出。完成作業後,請使用 Ctrl+C 並選擇
y
以停止函式主機。
將函式專案部署至 Azure
第一次部署函式應用程式時,會在 Azure 中建立函式專案和相關資源。 為裝載應用程式所建立的 Azure 資源設定會在 pom.xml 檔案中定義。 在本文中,您將接受預設值。
提示
若要建立在 Linux 上執行而不是在 Windows 上執行的函式應用程式,請將 pom.xml 檔案中的 runtime.os
元素從 windows
變更為 linux
。 這些區域支援以耗用量方案執行 Linux。 您的應用程式不能在相同的資源群組中在 Linux 和 Windows 上執行。
您必須先使用 Azure CLI 或 Azure PowerShell 登入 Azure 訂用帳戶,才能進行部署。
az login
az login 命令會將您登入您的 Azure 帳戶。
使用下列命令,將您的專案部署至新的函式應用程式。
mvn azure-functions:deploy
這會在 Azure 中建立下列資源:
- 資源群組。 命名為 java-functions-group。
- 。 Functions 所需。 此名稱會根據儲存體帳戶名稱需求隨機產生。
- 主控方案。 在 westus 中以無伺服器方式主控您的函式應用程式。 名稱為 java-functions-app-service-plan。
- 函式應用程式。 函式應用程式是您函式的部署和執行單位。 系統會根據您的 artifactId 隨機產生名稱,此名稱會附加隨機產生的號碼。
部署會封裝專案檔案,並使用 zip deployment 將其部署至新的函式應用程式, 且程式碼會從 Azure 中的部署套件執行。
重要
儲存體帳戶可用來儲存重要的應用程式資料,有時還包含應用程式的程式碼本身。 您應該限制其他應用程式和使用者存取儲存體帳戶。
在 Azure 上叫用函式
由於您的函式會使用 HTTP 觸發程序,因此您在叫用函式時,可以在瀏覽器中對其 URL 提出 HTTP 要求,或使用 curl 之類的工具。
執行下列命令,以檢視近即時的串流記錄:
func azure functionapp logstream <APP_NAME>
在個別終端機視窗或瀏覽器中,再次呼叫遠端函式。 Azure 中的函式執行會有詳細資訊記錄顯示在終端機中。
清除資源
如果您要繼續進行下一個步驟並新增 Azure 儲存體佇列輸出繫結,請保留您所有的資源,因為在後續的工作還會用到。
否則,請使用下列命令刪除資源群組及其包含的所有資源,以避免產生額外的成本。
az group delete --name java-functions-group