spring tool suiteからAzureFunctionsのプロジェクトを作成する

※Mavenの設定等々は公式や他記事に詳しい解説があるので割愛。それらの設定ができている前提で話を進めていきます。

##プロジェクト作成
spring tool suiteを起動したら
左上の[ファイル]→[新規]→[Mavenプロジェクト]を選択

デフォルト・ワークスペースの設定(要するにプロジェクトフォルダの出力先)を設定したら次へ


アーキタイプの追加を選択し
アーキタイプ・グループ ID:**com.microsoft.azure**
アーキタイプ・アーティファクトID:**azure-functions-archetype**
アーキタイプ・バージョン:**1.20**(19/3時点の最新。参照:[Maven Archetype For Azure Functions](https://mvnrepository.com/artifact/com.microsoft.azure/azure-functions-archetype))
を選択
![アーキタイプ.png](https://qiita-image-store.s3.amazonaws.com/0/331531/a24655c0-a0ec-8609-183d-805779f5ab82.png)
追加したアーキタイプを選択して次へ。


グループID等々を任意の値で入力。
(例)
groupId: hoge
artifactId: hoge.functions
version: 1.3.0
appName: hoge
appRegion: jp
resourceGroup: hoge.resource


バージョン参照：[Maven Plugin For Azure Functionsのversion一覧](https://mvnrepository.com/artifact/com.microsoft.azure/azure-functions-maven-plugin)

##プロジェクトを実行してみる
###Java11では現時点サポートされていない
現時点ではAzureFunctionsはJava8までしかサポートしていないためJava11で実行しようとしても実行できない。
参照:[Azure Functions でサポートされている言語](https://docs.microsoft.com/ja-jp/azure/azure-functions/supported-languages)
>Failed to execute goal com.microsoft.azure:azure-functions-maven-plugin:1.3.0:package (package-functions) on project hoge.functions: Local JDK version 11.0.2 does not meet the requirement of the Maven plugin for Azure Functions. The supported version is JDK 8



なので自分の環境ではzulu-8を使用して実行している。
[プロジェクト]を右クリック→[ビルド・パス]→[ビルド・パスの構成]で**JREシステムライブラリー**がJava8系になっているか確認。


なっていなければライブラリーの追加からJREシステムライブラリーを選択。
[インストール済みのJRE]から[追加]を選択しJDKまでのPathを設定する。
###ローカルでAzureFunctionsの動作確認
※プロジェクトのアイコンに×マークがある場合は[プロジェクト]を右クリック→[Maven]→[プロジェクトの更新]

**ビルド**
[プロジェクト]を右クリック→[実行]からMaven Clean,Maven install,Maven ビルドを順に実行する。


**AzureFunctionsの実行**
[プロジェクト]を右クリック→[ローカル・ターミナルに表示]を選択、下にターミナルが表示されるので以下を実行。

```
mvn azure-functions:run
```
すると雷のようなマークが出力されるはず。
![アーキタイプ4.png](https://qiita-image-store.s3.amazonaws.com/0/331531/377f307a-db19-c0c4-c9f2-16b3b26bb703.png)


###AzureFunctionsにアクセスしてみる

出力された文字列に下記のURLが記述されているのでアクセスしてみる。

![アーキタイプ4.png](https://qiita-image-store.s3.amazonaws.com/0/331531/969e378e-07e2-c98f-1a56-6c74e1d3cda0.png)

まず初めにlocalhost:7071にアクセスするとこんな感じの画面になる。

![アーキタイプ5.png](https://qiita-image-store.s3.amazonaws.com/0/331531/4443f27f-38dc-ed37-a817-9dd8ff365ffe.png)


次にデフォルトで作成されているFunctionにアクセスしてみる。
デフォルトの関数の機能はnameとして受け取った文字にhelloを付け加えるだけの機能。

    @FunctionName("HttpTrigger-Java")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        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();
        }
    }


別でコマンドプロンプトを起動し以下のコマンドを実行。

```
curl http://localhost:7071/api/HttpTrigger-Java?name=world
Hello,world
```
以下のコマンドでも可能。

```
curl -w '\n' -d world http://localhost:7071/api/HttpTrigger-Java
```
##参考記事
[javaでAzure functions](https://qiita.com/suzuq/items/51f4b92def88110f0a02)