快速入門:從命令行在 Azure 中建立 Java 函式

在本文中,您會使用命令行工具來建立可響應 HTTP 要求的 Java 函式。 在本機測試程式代碼之後,您會將其部署至 Azure Functions 的無伺服器環境。

如果 Maven 不是您慣用的開發工具,請參閱適用於 Java 開發人員的類似教學課程:

完成本快速入門會在您的 Azure 帳戶中產生幾美分或更少成本。

設定您的本機環境

開始之前,您必須具備下列專案:

安裝 Azure Functions Core Tools

安裝 Core Tools 的建議方式取決於您本機開發電腦的作業系統。

下列步驟會使用 Windows 安裝程式 (MSI) 來安裝 Core Tools v4.x。 如需其他套件型安裝程序的詳細資訊,請參閱 Core Tools自述檔

根據您的 Windows 版本下載並執行 Core Tools 安裝程式:

如果您先前使用 Windows 安裝程式 (MSI) 在 Windows 上安裝 Core Tools,則應該先從 [新增移除程式] 卸載舊版本,再安裝最新版本。

建立本機函式專案

在 Azure Functions 中,函式專案是一或多個個別函式的容器,每個函式都會回應特定的觸發程式。 專案中的所有函式都會共用相同的本機和裝載組態。 在本節中,您會建立包含單一函式的函式專案。

  1. 在空白資料夾中,執行下列命令,從 Maven 原型產生 Functions 專案。

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

    重要

    • 若您想讓函式在 Java 11 上執行,請使用 -DjavaVersion=11。 若要深入瞭解,請參閱 Java 版本
    • JAVA_HOME環境變數必須設定為正確 JDK 版本的安裝位置,才能完成本文。
  2. Maven 會要求您提供完成部署時產生專案所需的值。
    出現提示時,請提供下列值:

    提示 Description
    groupId com.fabrikam 值,可針對所有專案唯一識別您的專案,並遵循 Java 的套件命名規則
    artifactId fabrikam-functions 值,這個值是 jar 的名稱,不含版本號碼。
    version 1.0-SNAPSHOT 選擇預設值。
    com.fabrikam 值,這是所產生函式程序代碼的 Java 套件。 使用預設值。
  3. 輸入 Y 或按 Enter 以確認。

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

  4. 瀏覽至項目資料夾:

    cd fabrikam-functions
    

    此資料夾包含項目的各種檔案,包括名為 local.settings.jsonhost.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 資源所建立的 設定 定義於外掛程式的組態元素中,並在產生的pom.xml檔案中使用 groupIdcom.microsoft.azure。 例如,下列組態專案會指示 Maven 型部署在 java-functions-group 區域中的資源群組 westus 中建立函式應用程式。 函式應用程式本身會在裝載於 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.oswindowslinux 。 如需 Maven 外掛程式所支援設定的完整清單,請參閱組 態詳細資料

FunctionTest.java

原型也會為您的函式產生單元測試。 當您將函式變更為將系結新增或新增至專案時,您也必須修改FunctionTest.java檔案中的測試。

在本機執行函式

  1. 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 停止主機、流覽至專案的根資料夾,然後再次執行上一個命令。

  2. 函式 HttpExample URL 從此輸出複製到瀏覽器,並附加查詢字串 ?name=<YOUR_NAME>,使完整的網址 類似 http://localhost:7071/api/HttpExample?name=Functions。 瀏覽器應該會顯示回應查詢字串值的訊息。 您啟動專案的終端機也會在提出要求時顯示記錄輸出。

  3. 完成時,請使用 Ctrl+C 並選擇y停止函式主機。

將函式專案部署至 Azure

當您第一次部署函式專案時,會在 Azure 中建立函式應用程式和相關資源。 設定 用來裝載應用程式的 Azure 資源定義於 pom.xml 檔案。 在本文中,您將接受預設值。

提示

若要建立在 Linux 上執行的函式應用程式,而不是 Windows,請將 pom.xml 檔案中的 項目從 windows 變更runtime.oslinux。 在這些區域中支援在取用方案中執行Linux。 您無法在 Linux 上執行的應用程式,以及在相同資源群組的 Windows 上執行的應用程式。

  1. 您必須先使用 Azure CLI 或 Azure PowerShell 登入 Azure 訂用帳戶,才能進行部署。

    az login
    

    az login 命令會將您登入您的 Azure 帳戶。

  2. 使用下列命令將專案部署至新的函式應用程式。

    mvn azure-functions:deploy
    

    這會在 Azure 中建立下列資源:

    • 資源群組。 命名為 java-functions-group
    • 。 函式的必要專案。 此名稱會根據帳戶名稱需求 儲存體 隨機產生。
    • 主控方案。 位於 westus 區域中函式應用程式的無伺服器裝載。 名稱為 java-functions-app-service-plan
    • 函式應用程式。 函式應用程式是函式的部署和執行單位。 此名稱會根據 artifactId 隨機產生,並附加隨機產生的數位。

    部署會封裝項目檔,並使用 zip 部署將它們部署到新的函式應用程式。 程序代碼會從 Azure 中的部署套件執行。

重要

儲存體帳戶可用來儲存重要的應用程式數據,有時包括應用程式程式代碼本身。 您應該限制從其他應用程式和使用者存取記憶體帳戶。

在 Azure 上叫用函式

因為您的函式會使用 HTTP 觸發程式,所以您會在瀏覽器中對其 URL 提出 HTTP 要求,或使用 curl 之類的工具來叫用它。

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

The output of the function run on Azure in a browser

執行下列命令以檢視近乎即時的串流記錄:

func azure functionapp logstream <APP_NAME> 

在個別終端機視窗或瀏覽器中,再次呼叫遠端函式。 Azure 中函式執行的詳細資訊記錄會顯示在終端機中。

清除資源

如果您繼續下一個步驟並新增 Azure 儲存體 佇列輸出系結,請保留所有資源,因為您將建置已完成的工作。

否則,請使用下列命令來刪除資源群組及其所有包含的資源,以避免產生進一步的成本。

az group delete --name java-functions-group

下一步