Windows Azure Web Sites のローカルストレージ

焼土下座ーな感じでこんにちは。

Windows Azure Web Sitesのローカルストレージについて勘違いしていたので懺悔の意味も込めてまとめてみました。

|←樹海|     ┗(^o^ )┓三

もっと素晴らしいのはきっと、しばやん大先生が纏めてくださると思います。

結論から言うと、Windows Azure Web Sitesのローカルストレージは永続化されるし、複数インスタンスで共有(というより同一のものを見ている)されてるので超COOL、ということです。

実際にどういうことか見てみたいと思います。

var path = Server.MapPath("~/App_Data/Sample.txt");
if (System.IO.File.Exists(path))
{
	//開く
	using (var f = System.IO.File.OpenText(path))
	{
		var output = f.ReadToEnd();
		ViewBag.FileString = output;
		ViewBag.CurrentServer = Environment.MachineName;
	}
}
else
{
	System.IO.Directory.CreateDirectory(Server.MapPath("~/App_Data/"));
	//書き込む
	using (var f = System.IO.File.CreateText(path))
	{
		var output = string.Format("Time:{0},Server:{1}", DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm:ss"), Environment.MachineName);
		f.Write(output);
		ViewBag.FileString = output;
		ViewBag.CurrentServer = Environment.MachineName;
	}
}

こんな感じのコードをASP.NETのコントローラにでも書きまして、App_Dataフォルダにファイルがあればそれを表示、無ければ日付とサーバー名を書き込む、あとついでに現在のサーバー名を画面に出します。

実行結果はこんな感じ。

このWebサイトをスケールアウトしてインスタンス数増やしてみます。

結果はこんな感じ(セッションアフィニティあったりするので別PCで実行)

ファイルの中身は同じものを見てます。また現在のサーバー(接続先)はスケールアウトした別サーバーになってますね。

つまりアプリから見えるローカルディスクは各サーバー(インスタンス)で同じ、ということがわかります。

さて、Windows Azure Web Sitesの説明にはストレージは1GB(ないし10GB)をサブ地域で共有、とあります。

同じWebサイトであれば共有してるのがわかりましたけど、領域はどうでしょうか? Azure管理ポータルでWebサイトのダッシュボードをみるとどれぐらい使っているのかがわかりますが、その際に当該サイト以外のサイトが使っている領域が濃いグレーで使用済みになっているのがわかります。というわけで1つのサイトだけでなく、同一サブ地域(データセンター)のWebサイトで容量を共有してるのがわかります。

ちなみに容量を使いきるとどうなるんでしょう?

こんな状態でギリギリにすると容量範囲外とかになっちゃいました。同一サブ地域の別Webサイトのダッシュボードみると

まっかですね。ちなみにほぼほぼ使い切ってるので容量オーバーなファイルの作成などは失敗します。

同じ状態で、別のサブ地域を見てみると

平和そのものです。

さて、この状況で容量ギリギリのほうのWebサイトの片方を無料プランから標準プランに変えてみました。

ストレージ領域が10GBになったので、余裕の空き容量です。さて同じサブ地域の別Webサイトを見てみると、、、

こんな感じでこちらも全体が大きくなっていました。別サブ地域は変わらずです。共通してるのがわかりますね。

まとめるとこんな感じです。

ちなみに各インスタンスのサイト名以上の階層は権限がないので見れません。

無料プランだと他のユーザーのWebサイト用フォルダが並んでるのだと思います。

というわけで、Azure Webサイトは奥が深いですね!

 

おまけ

Azure WebサイトのIISアプリケーションプールの実行ユーザーは IIS Pool\サイト名 なユーザーです。これはApplicationPoolIdentityを指定した場合にできるユーザーです。

このユーザーで基本Kuduももろもろ動作するので Whoami とかみると面白いです。

USER INFORMATION
----------------

User Name             SID                                                   
===================== ======================================================
iis apppool\buchitest S-1-5-82-1-2084833009-2084833009-2084833009-2084833009


GROUP INFORMATION
-----------------

Group Name                           Type             SID          Attributes                                        
==================================== ================ ============ ==================================================
Mandatory Label\High Mandatory Level Label            S-1-16-12288                                                   
Everyone                             Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                        Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE             Well-known group S-1-5-4      Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON                        Well-known group S-1-2-1      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users     Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization       Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
BUILTIN\IIS_IUSRS                    Alias            S-1-5-32-568 Mandatory group, Enabled by default, Enabled group
LOCAL                                Well-known group S-1-2-0      Mandatory group, Enabled by default, Enabled group


PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                               State   
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token             Disabled
SeIncreaseQuotaPrivilege      Adjust memory quotas for a process        Disabled
SeAuditPrivilege              Generate security audits                  Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled 
SeImpersonatePrivilege        Impersonate a client after authentication Enabled 
SeCreateGlobalPrivilege       Create global objects                     Enabled 
SeIncreaseWorkingSetPrivilege Increase a process working set            Disabled

なんか、昔に比べてユーザーの管理方法変わったような気がします。。。

あとフォルダのクォータですが、Windows Server 2012のファイルサーバーリソースマネージャー(FSRM)使ってるんでしょうかね。ユーザー単位じゃなさそうなので。

Windows Azure Web Sites のローカルストレージ」への1件のフィードバック

  1. ピンバック: Windows Azure Web サイトのローカル・ファイルシステムへのデータ保存 | 徒然なブログ

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中