快速入门:使用 Java 和 Maven/Gradle 创建函数并将其发布到 Azure
本文介绍如何使用 Maven/Gradle 命令行工具生成 Java 函数并将该函数发布到 Azure Functions。 完成后,函数代码会在 Azure 的无服务器托管计划中运行,并由 HTTP 请求触发。
先决条件
若要使用 Java 开发函数,必须安装以下软件:
- Java 开发人员工具包版本 8
- Azure CLI
- Azure Functions Core Tools 版本 2.6.666 或更高版本
- Apache Maven 版本 3.0 或更高版本
- Gradle 4.10 和更高版本
还需要一个有效的 Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。
重要
JAVA_HOME 环境变量必须设置为 JDK 的安装位置,以完成本快速入门。
准备 Functions 项目
在空的文件夹中,运行以下命令以从 Maven archetype 生成 Functions 项目。
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype
备注
如果使用的是 Powershell,请记得在参数的两侧添加 ""。
备注
如果在运行命令时遇到问题,请看看使用了什么 maven-archetype-plugin
版本。 由于你是在空的没有 .pom
文件的目录中运行该命令,因此它会尝试使用 ~/.m2/repository/org/apache/maven/plugins/maven-archetype-plugin
中的旧版插件(如果你从旧版升级了 Maven)。 如果是这样,请尝试删除 maven-archetype-plugin
目录并重新运行命令。
Maven 会请求你提供所需的值,以在部署上完成项目的生成。 系统提示时提供以下值:
Value | 说明 |
---|---|
groupId | 一个值,用于按照 Java 的包命名规则在所有项目中标识你的项目。 本快速入门中的示例使用 com.fabrikam.functions 。 |
artifactId | 一个值,该值是 jar 的名称,没有版本号。 本快速入门中的示例使用 fabrikam-functions 。 |
version | 选择默认值 1.0-SNAPSHOT 。 |
package | 一个值,该值是所生成函数代码的 Java 包。 使用默认值。 本快速入门中的示例使用 com.fabrikam.functions 。 |
appName | 全局唯一名称,用于标识 Azure 中的新函数应用。 请使用默认值,即 artifactId 追加一个随机数字。 请记下该值,稍后需要它。 |
appRegion | 选择离你近或离函数访问的其他服务近的区域。 默认为 chinanorth 。 请运行以下 Azure CLI 命令,获取所有区域的列表:az account list-locations --query '[].{Name:name}' -o tsv |
resourceGroup | 要在其中创建函数应用的新资源组的名称。 请使用 myResourceGroup (由本快速入门中的示例使用)。 资源组必须对 Azure 订阅来说独一无二。 |
键入 Y
或按 Enter 进行确认。
Maven 在名为 artifactId 的新文件夹(在此示例中为 fabrikam-functions
)中创建项目文件。 运行以下命令,将目录切换到创建的项目文件夹。
cd fabrikam-function
使用以下命令克隆示例项目:
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 = 'chinanorth'
runtime {
os = 'windows'
}
localDebug = "transport=dt_socket,server=y,suspend=n,address=5005"
}
在文本编辑器中打开 src/main/java 路径中的新 Function.java 文件,查看生成的代码。 该代码是一个 HTTP 触发的函数,用于回显请求的正文。
在本地运行函数
运行以下命令,以生成并运行函数项目:
mvn clean package
mvn azure-functions:run
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!
在本地运行时,不需要功能键。 在终端中使用 Ctrl+C
停止函数代码。
将函数部署到 Azure
首先部署函数应用时,会在 Azure 中创建函数应用和相关资源。 在部署之前,必须使用 az login Azure CLI 命令登录到 Azure 订阅。
az login
提示
如果帐户可以访问多个订阅,请使用 az account set 设置此会话的默认订阅。
使用以下命令将项目部署到新的函数应用。
mvn azure-functions:deploy
gradle azureFunctionsDeploy
这会在 Azure 中创建以下资源:
- 资源组。 使用你提供的 resourceGroup 命名。
- 存储帐户。 Functions 所需。 此名称根据存储帐户名称要求随机生成。
- 应用服务计划。 为指定 appRegion 中的函数应用进行的无服务器托管。 此名称随机生成。
- 函数应用。 函数应用是函数的部署和执行单元。 此名称是 appName 追加一个随机生成的数字。
此部署还会在启用“从包运行”模式的情况下,使用 zip deployment 将项目文件打包并部署到新函数应用。
部署完成后,会显示可用于访问函数应用终结点的 URL。 由于我们发布的 HTTP 触发器使用 authLevel = AuthorizationLevel.FUNCTION
,因此你需要获取函数密钥,以便通过 HTTP 调用函数终结点。 若要获取函数密钥,最简单的方法是使用 Azure 门户。
获取 HTTP 触发器 URL
可以从 Azure 门户获取通过函数密钥触发函数所需的 URL。
浏览到 Azure 门户,登录,在页面顶部将函数应用的 appName 键入“搜索”栏, 然后按 Enter。
在函数应用中展开“函数(只读)”,选择你的函数,然后选择右上角的“</> 获取函数 URL”。
选择“默认(函数密钥)”,然后选择“复制” 。
现在可以使用复制的 URL 来访问函数。
在 Azure 中验证函数
若要使用 cURL
验证在 Azure 上运行的函数应用,请将以下示例中的 URL 替换为从门户复制的 URL。
curl -w "\n" https://fabrikam-functions-20190929094703749.chinacloudsites.cn/api/HttpExample?code=zYRohsTwBlZ68YF.... --data AzureFunctions
这会向函数终结点发送一个 POST 请求,请求正文中包含 AzureFunctions
。 会看到以下响应。
Hello AzureFunctions!
后续步骤
我们已使用 HTTP 触发的函数创建 Java 函数项目,在本地计算机上运行该项目,并将其部署到 Azure。 现在,通过以下方式扩展函数