前回見た時は Go の x64 ランタイムがインストールされていただけでしたが、最近 Kudu がアップデートされて Go で書かれたアプリケーションをデプロイして実行することが出来るようになっていました。
既に Go を何回か使ったことがありますが、Kudu が標準で対応したので同じコードを Git でデプロイしてみました。デプロイスクリプトでの対応なので、SCM を使わないとダメです。
単純なアプリケーションをデプロイ
以前に試した文字列を返すだけの単純なアプリケーションをデプロイしてみました。
適当に Web App を作って git push してデプロイしてみたところ、特に問題なくデプロイは完了しました。
ブラウザでアクセスするとあっさりと動作しました。バージョンは 1.4.2 なのもわかります。
デプロイスクリプトの実行ログを確認すると、ソースコードを実行時にコンパイルするのではなくデプロイのタイミングで実行ファイルにコンパイルして、それを wwwroot にコピーするようになっています。リポジトリに Web.config を用意する必要もありません。
実行ログをまるっと貼り付けておきます。
Handling Go deployment.
Prepare workspace
GOROOT D:\Program Files\go\1.4.2
Creating GOPATH\bin D:\local\Temp\a7f1898d-a920-4b54-a4ae-5c840c91e440\gopath\bin
Creating GOPATH\pkg D:\local\Temp\a7f1898d-a920-4b54-a4ae-5c840c91e440\gopath\pkg
Creating GOPATH\src D:\local\Temp\a7f1898d-a920-4b54-a4ae-5c840c91e440\gopath\src
Creating D:\local\Temp\a7f1898d-a920-4b54-a4ae-5c840c91e440\gopath\src\azureapp
Copy source code to Go workspace
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Friday, May 1, 2015 8:30:08 AM
Source : D:\home\site\repository\
Dest : D:\local\Temp\a7f1898d-a920-4b54-a4ae-5c840c91e440\gopath\src\azureapp\
Files : *.*
Exc Files : .deployment
deploy.cmd
Exc Dirs : .git
.hg
Options : *.* /NDL /NFL /S /E /DCOPY:DA /COPY:DAT /NP /R:1000000 /W:30
------------------------------------------------------------------------------
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 2 0 1 0 0 0
Files : 1 1 0 0 0 0
Bytes : 316 316 0 0 0 0
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Ended : Friday, May 1, 2015 8:30:08 AM
Resolving dependencies
..
Building Go app to produce exe file
Copy files for deployment
KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot'
Deleting file: 'hostingstart.html'
Copying file: 'azureapp.exe'
Copy web.config
1 file(s) copied.
Finished successfully.
Deployment successful.Go アプリも ASP.NET と同様に Kudu がビルドするので、スタートアップのパフォーマンスが改善されていると思います。デフォルトで CI 対応は良い感じですね。
Martini アプリケーションをデプロイ
単純なアプリケーションだけではなく、Martini を使ったアプリケーションも動くか確認してみました。ライブラリのインストールが必要なはずですが、どうなるのか気になったので試します。
特に考えずに git push すると、import に書いてある依存関係を自動的に解決してくれるみたいです。デプロイの履歴は以下のように、前回のコードを丸っと書き換える形にしました。
設定ファイルなど必要なく、ソースのデプロイだけで問題なく動作しました。テンポラリで依存関係の解決とビルドを行うので、これまでの環境に依存しないのがとても良いです。
HttpPlatformHandler のポート番号を取得する部分だけ注意したいです。久しぶりになる Web Apps での新しいプラットフォーム対応なので喜ばしいですね。