Azure FunctionsをJava + VS Codeで試してみた（Azure Functions Extension編）

[Azure FunctionsをVS Code拡張機能のMaven for Javaで動かしてみました](https://qiita.com/shingo_kawahara/items/435941731cade567218f) が、Azure Functions拡張機能を使えばもっと楽なのでは・・・といまさら気付き、このやり方も試したので残しておきます。

# 動作環境
* Windows 7
* Visual Studio Code 1.24.1
    * 拡張機能：Java Extension Pack 0.3.0
    * 拡張機能：Azure Functions 0.10.0
* JDK 1.8
* Apache Maven 3.5.3
* Azure CLI 2.0.32
* .Net Core SDK 2.1
* Node.js 7.2.1
* npm 4.0.5
* Azure Functions Core Tools 2.0.1-beta.35

# 事前インストール
* [Java Developer Kit バージョン 8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
* [Apache Maven バージョン 3.0 以降](https://maven.apache.org/download.cgi)
* [Azure CLI](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?view=azure-cli-latest)
* [.Net Core SDK 2.1](https://www.microsoft.com/net/download)
* [Node.js](https://docs.npmjs.com/getting-started/installing-node#osx-or-windows)
* [Azure Functions Core Tools](https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-run-local#v2)

# Mavenプロジェクト作成
Functions拡張機能から作っていきます。

* サブスクリプションにログインしている前提で、[Create New Project...]を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/952e7691-6f0f-c3a0-3870-2de1bbcbd059.png)

* [Browse...]を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/26d35050-82ec-3c2d-ff70-57c335809c66.png)

* 空フォルダを作成し、[Select]を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/b79d2823-8fa6-372f-05fc-d3211532b499.png)

* 言語を選択します。ここでは[Java]ですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/7eedc688-2aec-1030-7019-3b631cf27eea.png)

* MavenのgroupIdを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/7beec2b9-ddf5-e3cd-51b7-726b54aaab58.png)

* MavenのartifactIdを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/31e642b6-73c9-e173-5857-75a3ee9c803d.png)

* Mavenのversionを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/ac3adfc0-d5f5-de2e-42ee-2b967012e06e.png)

* ここはJavaのパッケージ名を入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/029c2d9f-013b-9801-380e-64207e2b65fa.png)

* Function App名を入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/c1bb05fc-5f3b-3ace-49f7-3ea4c289e95e.png)

* ビルドが走って、しばらくするとVS Codeワークスペースに追加するか聞かれるのでここはお好みで。とりあえず[Open in current windows]にしておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/12571c1e-7bc8-1065-5724-0ffbe8951caa.png)

# ローカル実行
* この状態でF5を押すとデバッグモードとなり、ローカルで実行できます。

* ローカルのURLが発行されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/7a70c27d-ff25-40b9-b7a9-29ae4da04d71.png)

* テストしてみましょう。ブラウザで以下URLで実行してみます。

```
http://localhost:7071/api/HttpTrigger-Java?name=Azure
```

* 問題なく実行できてます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/407d942e-a0e7-23ae-d1be-58240e06a606.png)

* [Shift + F5]でデバッグを停止します。
 
# Functionsデプロイ
* では、Functionsにデプロイしてみます。VS CodeのFunctions拡張機能より、[Deploy to Function App...]を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/682cede5-1704-a34b-905b-a239d4c56c41.png)

* 先程のプロジェクトを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/35cd2e57-f18f-4d71-1cab-6e94b80d9391.png)

* [Create New Function App]を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/e52cf48a-6b66-abde-3e7c-ac9d29bb57de.png)

* Function App名を入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/e39dbd65-e96f-6c55-9bc4-9941be35e67d.png)

* 必要であればリソースグループ名を指定して作ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/03ac8bd9-cbba-bf0d-d2f1-0ef956ece469.png)

* ここも必要であればストレージアカウントを作ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/949199b0-dca2-7f6d-a8d5-fb6c3f48e5d5.png)

* 作成するリージョンを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/f8254afe-f7ec-bc57-9b72-6d5e4513a14d.png)

* Azure PortalでFunction Appを見てみると新規作成されていることが分かります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/d7e52e34-a494-4af9-de39-30d7111d22b2.png)

* ではテストしてみましょう。ブラウザで以下URLで実行してみます。[Your AppName]には、functinos作成時に指定した値を入力してください。

```
https://[Your AppName].azurewebsites.net/api/HttpTrigger-Java?name=Azure
```

* うまくいきました！（少し時間が掛かります）  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/cc54d57c-f9c3-2e3e-3cfe-2fee362453f4.png)

# まとめ
さすが専用の拡張機能だけあってめっちゃ簡単に作ることができました。