Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
Azure TIPS

Azure TIPS

Azure Webサイトのデプロイ・ロジックをカスタマイズするには?

2014年7月28日

Azure Webサイトでは、さまざまなWebアプリをGitでデプロイできるだけでなく、そのデプロイ・ロジックを自由にカスタマイズすることもできる。そのカスタマイズ方法を解説する。

Microsoft Student Partners Fellow 谷口 慈行
  • このエントリーをはてなブックマークに追加

 Microsoft Azure Web Sites(以下、単に「Webサイト」)では、さまざまなWebアプリケーションに対応しており、多くがGitを利用してプッシュするだけでそのアプリケーションに合ったデプロイが行われる。このデプロイ・ロジックは、ユーザーが自由にカスタマイズできる。今回はJettyへのWARファイルの配置を題材にカスタマイズ方法を解説する。

 具体的な説明に入る前に、Kuduについて説明しておこう。

Kudu

 「Kudu」*1とは、Azure Webサイトで利用されているGitデプロイエンジンである。Kuduをオープンソースで開発している「Project Kuduは、NuGetなどのオープンソースプロジェクトと同様に、Outercurve Foundationのプロジェクトの1つであり、Apache License 2.0で進められている。

 Gitデプロイエンジンだけでなく、Site Extensions(サイト拡張)Jobs(Webジョブ)など、さまざまな機能を提供しており、Webサイトの核となっているプロジェクトである。

  • *1 「クーズー」と読む。アフリカの羚羊(れいよう。ウシ科の動物)。

Jettyの準備

 Jettyは、Javaで構築された軽量なWebサーバー/JavaServletコンテナーである。また、SPDY、WebSocket、OSGi、JMX、JNDI、JAASなどの先進的なプロトコルをいち早く取り入れていることも特徴の1つである。この人気の高いJava製Webサーバーは今年4月より、Webサイトのギャラリーに追加され、正式にサポートされている。

 JettyをインストールしたWebサイトを、管理ポータル上の[WEB サイト]のギャラリーから新規作成する(図1)。

図1 Webサイトの新規作成

赤枠の[ギャラリーから]を選択する。

 [WEB アプリケーションの追加]ダイアログが表示される。中央のリストから[Jetty]を選択する(図2)。

図2 WEBアプリケーションの選択
  • 1 中央リストより[Jetty]を選択する。
  • 2 [→]ボタンをクリックし、構成へ進む。

 次にアプリケーションの構成を設定する(図3)。

図3 アプリケーションの構成
  • 1 ユニークなURLを入力する。
  • 2 ドロップダウンリストから「新しい Web ホスティング プランの作成」を選択する。
  • 3 ドロップダウンリストからリージョンを選択する。
  • 4[完了]ボタンを押し、Webサイトの作成を開始する。

 作成したWebサイトを参照すると、Jettyが動作していることが確認できる(図4)。

図4 Jetty on Azure

後のデプロイ・ロジックの作成に使用するため、赤枠のJettyのフォルーダ名をコピーしておく。

 Jettyにアプリケーションを展開するには、WARファイルを「jetty_base」-「webapps」フォルダー内に置く必要がある。

 FTPを利用して展開することもできるが、Gitのpushコマンドにフックして展開する手法が現在の主流である。

 これを実現するために、「webapps」フォルダーにWARファイルをコピーするようにデプロイ・ロジックをカスタマイズする。

Webアプリケーションの準備

 Jetty上に展開するアプリケーションを準備する。アプリケーションは、Mavenを利用し、アーキタイプ(archetype)から生成する。生成されるアプリケーションは“Hello World!”と表示されるごく簡単なJSPである。

コンソール
mvn archetype:create -DgroupId=kudu-deploy-sample -DartifactId=kudu-deploy-sample -DarchetypeArtifactId=maven-archetype-webapp
cd .\kudu-deploy-sample
mvn package
リスト1 Jetty上に展開するWebアプリケーションの作成

Mavenを利用しWebアプリケーションプロジェクトを作成する。
作成したプロジェクト直下でpackageコマンドを実行し、WARファイルを作成する。

 WARファイルは、「target」フォルダー内に「<プロジェクト名>.war」として作成される。

 このWARファイルをJetty上に展開するデプロイ・ロジックを次に記述する。

カスタム・デプロイ・ロジック(.deploymentファイル)の作成

 カスタム・デプロイ・ロジックは、Azure Webサイト用の「.deployment」(=デプロイ構成)ファイルに記載する。具体的には、プロジェクトフォルダー直下に「.deployment」ファイルを作成し、そのファイル内にカスタム・デプロイ・ロジックを記述すればよい(下記のコードはその例)。

