Azure TIPS
Azure Webサイトのデプロイ・ロジックをカスタマイズするには?
Azure Webサイトでは、さまざまなWebアプリをGitでデプロイできるだけでなく、そのデプロイ・ロジックを自由にカスタマイズすることもできる。そのカスタマイズ方法を解説する。
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)。
[WEB アプリケーションの追加]ダイアログが表示される。中央のリストから[Jetty]を選択する(図2)。
次にアプリケーションの構成を設定する(図3)。
- 1 ユニークなURLを入力する。
- 2 ドロップダウンリストから「新しい Web ホスティング プランの作成」を選択する。
- 3 ドロップダウンリストからリージョンを選択する。
- 4[完了]ボタンを押し、Webサイトの作成を開始する。
作成したWebサイトを参照すると、Jettyが動作していることが確認できる(図4)。
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
|
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
|
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
|
<作成したローカル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
|
- 1カスタム・デプロイ・コマンドが実行されていることが確認できる。
- 2Deployment successfulと出力されればデプロイ成功である。エラーが生じた際はエラー内容が表示されるので、確認し修正する。
デプロイが成功していることを確認した後、Webサイトを参照し、WARファイルが展開されていることを確認する。
デプロイ・ロジックのカスタマイズ
さて、今回はデプロイ・ロジックのカスタマイズ方法を紹介した。今回は「.deployment」ファイルに直接コマンドを記述したが、Windows用のバッチファイルである「.cmd」ファイルを作成し、その.cmdファイルをデプロイ時に実行することで、より複雑なデプロイ・ロジックを構築することもできる。
また、冒頭でも述べた通り、Kuduは単にGitデプロイエンジンであるだけでなく、さまざまな機能を提供しており、Webサイトの核といえるプロジェクトである。ぜひ、プロジェクトをウォッチし、最新情報をチェックしてほしい。
※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
1. クライアントPCから「Azure SQLデータベースをBlobストレージにバックアップ」するには?[C#]
Azure SQLデータベースを.bacpacファイルとしてBlobストレージにエクスポートするコンソール・アプリの作り方を紹介。そのアプリをタスク・スケジューラーに登録すれば、定期バックアップも実現できる。
2. 【現在、表示中】≫ Azure Webサイトのデプロイ・ロジックをカスタマイズするには?
Azure Webサイトでは、さまざまなWebアプリをGitでデプロイできるだけでなく、そのデプロイ・ロジックを自由にカスタマイズすることもできる。そのカスタマイズ方法を解説する。
3. Azure WebサイトのSite Extensions「DaaS」で各種ログを手軽に収集・解析するには?
“Diagnostic as a Service”(DaaS)を利用して、エラーログ、メモリダンプ、HTTPログを一括で収集し、解析を行う方法を説明する。
4. Azure Webサイトにカスタムドメインを設定するには?
Microsoft Azure Web Sitesで独自ドメイン名を適用する方法を説明する。CNAMEレコードだけでなく、wwwなしのネイキッドドメインが実現可能なAレコード(IPアドレス)も指定できる。
5. Azure Webサイトをバックアップするには?
Azure Webサイトでは、Webサイトとデータベースをバックアップ/復元するための機能が提供されている。その機能の基本的な使い方を解説する。