😀

Java の Maven で Azure Functions を試してみた

に公開

いつもは .NET で Azure Functions を使っていますが、ふと Java だとどうやって作るのだろうと疑問に思ったので試してみました。

動作環境

bash
$ java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)

$ mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

$ func --version
4.0.5801

$ az version
{
  "azure-cli": "2.61.0",
  "azure-cli-core": "2.61.0",
  "azure-cli-telemetry": "1.1.0",
  "extensions": {}
}

検証用 Functions を作成

bash
$ mvn archetype:generate \
  -DarchetypeGroupId=com.microsoft.azure \
  -DarchetypeArtifactId=azure-functions-archetype \
  -DjavaVersion=11

途中で下記の情報を入力。

Prompt Value
groupId com.mnrsdev
artifactId mnrfjava
version 1.0-SNAPSHOT
package com.mnrsdev

Functions 作成後のファイル構成

bash
$ cd mnrfjava

$ tree
.
├── host.json
├── local.settings.json
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── mnrsdev
    │               └── Function.java
    └── test
        └── java
            └── com
                └── mnrsdev
                    ├── FunctionTest.java
                    └── HttpResponseMessageMock.java

10 directories, 6 files

Functions ローカル実行

bash
$ mvn clean package

$ mvn azure-functions:run

$ curl "http://localhost:7071/api/HttpExample?name=Functions"
Hello, Functions

Azure へのデプロイ準備

pom.xmlで下記項目を自分の環境にあわせて修正。

pom.xml
<functionAppName>mnrfjava</functionAppName>

<resourceGroup>mnrfjava-rg</resourceGroup>
<appServicePlanName>mnrfjava-asp</appServicePlanName>
<region>japaneast</region>
<disableAppInsights>true</disableAppInsights>
<runtime>
    <os>linux</os>
    <javaVersion>11</javaVersion>
</runtime>

Azure へデプロイし動作確認

bash
$ mvn azure-functions:deploy

$ curl "https://mnrfjava.azurewebsites.net/api/httpexample?name=Functions"
Hello, Functions

Azure 上に作成されたリソース

azure-functions-java-mvn-01.png

後片付け

bash
$ az group delete --name mnrfjava-rg --yes

参考

https://learn.microsoft.com/ja-jp/azure/azure-functions/create-first-function-cli-java?tabs=macos%2Cbash%2Cazure-cli%2Ccurl

https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details#supported-pricing-tiers

https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Functions:-Configuration-Details

Discussion