ちょっと前の話題ですが、Codeplexに「Windows Azure Accelerator for Web Roles」なるものが公開されました。
簡単に言うと、Visual Studioから簡単にWebサイト/アプリをWindows Azure上のWebロールに発行できて、しかも発行したサイト/アプリが永続化されてて複数インスタンスにも対応、という優れたヤツです。
まぁ詳しいことはAzureの小ネタさんのところに書かれてるのでそちらを参照。
さて、細かいのは見てもらって把握された前提で以下2点ほど小ネタを。
1.cloudapp.netなドメインでサービスを提供する
少し見てもらえればわかりますが、ふつーにそのまま使うとWindows Azureの既定のURL(*.cloudapp.net)で発行するWebサイトを管理するWebアプリ(ややこしい)がホストされて、Visual Studioで発行するWebサイトは別名(CNAMEなり)を付けろと言われます。
同一ポートで同一ホスト名で別アプリをバインドしたりできないのでまぁわからなくもないですが、独自ドメイン持ってなかったりする場合、既定のcloudapp.netなドメインを使ってWebアプリをホストしたいですよね?
となるとこのままじゃ不都合なわけです。
じゃどうするかって?簡単な話、Webサイトを管理するためのWebアプリを適当な名前でホストすればいいわけですね。
具体的には ServiceDefinition.csdef (サービス定義ファイル)のサイトのバインディングにホストヘッダを追加して既定の*.cloudapp.netなドメインを使わないようにすればいいです。
これで管理用のアプリは適当な名前でホストされることになりました。で、管理する人がつながればいいのでHOSTSに指定したホスト名で繋がるように記載すればOK!
これで*.cloudapp.netが使えます!
やったね!
2.WebMatrixを使ってWebサイトを発行する
さてお次はWebMatrixです。
このアクセラレータ、公式にはWebMatrixからでも発行(Web配置)OK!ってなってます。でもドキュメントまだないですね。
試しにいろいろ試行錯誤してたのですが、どーしても動作しない。Visual Studioからは問題なし。
という状況で少しばかり悩んでしまいました。
原因はというと、Visual Studioの場合とWebMatrixで発行方法が異なるのが原因でした。
で極端な話、WebMatrixを使う場合、このアクセラレータのVisual Studioを使った発行方法(今時点で公開されてるドキュメントの手順)では無理で、ちょっと設定をしてあげる必要があります。
その前に、ちょっと怪しい気もしますが、このアクセラレータのVisual Studioを使った場合の動作イメージです。
アクセラレータでは、インスタンス起動時にIISリモート管理機能とWeb Deployment Agent(WebDeploy2.0)をインストールします。
Web Roleのエントリポイント内では、同期のサービスが実行されて管理用サイトにて設定された情報(Windows Azure Storage上の情報)をみて、設定に応じてIIS上にWebサイトの作成や、アプリケーションファイルのコピーを行います。また監視も行っており変更があればWindows Azure Storageにコピーしたりします。
※つまりWindows Azure Storage上にアプリケーションファイルを永続化して、各インスタンス上でコピー(複製)できるようになっているわけですね。
※なんか内部通信用にTCP/88ポートも利用してるっぽいですが、あまり深く見てません。見なくてもなんとかなったので(
さてVisual Studioの場合、Web Deployment Agent Serviceに直接発行することができます。
この際利用する発行サービスは /MSDEPLOYAGENTSERVICE で処理そのものはIISが行います。
Web Deployment Agent Serviceは要求が来れば処理するので、アクセラレータ既定の設定でも受け付けられます。
これがWebMatrixの場合は少し異なります。
WebMatrixの場合、Web Deployment Agentへの直接発行はできないようで、IISリモート管理に対して処理を行うことになります。
だいたいこんな感じ。 /MSDEPLOYMETAGENTSERVICE ではなく、msdeploy.axd (IISリモート管理)に発行するイメージです。
で、発行の仕組みが異なりますので、WebMatrixの発行設定でいくらURLやらポートやら変えてもつながりません。
また既定でIISリモート管理のポートはTCP/8172ポートなので、アクセラレータそのままだと接続すらできず。
んじゃどうするか?発行機能を利用するためのサーバー側のモジュールはアクセラレータによってインストール/構成済みです。
あとは、8172ポートへ接続ができればいいだけですね。やり方としては簡単に考えて以下の2つ。
- 最新のAzure SDK(1.4.1)で利用できるWeb発行機能を有効にしてこのアクセラレータをWindows Azure上へデプロイする。
- TCP/8172ポートをオープンする。
1.のSDKの機能を利用する方法ですが、これ使うと1インスタンスでしか展開できません。※デプロイ後にインスタンス数を増やすことは可能。
ちょっと都合が悪いですね。そもそも後で何かしないといけないとかが面倒。
じゃぁ2の方法ではどうでしょう?結論から言うと、サーバー側の準備ができてるのでサービス定義ファイルでInputEndpointを追加で定義すれば問題なく利用できます。
こんな感じでTCP/8172ポートをあけてあげましょう。
デプロイするとこんな感じです。
以上でサーバー側の準備はおわり。あ、管理用のWebアプリから発行先のサイト情報は先に登録しておきましょう。
ではWebMatrixでの操作です。
今回は既定の適当なテンプレートでやってみます。
発行の設定画面で以下のように設定します。
- サーバー
- 管理用サイトのホスト名(アクセラレータ既定だと ~.cloudapp.net)
- ユーザー名・パスワード
- アクセラレータ(というかAzureなプロジェクトの)「リモートデスクトップ接続」で設定したユーザー名とパスワード
- サイト名
- 管理用のWebアプリで設定した、作成するWebアプリのサイト名
- 宛先URL
- 発行したWebサイトが利用するURL
問題が無ければ接続の検証が正常に完了すると思います。
サーバー欄にホスト名だけ指定していますが、省略すると https://<ホスト名>:8172/msdeploy.axd に接続します。
ポイントはHTTPSになること、8172ポートになること、msdeploy.axd(IISリモート管理)を利用することの3点でしょうか。
ちなみにユーザー名・パスワードはIISリモート管理側で認証を行う必要があるので、そのサーバー上(Windows Azureのインスタンス上)で有効なWindowsのユーザーアカウントとパスワードである必要があります。
他にもアクセス許可としては指定できそうですが、このほうが楽ちんですしいいんでしょうか。
※なので、有効なWindows上のアカウントを作るためにRDPの設定が必要なんじゃないかなーと思います。(リモートデスクトップ接続をするのにユーザーを作成するから)
さて設定は以上で終了です。実際に発行してみると、初回は以下の証明書エラーが表示されます。
まぁ自己署名な証明書でHTTPS通信してるのでしょうがないですね。適当に受け入れてあげてください。
ちなみに発行時に複数のセッションをはるようで、複数インスタンスの場合受け入れた証明書のインスタンスと異なるインスタンスに接続する場合があります。
その場合は再度証明書エラーが出るので都度受け入れてあげてください。
発行が正常に完了した後、アクセラレータがインスタンス間で同期を取ります。
無事完了すればWebMatrixで発行したWebアプリが指定したホスト名で参照できます。
サーバー側もちゃんと同期とれてますね。
まとめ
というわけで、ちょっとした工夫でホスト名も柔軟に利用できるし、WebMatrixも利用できます!
素晴らしいアクセラレータを皆さんも是非使ってみてください~
※まぁ発行先のホスト名とか、サーバー単位で指定してると思うから繋がればどこでもいいとは思うけど(試しては無い)
ピンバック: WebMatrix with Windows Azure Accelerator for Web Roles | superriverfield
ピンバック: 蒼の王座 » Windows Azure Accelerator for Web Roles バージョン1.1