しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

私が Windows Azure Web サイトを大好きな 7 つの理由

Windows Azure Advent Calendar 2013 - Qiita の 1 日目の記事です。初日なので頑張って書きました。

何を隠そう、私はちょっと前までは「クラウドサービスが最高!Web サイトは便利だけど、やっぱり使い勝手が悪いよねー」とか思ってました。

どれぐらい好きだったかと言うと

今年の“Spring Release”では、Windows Azure Webサイト(Web Sites)などの新サービスが追加されました。もちろんその基礎になっている技術はPaaS型のクラウド・サービスですが、そのクラウド・サービス自体の新機能追加があまりないと感じています。クラウド・サービスの新機能追加の優先順位は今後も低いのでしょうか?

特集:Windows Azure&.NETの未来:ScottGuさんを囲んでAzureと.NETの未来を聞いてみた (1/3) - @IT

とか赤シャツ氏に向かって質問してしまうぐらいに、クラウドサービス好きだったんですよ。

そう、去年ぐらいまでは。

しかし、今では Web サイトしかほぼ使っていない状態です。何が自分をここまで変えたのか、これから Windows Azure を触る人の為にもまとめておこうと思います。

何時でも自由に作成、削除が出来るサイト

Web サイトの最大の特徴は、クラウドサービスよりも数倍速く環境を作成してアプリケーションを公開出来るところだと思います。

実際に管理ポータルから Web サイトを作成する場合、数クリックと 10 秒ほどで準備が完了してしまいます。新しく契約する必要などはなく、Azure のサブスクリプションだけあれば無料でも 10 サイトまでは使うことが出来ます。

f:id:shiba-yan:20131106204213p:plain

クラウドサービスも器を作るだけだと速いですが、実際にパッケージをデプロイしてインスタンスが立ち上がるまでには、昔よりは改善されたといっても 10 分ぐらいかかります。

Web サイトは削除も管理ポータルから簡単に行えるので、セミナーなどで使うデモ用途にも最適です。最近の Azure SDK では Visual Studio からも作成できるようになっているのでさらに便利ですね。

アップデートされ続ける実行環境

Web サイトは気が付かない間に続々とアップデートが行われて、新機能が追加されたり環境が最新の OS /IIS になっていたりします。実際に Windows Server 2012 がリリースされた時、気が付かない間にアップデートが行われていました。

そして、先日行われた Web サイトのアップデートで実行環境が少しだけ変わりました。というか、主に ARR 部分だけ変わったかと思われます。

  • Windows Server 2012
  • Internet Information Services (IIS) 8
  • Application Request Routing (ARR) 3.0

この更新によって、今まではリバースプロキシ部分が WebSocket に対応していなかった問題が解消され、正式に Web サイトで WebSocket を使った通信が行えるようになりました。

f:id:shiba-yan:20131106205954p:plain

管理ポータルで有効にするだけで WebSocket が使えるようになります。なので、当然ですが SignalR や Node.js からでも WebSocket を使った効率的な通信を行えます。

WebSocket を利用した場合のインスタンス当たり同時接続数はスケールのモードによって異なっていて、まとめる以下のようになっています。

無料 共有 標準
5 接続 35 接続 350 接続

これ以上の同時接続数が必要なサービスは、インスタンス数を増やすことで対応が可能となっています。同時接続数の制限は、インスタンスのサイズによっては変わらないので注意が必要ですね。

Damian Edwards 氏がツイートしている URL のサイトでは SignalR のトランスポート自動判別を使って、WebSocket が有効かチェックしているようです。全く関係ないですが US の謎 GIF アニメ好きは異常。

そして凄いと思うのが、Web サイトは割と頻繁にアップデートが行われているのに、それに関してダウンタイムがほぼ発生していないという点です。今はごく僅かにダウンタイムが発生する可能性があるようですが、それもゼロにすることを目標に取り組まれているらしいです。

様々な言語に対応

