a2 Tech blog

試したこと・調べたこと・感じたことを発信するITエンジニアの日記です。仕事とは直接関係ないけど興味あることを模索していきます。

Try Azure App Service On Linux

Microsoftの最近の方向性はMicrosoftLinuxのようなので、それに少し便乗して、Azure App Service On Linuxを試してみたいと思います。パブリックプレビュー版なので、これからどんどん機能追加や使い勝手向上がされる事を期待しています。現行はLinuxで動いてるシステムをAzure上という狙いなんでしょうかね。Node.jsのアプリケーションなんかは、Web Apps(Windows版)のiisnodeよりも、従来からのLinux版の方がやはり信頼できるのではないでしょうか。

基本的な手順は、Microsoftのドキュメントを参考にしてます。

docs.microsoft.com

それでは、やってみたいと思います。

Create Web Apps on Linux

Azure Portalから新規追加で、Web + モバイルを選択し、Web App On Linuxで作成して行きます。この辺りは、通常のWeb Appを作成する際と変わりません。慣れている人は5分ぐらいでできそうですね。

f:id:ninna2:20170422012800j:plain:w360

アプリケーション名は、一意になる名称(一意でない場合はエラーが出ます)を入力し、自身のサブスクリプション、リソースグループを指定します。

f:id:ninna2:20170422012759j:plain:w360

プレビュー版なので、使用できるリージョンが限られており、現在は下記の3リージョンのみです。今後、日本(西日本、東日本)が増える事を期待してます。

  • West Europe
  • Southeast Asia
  • West US

Planですが、こちらもまだプレビュー版なので、StandardBasicしか選べません。ただし、今は50%の割引が適用されるようです。ですので、1番安いのはB1(Basic)の半額ということになりますね。だいたい1700JPY/月です。(1日56円!!試して遊ぶ分にはお手軽です)

f:id:ninna2:20170422012135j:plain:w360

通常のWeb Appとは異なる点として、コンテナの構成を選択する必要があります。Linux版なので、もちろん独自のDockerコンテナ使うことができるように配慮されています。今回は、ビルトインを使います。機会があれば試してみたいと思います。

ビルトインを選ぶと、ランタイムを選択しないといけないので、使用したいランタイムバージョンを選択します。現在、対応しているのは、Node.js,PHP,.Net Core,Rubyになります。.Net Coreとか試してみたいんですが、私はNode.js 6.6.0を選択してます。

これで作成するための入力が完了したので、作成ボタンをポチッと。すると、数分でWeb Appが作成されます。

Sample Node.js App

Web App On Linuxは出来たのですが、公開するアプリケーションがないので、アプリケーションをサクッと用意しましょう。過去にWindwos版で作成したNode.jsのHelloworldを流用します。下記参考にしてみてください。

ninna2.hatenablog.com

index.jsとpackage.jsonだけ基本あればOKですが、通常Web Appsと違い、Node.jsのバージョンとnpmのバージョンは厳密にサポートされるものだけに限られるので、package.jsonの指定は環境に合わせて修正してください。

あと、Web Apps On LinuxでNode.jsを使用する際には、Node.jsスタートアップファイルを設定するためのオプションが選択できます。詳しい説明は下記に記載されています。

docs.microsoft.com

オプションは下記です。

  • Node.jsアプリケーションのスタートアップスクリプトを直接指定する
  • Node.jsアプリケーションに使用するPM2構成ファイルを指定する

せっかくなので、PM2構成ファイル(process.json)を構成しておきます。と言っても、サンプルに示されているものを少し修正しているだけです。もちろん、直接、スタートアップスクリプトを指定しても動きますのでそれでも構いません。

下記に今回用意したprocess.jsonを記載しておきます。

{
    "name": "sample-node-apps",
    "script": "./index.js",
    "instances": 1,
    "merge_logs": true,
    "log_date_format": "YYYY-MM-DD HH:mm Z",
    "watch": ["./index.js", "foo.txt"],
    "watch_options": {
        "followSymlinks": true,
        "usePolling": true,
        "interval": 5
    }
}

アプリケーション(index.js)とともに、上記を準備して、GitHubにとりあえず突っ込みました。Visual Studio Team Serviceのリポジトリからデプロイできればよかったのですが、対応していないようなので、GitHubから行なっていきます。

Setting Docker Container

先ほど作成したスタートアップのPM2構成ファイルを指定します。Azure Portalから作成済みのWeb Apps On Linuxを開き、“Docker コンテナーを選択します。スタートアップファイルの欄があるので、process.jsonと入力しておきます。

f:id:ninna2:20170422012139j:plain:w360

Setting Deploy Option

デプロイの設定をしていきます。通常のWeb Appsと手順は変わりません。ただSourceとして選べるのが、現時点では、ローカルGitリポジトリ,GitHub,Buitbuket 3種類のみです。Visual Studio Team Serviceを早く追加して欲しいなぁというのが私の想いですが、VSTS側からデプロイすればいいわけだから優先順は低くなっているのかなと推測できます。

f:id:ninna2:20170422012758j:plain:w360

f:id:ninna2:20170422012757j:plain:w360

デプロイの基本的な設定が完了すれば初回は自動的にデプロイを開始してくれます。デプロイの内部では、やはりKuduが使われているようです。Kuduをもうちょっと詳しく知っておく必要が今後でてきそうですね。

f:id:ninna2:20170422012147j:plain:w360

デプロイが成功すれば、アプリケーションを実行して開けるはずです。キャプチャは割愛しますが、無事開けました。

個人的な感想

AzureでLinuxというのも容易に使えそうです。ただ、業務システムはLinuxJavaという構成が多いと思うので、Javaをサポートしてくれればもっと需要は高くなるはずですね。あと、Linuxで使うということは、DBもどうしようということになりそうです。次期SQL ServerLinuxで動くようになるらしいですし、"MicrosoftLinux"が進めばもっとAzure活用の幅が増えていきそうです。