Add Deployable Assemblies を Windows Azure プロジェクトで使ってみる

※しばやん氏にASP.NET MVCだけでいいよと指摘頂いたので修正 (2011/05/29) 指摘ありがとうございます。

チャック全開兄者からパスが来たので、試してみます。

Visual Studio 2010でASP.NET MVC3 プロジェクトで開発する場合、本番環境に配置する為のアセンブリを追加したり、Binフォルダに一緒にコピーするように設定したりすごく面倒です。

特にWindows Azure上でASP.NET MVC3なWebアプリを展開する場合、気を付けないとアセンブリ不足で動作しないで凹むとかしょっちゅうです。中にはVisual Studio向けAzureプロジェクトテンプレートにMVC3を追加したり、いろいろされてる方もいらっしゃるようです。

でも面倒くさいですね(

NuGetで入るならまだしも。。

ということで、そのうち正式にWindows Azure SDKがASP.NET MVC3に対応すると思いますが、それまでのつなぎな手法を今日は紹介しておきます。

続きを読む

Startup Tasks 小ネタ

自分用メモ。

●PHP5.3とWinCacheのインストール (要Full IIS)

@echo off 
sc config wuauserv start= demand

md appdata
cd appdata 
cd ..
reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d "%~dp0appdata" /f 
webpicmdline /Products: PHP53 /AcceptEula
webpicmdline /Products: wincache53 /AcceptEula
reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f
xcopy php.ini "%programfiles(x86)%"\php\v5.3 /Y
xcopy php_memcache.dll "%programfiles(x86)%"\php\v5.3\ext /Y

net start w3svc

●アプリケーションプールのアイドルタイムアウトをゼロにする (要Full IIS)

@echo off 
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

●IISが特定のIPアドレスからの接続だけアクセス許可するように制限を付ける (要Full IIS)

@echo off 
start /w pkgmgr /iu:IIS-IPSecurity

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/ipSecurity /allowUnlisted:True /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/ipSecurity /+"[ipAddress='192.168.96.0',subnetMask='255.255.255.0',allowed='True']" /commit:apphost

●ファイル共有用にWindowsファイアウォールの設定を変更し、共有フォルダを作成する

@echo off 
netsh firewall set service type=fileandprint mode=enable profile=Current address=10.0.0.0/8 scope=custom
net share appdata=%RoleRoot%\ /GRANT:yourusername(ex:RDP user),FULL

●IISの動的ファイルの圧縮を有効にする(特定のMIMETypeに対して) (要Full IIS)

@echo off 
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/atom+xml',enabled='True']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/xml',enabled='True']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/atom%2bxml;charset=utf-8',enabled='True']" /commit:apphost

コマンドラインで頑張ってみた結果

自分用メモ。Webロール用。

set PATH=c:\Program Files\Windows Azure SDK\v1.4\bin;%PATH%

set PACKPATH="C:\temp\CSPack"
set CSDEF="deploypackage\ServiceDefinition.csdef"
set OUT=/out:deploypackage\sample.cspkg
set SITES=/sitePhysicalDirectories:RoleFiles;Web;%PACKPATH%\RoleFiles
set ROLE=/role:Web;%PACKPATH%\RoleFiles;bin\Role.dll /rolepropertiesFile:Web;deploypackage\role.txt

cd %PACKPATH%
cspack %CSDEF% %OUT% %SITES% %ROLE%

パスはこんな感じにしておいてください。

CSPack
├─DeployPackage
│      MakeDeploypackage.bat
│      role.txt
│      ServiceDefinition.csdef

└─RoleFiles
    │  Web.config
    └─bin
           startup.cmd
           role.dll

実行する場合はWindows Azure SDK Command Promptからやるのがいいです。
ただ下記の環境変数があれば普通のコマンドプロンプトでもいけそうですけどね。

ServiceHostingSDKInstallPath=C:\Program Files\Windows Azure SDK\v1.4\

ちなみにCSPackには隠された12番目の理論 コマンドライン引数 /noencrypt があります。
*.cspkgを証明書を使った暗号化しないのでCSPack関連のファイルだけ別PCに持って行ってパッケージングするときに便利。(SDKのインストールしたくない場合とか)
※でもまぁ非公式なので使わないほうがいいですね。

しかし綺麗なコマンドじゃないですな。

Windows Azure SDK 1.4 refresh でWindows Azure Connect Endpointの接続が失敗する

さとうなおきさんのツイートより。

Windows Azure SDK 1.4 Refreshを使用してWindows Azure Connectを有効にしたサービスパッケージをデプロイしてもWindows Azure Connectに繋がらない問題があるようです。

FixしたSDKがリリースされているので、一度Windows Azure SDKをアンインストールして再度インストールする必要がるようです。

Windows Azure Connect Team Blog > Windows Azure SDK 1.4 refresh

1) Windows Azure SDKをアンインストールします。

2) http://www.microsoft.com/windowsazure/getstarted/default.aspx ここから再度SDKをセットアップします。(Web Platform Installer経由です)

※再インストール後もバージョンかわってなさそうです…

ということでWindows Azure Connectを利用される方は注意しましょう。

Windows Azure SDK のインストール

以前のWindows Azure SDKはいろいろ面倒な手順を踏む必要がありました。

例えばIISの機能を入れたりSQL Server入れたり、SDKを入れたり…

どれぐらい手間かは「ハマらない&安心な Windows Azure SDK 1.3 のセットアップ方法(waりとnaはてな日記)」「Windows Azure SDKのインストールについて(waりとnaはてな日記)」を参照頂ければよくわかるかと思います。

※設定もれがあるとちゃんと動作しなかったりも痛いですね。

うえー面倒くせーという、そんなあなたもおいらも朗報。

Web Platform Installer を使えば簡単に解決です。
※但しOSのバージョンやエディション等の要件はクリアしておく必要があります。

一発で全部入ります!!(※全部無償でやる場合)

Windows Azure SDK 1.4 Refresh

MIXでアナウンスされていたWindows Azure SDK 1.4のRefresh(SDK 1.4.1)がリリースされました。

このアップデートでは、IIS環境に対し簡単にWebアプリを発行できるWeb Deployment Tool (Web配置ツール)が統合され、簡単にWindows Azure上のWeb RoleにWebアプリケーションを配置できるようになりました。

但しいくつか制限があります。

  • Web配置はシングルインスタンス(1インスタンス)のみ対応できます。
  • このツールを使用したシナリオはテストや開発時を想定しています。
  • Web配置ツールを使用した際の更新ファイル等はサービスパッケージデプロイ後のロールインスタンス上のファイルを直接更新するので永続化されません。最終的にはサービスパッケージを作成し、Windows Azure上へデプロイする必要があります。
  • Web配置用にInputEndpointを1つ消費します(リモートデスクトップ接続も必須です)

あくまで開発者がテストや開発の際のWindows Azure上へのデプロイの手間を軽減させるための機能と考えたほうがいいでしょう。でも便利ですね。

続きを読む

Windows Azure Traffic Manager

MIX11でアナウンスのあったWindows Azure Traffic Manager (CTP)がActiveになってました。
Windows Azure Traffic ManagerはWindows Azure Virtual Networkカテゴリに属する新しい機能です。(他にはWindows Azure Connect等が含まれます)

何をするものかというと、ホストサービス間をまたがってWeb Roleの負荷分散やフェイルオーバー、ラウンドロビンを行うことができます。

※詳細はWindows Azure Traffic Manager Configuration Guidを参照ください。(今時点で一番詳しいドキュメントです)
このドキュメントに動作原理やトラフィックの流れなど、全部書いてます。

続きを読む