焼土下座ーな感じでこんにちは。
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)使ってるんでしょうかね。ユーザー単位じゃなさそうなので。
カテゴリー:Tips, 技術的なネタ Tagged: Azure, Cloud, JAZUG, WebSites
