Azure在去年就推出了Azure函数功能(Azure Functions),这是 基于Azure的无服务器计算服务,可以快速的帮助用户构建一个基于事件驱动的应用架构而不需要自己搭建服务器,配置应用环境,维护等琐碎的工作:
最棒的事情之一是,目前Azure Functions也开始支持Java编程语言以及Linux应用环境,到目前为止Functions支持C#,Javascript,和 Java,本文带大家快速看一下如何在Azure Functions上面使用Java。
注:目前Azure Functions在中国的Azure上即将落地,所以本文的测试是 在Global Azure上进行的。
Azure Functions的Java支持,是通过本地Java开发,然后通过Azure-cli进行部署的,所以Linux和Mac,Windows系统都支持,在进行后续操作之前,以下软件需要提前安装在本机上:
- JDK 1.8及以上
- Azure CLI 2.0
- Apache Maven 3.0+
- Nodejs 8.6+
- 首先使用npm来安装azure functions core tool:
npm install -g azure-functions-core-tools@core
- 基本上和常见的Java应用开发一样,Azure Functions支持使用Maven快速创建项目,新建一个空的目录,输入maven命令进行创建。创建过程中,maven会自动下载依赖的组件,关键的部分是交互式的创建过程:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure
-DarchetypeArtifactId=azure-functions-archetype
输入你的groupID,例如com.steven.functions, artifactId例如steven-functions,最为重要的一点是app name,实际是app plan里面的站点名称,必须唯一,否则后续部署测试会失败,你可以起一个非常复杂的,或者,就用推荐的名字。
- 使用Visual Studio Code打开maven生成的代码目录,可以看到自立代码非常简单直观,使用FunctionName annotation表明这个服务的名称是hello,接受request,无鉴权要求,如果你输入的参数name不为空的话,返回Hello XXX:
- 首先进行编译打包操作,mvn clean package或者mvn azure-functions:clean:
- Azure Functions core提供了本地运行和调工具,所以我们直接可以用maven在本地运行测试,可以看到出现了Azure Functions闪电图标以及服务URL:
mvn azure-functions:run
- 本地测试,我们可以使用curl工具进行本地测试:
curl -w ' ' -d StevenLian http://localhost:7071/api/hello
- 使用Azure CLI 2.0将开发好的Azure Functions发布到云端:
az login登录到Global Azure上,这种方式是交互式的,会弹出浏览器,让你输入验证token,如果喜欢直接输入用户名和密码,可以使用
az login -u USERNAME -p PASSWORD
登陆成功后我们就可以使用maven进行部署,实际上maven的command deploy底层使用的是Azure CLI 2.0:
mvn azure-functions:deploy
可以看到部署成功后,Functions的服务端点是:https://steven-functions-20171206112303613.azurewebsites.net
那么同样的方式,我们用curl来测试功能是否正常,可以看到echo正常返回,表明我们的一个Azure Functions已经部署成功并正常工作了:
- 最后我们登录到Azure的portal,可以看到maven deploy调用Azure CLI已经自动帮我们创建了一个group,并且创建了Functions,每个Functions会包含App Service, storage和Functions:
打开我们创建的Java functions会看到在Azure Functions使用Java的方式,是使用Build好的jar包,传入参数,处理完成后返回结果,所以在portal界面上也不支持像C#或者Javascript方式的在线编辑:
新建一个Function的时候,可以看到,Azure已经内置了很多的模板帮助用户快速入门,包括存储,CosmosDB,队列等等作为触发条件进行快速处理:
Azure Functions未来会支持更多的语言,并且有不同的计费模式帮助用户节约成本,其自动快速扩展,免维护等特性可以让用户在不同的应用场景中快速构建自己的无服务器计算的微服务架构。