Web サイトは標準で以下の言語に対応しています。

  • ASP.NET 4.5 (C# / VB)
    • Web Forms / MVC / Web API / Web Pages / SignalR など
  • Classic ASP
  • PHP 5.3 / 5.4 / 5.5
  • Python 2.7
  • Node.js 0.10.5

新しく Web サイトを作った時点で、これだけの言語がすぐに使えるような状態になっています。実に素晴らしいですね。

残念ながら .NET 4.5.1 はインストールされていないので使えないですが、PHP は 5.5 が先日のアップデートで使えるようになりました。Node.js は 0.10.5 相当が使えるようになっているっぽいです。*1

f:id:shiba-yan:20131106210304p:plain

今では特に変更する必要はないと思いますが、マネージパイプラインモードの設定も追加されています。古い ASP.NET アプリケーションを動作させる場合に有効でしょう。

そして、最近注目を集めている Visual Studio Online "Monaco" を使ったブラウザ上でのコードの修正や開発を行える機能が、Web サイトに先行で実装されています。

f:id:shiba-yan:20131128174259p:plain

Monaco プレビューを使うためには、構成タブに Visual Studio Online を有効にするかの設定があるので、これをオンにするだけで使えます。

f:id:shiba-yan:20131128174525p:plain

まだまだ Monaco は開発中ですが、Windows 以外のプラットフォームでも使えるので、かなり期待できるのではないかと思います。

IIS ログ / SSL / 独自ドメイン

開発者的には非常に便利な Web サイトですが、実際に運用するとなると独自ドメインを当てたり、SSL が必要だったり、アクセスログを出せと言われたりしますよね。そのあたり不安に感じる人もいるかと思いますが、Web サイトでは多少条件は付きますが、ここで挙げた 3 つの機能全て対応しています。

その条件と言うのは、インスタンスのスケールモードになります。ちょっと書き出してみます。

  • IIS ログ
    • 無料・共有・標準インスタンス
  • SSL
    • 標準インスタンスのみ
  • 独自ドメイン
    • 共有・標準インスタンス

独自ドメインの設定に関しては、既にこのブログでも Windows Azure Web サイトで独自ドメインを使ってみる - しばやん雑記 として扱っているので、こちらを参照してください。残念ながらワイルドカードなサブドメインは現在設定が出来ません。

SSL の設定は pfx ファイルをアップロードして、証明書とドメインを選択するだけの簡単仕様です。料金が変わりますが IP SSL と SNI SSL の 2 つの方式に対応しているので、お値段とターゲットプラットフォームに合わせて選択できます。

f:id:shiba-yan:20131128175433p:plain

SNI SSL は安いですが、ブラウザーによっては表示できないことがあるので注意が必要です。特に Windows XP 上の IE 全てのバージョンに対応していないので、要件として必要な場合は IP SSL を選択します。IP SSL はドメインに対して IP を固定する必要があるので、値段が高くなっています。

そして、Web サイトでは IIS ログをファイルシステムか Blob ストレージに保存できるようになっています。ファイルストレージでは最大でも 100MB という制限が付いていますが、Blob に保存する場合には無制限に IIS ログを保存できるのが特徴です。

設定方法に関しては、以前このブログでも取り扱ったことがあるので以下の記事を参照してください。

絶対に失敗しない Windows Azure Web サイトマニュアル - しばやん雑記

クラウドサービスでも同じように IIS ログを Blob ストレージに保存することは出来ますが、設定にはちょっと手間がかかります。しかし、Web サイトなら管理ポータルから簡単に設定出来ますよ。

ビルドシステム

Web サイトは標準で GitHub や CodePlex、BitBucket といったソースコードホスティングサービスからのデプロイ機能を持っています。それ以外にも外部にある git や Mercurial のリポジトリを取り込むことで、Web サイトにデプロイすることが出来ます。

f:id:shiba-yan:20131128173859p:plain

最近では Visual Studio Online*2 から Web サイトのビルドも出来るので、Visual Studio ユーザーはさらに使い勝手が良いですね。NuGet のパッケージを使っている場合、自動的にサーバ側でパッケージをダウンロードしてビルドしてくれるのも非常に賢いです。

git や TFS なんで使ったことないし、使ってないという方は今まで通り FTP/SFTP での接続にも対応しているので、簡単なサイト公開にも使えますね。

パフォーマンス / スケーラビリティ

Web サイトは 1 インスタンスでもかなりパフォーマンスが良いのですが、それでも負荷に対して足りないということになった場合、以下のような手段を取ることが出来ます。

  • スケールアップ / スケールアウト
  • CPU 使用率によるオートスケール
  • 設定したスケジュールによるオートスケール

スケールアップは標準モードで S から L までのインスタンスを選ぶことが出来ます。

個人的な経験ですが、Web サイトに関してはインスタンス数を予約しておくよりもオートスケールを設定しておいた方が、トータルでのリソースは最適化されると考えています。

ここまでに説明した設定は、全て管理ポータルのスケールタブから GUI で簡単に変更可能です。

f:id:shiba-yan:20131130115423p:plain

スケールアウトに関してもスライダーを動かすだけで自由に増減可能なので、他のクラウドサービスよりも管理が楽にはなっているかと思います。

ちなみに、標準インスタンスを 1 つだけ用意して、その上に複数の Web サイトを載せることが出来るようになっています。

f:id:shiba-yan:20131130133057p:plain

転送量や CPU 使用量、メモリ使用量などに制約が無く、複数の Web サイトでドメインや SSL が使える環境を簡単に確保できるのは、レンタルサーバを複数契約している人にとっても魅力的ではないでしょうか。

Visual Studio / WebMatrix との連携

Web サイトでは様々なバージョン管理システムから、サイトのデプロイが可能となっていますが、今まで通り Visual Studio や WebMatrix の Web 発行を使ってデプロイすることが出来ます。

特に Web サイトに関しては Visual Studio / WebMatrix から直接新しいサイトの作成が出来たり、発行プロファイルの自動ダウンロードなど、管理ポータルが不要なレベルでの連携が実現されています。

f:id:shiba-yan:20131130115043p:plain

バージョン管理システムや Web 発行が使えない場合でも、FTP(S) を使ったファイルアップロードにも対応しているので、静的な HTML だけで構成されるようなサイトでも簡単に使えるようになってます。*3

しかし、Windows 環境を使っている方は無料で公開されている WebMatrix 3 を使うことで、FTP クライアントを使うよりも高速かつ簡単にサイトをデプロイすることが出来るのでお勧めです。

Microsoft Web Platform

f:id:shiba-yan:20131128175308p:plain

WebMatrix は ASP.NET / PHP / Node.js の統合開発環境となっているので、これらを使ったアプリケーションを開発している場合、エディタやバージョン管理システム周り含めて乗り換えることもできます。

特に WebMatrix に関しては Twitter で呟くと緑色のアイコン 2 人がいろいろと教えてくれるはずです。*4

f:id:shiba-yan:20131130113559p:plain f:id:shiba-yan:20131130113607p:plain

とまあ、長々と書いてきましたが、今の Web サイトは出た当時に比べて格段に進化しているので、余程のこと*5がない限りはクラウドサービスの Web Role を使うことなく対応できるようになりました。

既に実案件でこっそりと Web サイトを使っていますが、環境構築にかかる時間を大幅に短縮出来ていて、更に目立った障害やパフォーマンス的な問題も全く出なかったです。まだまだ WordPress を少し動かしてみた!といった情報ばかりなのが日本の Web サイト事情なので、来年に向けてもっと盛り上げていけたらいいな!と思います。

それでは、明日は JAZUG コアメンバーの橋本さんです!

*1:実体は iisnode がインストールされている

*2:元 Team Foundation Service

*3:最悪の手段として Kudu の Debug Console からファイルアップロードが出来るらしい

*4:念のためにモザイクをかけました

*5:インスタンスが数百台無いと捌ききれないようなサービスとか