使用 Java 和 Gradle 创建函数并将其发布到 Azure

本文介绍如何使用 Gradle 命令行工具生成 Java 函数项目并将其发布到 Azure Functions。 完成后,函数代码会在 Azure 的无服务器托管计划中运行,并由 HTTP 请求触发。

注意

如果 Gradle 不是你的首选开发工具,请查看面向使用 MavenIntelliJ IDEAVS Code 的 Java 开发人员的类似教程。

先决条件

若要使用 Java 开发函数,必须安装以下软件:

还需要一个有效的 Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户

重要

JAVA_HOME 环境变量必须设置为 JDK 的安装位置,以完成本快速入门。

准备 Functions 项目

使用以下命令克隆示例项目:

git clone https://github.com/Azure-Samples/azure-functions-samples-java.git
cd azure-functions-samples-java/

打开 build.gradle,将以下节中的 appName 更改为唯一名称,以免在部署到 Azure 时发生域名冲突。

azurefunctions {
    resourceGroup = 'java-functions-group'
    appName = 'azure-functions-sample-demo'
    pricingTier = 'Consumption'
    region = 'chinanorth2'
    runtime {
      os = 'windows'
    }
    localDebug = "transport=dt_socket,server=y,suspend=n,address=5005"
}

在文本编辑器中打开 src/main/java 路径中的新 Function.java 文件,查看生成的代码。 该代码是一个 HTTP 触发的函数,用于回显请求的正文。

在本地运行函数

运行以下命令,以生成并运行函数项目:

gradle jar --info
gradle azureFunctionsRun

在本地运行项目时,会看到 Azure Functions Core Tools 的如下所示的输出:

...

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
...

在新的终端窗口中使用以下 cURL 命令,从命令行触发函数:

curl -w "\n" http://localhost:7071/api/HttpExample --data AzureFunctions

预期输出如下所示:

Hello, AzureFunctions

注意

如果将 authLevel 设置为 FUNCTIONADMIN,则在本地运行时不需要函数密钥

在终端中使用 Ctrl+C 停止函数代码。

将函数部署到 Azure

首先部署函数应用时,会在 Azure 中创建函数应用和相关资源。 在部署之前,必须使用 az login Azure CLI 命令登录到 Azure 订阅。

az login

提示

如果帐户可以访问多个订阅,请使用 az account set 设置此会话的默认订阅。

使用以下命令将项目部署到新的函数应用。

gradle azureFunctionsDeploy

这会根据 build.gradle 文件中的值在 Azure 中创建以下资源:

  • 资源组。 使用你提供的 resourceGroup 命名。
  • 存储帐户。 Functions 所需。 此名称根据存储帐户名称要求随机生成。
  • 应用服务计划。 在指定的区域中托管函数应用的无服务器消耗计划。 此名称随机生成。
  • 函数应用。 函数应用是函数的部署和执行单元。 此名称是 appName 追加一个随机生成的数字。

此部署还会在启用“从包运行”模式的情况下,使用 zip deployment 将项目文件打包并部署到新函数应用。

示例项目中 HTTP 触发器的 authLevel 为 ANONYMOUS,它将跳过身份验证。 但是,如果使用其他 authLevel(如 FUNCTIONADMIN),则需要获得函数密钥以通过 HTTP 调用函数终结点。 若要获取函数密钥,最简单的方法是使用 Azure 门户

获取 HTTP 触发器 URL

可以从 Azure 门户获取通过函数密钥触发函数所需的 URL。

  1. 浏览到 Azure 门户,登录,在页面顶部将函数应用的 appName 键入“搜索”栏,然后按 Enter。

  2. 在函数应用中选择“函数”,选择需要的函数,然后单击右上角的“获取函数 URL”。

    Copy the function URL from the Azure portal

  3. 选择“默认(函数密钥)”,然后选择“复制”

现在可以使用复制的 URL 来访问函数。

在 Azure 中验证函数

若要使用 cURL 验证在 Azure 上运行的函数应用,请将以下示例中的 URL 替换为从门户复制的 URL。

curl -w "\n" http://azure-functions-sample-demo.chinacloudsites.cn/api/HttpExample --data AzureFunctions

这会向函数终结点发送一个 POST 请求,请求正文中包含 AzureFunctions。 会看到以下响应。

Hello, AzureFunctions

后续步骤

我们已使用 HTTP 触发的函数创建 Java 函数项目,在本地计算机上运行该项目,并将其部署到 Azure。 现在,通过以下方式扩展函数