Azure Functionsをローカル環境からAzure環境にデプロイ

#はじめに
[Azure Functionsをローカル環境でデバッグ](http://qiita.com/tworks55/items/281beeea5fd6c105b0b1)もしくは[Azure Functions Queueトリガーを使う](http://qiita.com/tworks55/items/352c738b4e864775919d)の続きになります。
今回はローカル環境で作成したAzure functionsをAzure環境にデプロイします。
デプロイはAzure上のローカルgitリポジトリを利用して行います。

#1. Azure functions動作環境を作成
まずはじめにAzureのMARKETPLACEでFunction APPを検索し、Azure functionsを実行する環境を作成します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/d8066b06-6839-c559-50fb-376a7f2b01e6.png)

以下で必要な情報を入力しますが、お試しするだけならホスティングプランは「従量課金プラン」を選択したほうが良いです。「App  Service プラン」を選択すると、有料のApp Serviceが起動し、関数を呼び出さなくてもインスタンスが起動しているだけで課金されてしまいますので注意が必要です。

また、ストレージについては既存のものがあればそちらを選択しても良いですが、無い場合はこのまま作成ボタンをクリックすると自動でストレージアカウントが作成されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/59cb72a7-cfc3-9952-bf68-cdd5d374addc.png)

#2. デプロイの設定
「Function Appの設定」を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/1d454758-b4b5-8d96-34ef-4901991fb4a0.png)

「継続的インテグレーションの構成」を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/54e9f13d-25b2-168c-75c9-1661d0bb0c5b.png)

デプロイする際にFTPでアップロードすることもできますが、今時は流行らないと思いますので「ローカルgitリポジトリ」を利用します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/b790250b-af4a-8db0-f480-43fd86591673.png)

「OK」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/954c7ea5-93d0-3273-4ae4-00fde5159bec.png)

デプロイするユーザーの認証情報も登録します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/16d7a785-7f67-cf69-943f-94d56d6f6dda.png)

gitリポジトリのURLを取得します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/f0031604-2256-2e1c-920f-a694dbc8d88c.png)

ローカル開発環境のgitのソースコードをコミットし、先ほど取得したgitリポジトリのURLをリモートリポジトリとして登録しpushします。

```
C:\dev\azure\AzureFunctionsDemo>git remote add origin https://mydeployuser01@azurefunctions01.scm.azurewebsites.net:443/azurefunctions01.git

C:\dev\azure\AzureFunctionsDemo>git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 385 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Updating branch 'master'.
remote: Updating submodules.
remote: Preparing deployment for commit id '22fd425486'.
remote: Generating deployment script.
remote: Running deployment command...
remote: Handling function App deployment.
remote: KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot'
remote: Copying file: 'HttpTrigger-JS\index.js'
remote: Finished successfully.
remote: Running post deployment command(s)...
remote: Deployment successful.
To https://mydeployuser01@azurefunctions01.scm.azurewebsites.net:443/azurefunctions01.git
   19f8794..22fd425  master -> master
```

#3. Functionの実行
HttpTrigger-JSの開発を選択し、パラメーターnameに適当な値を入れて、実行をクリックします。右下の出力画面に「Hello xxxxx」というメッセージが表示されればデプロイは成功です。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/19cdc1cb-3bda-bbae-881c-7e7cdcf5df4d.png)

これをブラウザで実行するには、関数のURLを取得しブラウザに設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/d001fd09-eda5-1a5a-2580-697a22c6b147.png)

ブラウザにURLを設定し、以下のようにnameパラメーターを追加して実行するとXMLで結果が戻ってきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/a4442805-36f6-936c-5f51-37282aaae580.png)

#4. デプロイした結果をよく見ると

デプロイしたフォルダを見てみると、ローカル環境にあるいくつかのファイルが展開されていません。実はローカル環境でfuncコマンドでfunctionsを作成した際に、.gitignoreに以下のような設定がされていました。

```..gitignore
bin
obj
csx
.vs
edge
Publish
.vscode

*.user
*.suo
*.cscfg
*.Cache
project.lock.json

/packages
/TestResults

/tools/NuGet.exe
/App_Data
/secrets
/data
.secrets
appsettings.json
```

appsettings.jsonにはAzureWebJobsStorageというストレージアカウントに接続する情報が記載されていますが、こちらはAzure上でfunctionsの設定をした際に、App Serviceの環境変数として設定されているので不要になるようです。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/387ef449-7007-0dee-8ad4-4b0374d28f51.png)

試しに環境変数のAzureWebJobsStorageの値を変更したところ、QueueTriggerJSのfunctionは正常に起動できませんでした。

#おわりに
使いこなせるとServerlessアーキテクチャーも面白そうです。
今回はNode.jsで試しましたが、Azure functionsはJavaが使えません。
AWS LambdaはJavaが使えそうな雰囲気なのでいつか試してみようと思います。


#参考URL
Web Appsのデプロイ方法と同じなのでこちらを参考に
[AzureのWebAppsでNode.js+Expressを使う](http://qiita.com/tworks55/items/387054a064ccb2fd03f0)