コンフィグ
[config]
command = cp %DEPLOYMENT_SOURCE%\target\kudu-deploy-sample.war %DEPLOYMENT_TARGET%\bin\<Azure Webサイト上の適切なフォルダー名>\webapps\ROOT.war
リスト2 「.deployment」ファイル内に記載したカスタム・デプロイ・ロジック

commandに、プッシュ後に実行するコマンドを指定する。
<Azure Webサイト上の適切なフォルダー名>に先ほどコピーしたJettyフォルダー名を入力する。

 上記のカスタム・デプロイ・ロジック(.deploymentファイル)では、WARファイルは「jetty_base」-「webapps」フォルダーに置くとJettyが展開するので、cpコマンドを利用してWARファイルをコピーするようにしている。

【コラム】環境変数

 Webサイトインスタンス内ではデプロイ用に次の環境変数が用意されている。

  • DEPLOYMENT_SOURCE: リポジトリのルートパス
  • DEPLOYMENT_TARGET: デプロイターゲットパス
  • DEPLOYMENT_TEMP: テンポラリフォルダー。コマンド実行後に削除される
  • MSBUILD_PATH: msbuild.exeファイルのパス

デプロイ

 デプロイのため、WebサイトにローカルGitリポジトリを用意する。ローカルGitリポジトリの作成方法はこちらを参考にしてほしい。

 作成したローカルGitリポジトリにプロジェクトをプッシュする。

コンソール
git init
git add .
git commit -m "initial commit"
git remote add origin <作成したローカルGitリポジトリURL>
git push origin master
リスト3 Gitの初期化とデプロイ

<作成したローカルGitリポジトリURL>はポータルサイトで確認できる。

 リスト3のgit pushコマンドを実行すると、次のような出力が得られる。

コンソール
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 467 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Updating branch 'master'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'b16cc886b9'.
remote: Running custom deployment command... 1
remote: Running deployment command...
remote: Deployment successful.2
リスト4 デプロイメッセージ
  • 1カスタム・デプロイ・コマンドが実行されていることが確認できる。
  • 2Deployment successfulと出力されればデプロイ成功である。エラーが生じた際はエラー内容が表示されるので、確認し修正する。

 デプロイが成功していることを確認した後、Webサイトを参照し、WARファイルが展開されていることを確認する。

図5 展開されたアプリケーションの確認
図5 展開されたアプリケーションの確認

デプロイ・ロジックのカスタマイズ

 さて、今回はデプロイ・ロジックのカスタマイズ方法を紹介した。今回は「.deployment」ファイルに直接コマンドを記述したが、Windows用のバッチファイルである「.cmd」ファイルを作成し、その.cmdファイルをデプロイ時に実行することで、より複雑なデプロイ・ロジックを構築することもできる。

 また、冒頭でも述べた通り、Kuduは単にGitデプロイエンジンであるだけでなく、さまざまな機能を提供しており、Webサイトの核といえるプロジェクトである。ぜひ、プロジェクトをウォッチし、最新情報をチェックしてほしい。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

Azure TIPS
1. クライアントPCから「Azure SQLデータベースをBlobストレージにバックアップ」するには?[C#]

Azure SQLデータベースを.bacpacファイルとしてBlobストレージにエクスポートするコンソール・アプリの作り方を紹介。そのアプリをタスク・スケジューラーに登録すれば、定期バックアップも実現できる。

Azure TIPS
2. 【現在、表示中】≫ Azure Webサイトのデプロイ・ロジックをカスタマイズするには?

Azure Webサイトでは、さまざまなWebアプリをGitでデプロイできるだけでなく、そのデプロイ・ロジックを自由にカスタマイズすることもできる。そのカスタマイズ方法を解説する。

Azure TIPS
3. Azure WebサイトのSite Extensions「DaaS」で各種ログを手軽に収集・解析するには?

“Diagnostic as a Service”(DaaS)を利用して、エラーログ、メモリダンプ、HTTPログを一括で収集し、解析を行う方法を説明する。

Azure TIPS
4. Azure Webサイトにカスタムドメインを設定するには?

Microsoft Azure Web Sitesで独自ドメイン名を適用する方法を説明する。CNAMEレコードだけでなく、wwwなしのネイキッドドメインが実現可能なAレコード(IPアドレス)も指定できる。

Azure TIPS
5. Azure Webサイトをバックアップするには?

Azure Webサイトでは、Webサイトとデータベースをバックアップ/復元するための機能が提供されている。その機能の基本的な使い方を解説する。

サイトからのお知らせ

Twitterでつぶやこう!