【IIS7】 MSC2008 セッションより (第三話)
ではでは 第三話。
{IIS7.0を展開・管理する手法を色々とみてみる}
●様々なインストール方法
この点は既にご案内している How to と @IT さんのサイトで書いた内容でいいでしょう。ただ、資料に入れていた表は貼っておきます。
ただ、一つだけいつもとは違う点をお話したつもりです。それは OS の展開 と一緒に IIS もセットアップしてしまう方法論も検討する必要があるという点です。BDD の後継である MDT を使うと下の図のように実はインストール後処理で OS の役割の一つである IIS も容易にインストールできるわけです。これは IIS に限らず、他の役割や機能も同じことが言えますので展開の計画を立てる時にじっくり検討をお願いします。
●アプリケーションランタイム
OSが展開できて、IISもセットアップされたら、アプリケーション というわけです。ただ、その前に使うアプリケーションのランタイムを検討してみます。
静的コンテンツ(Static)、XML、ASP、ASP.NETについては IIS のモジュールをインストールすることで実装されます。これに該当しないのは今までの IIS でランタイムが ISAPI や CGI 構造で動作するようになっていたものです。例えば、PHP然り、Perl然り ということです。MSC では PHP on IIS のセッションがありましたので、私はあまりふれませんでした。PHPについては今までも色々書いてますし、IIS.NET の PHP on IIS のサイト もだいぶ充実してきています。ちょっとだけリークするとどうも Windows Server の製品マーケティングチームの方で日本語の PHP on IIS サイトを準備中のようですから公開のタイミングでまた紹介しますね。
ちなみにお見せできたデモは PHP4 と PHP5 の環境が簡単に同居できるという話です。それぞれでWebサイトを作成し、それぞれのサイトの web.config に片方は PHP4 の ハンドラマッピングを書き、もう一方では PHP5のハンドラッピングを書けばいいのです。ざっとGUIを使った手順を書いておきましょう。
1. PHP.NETから下記をとってきます。
PHP 5.2.5 Non-thread-safe Win32 binaries ・・・c:\PHP5 に展開
PHP 4.4.8 zip package ・・・c:\PHP4 に展開
2. IISマネージャを開き、Webサイトを二つ作ります。(PHP4:c:\p4site/ポート81、PHP5:c:\p5site/ポート82 のような感じで)
3. PHP4のサイトをツリーからクリックし、ハンドラマッピングを実行
4. モジュールマップの追加 を実行、ダイアログが表示されたらOK
5. PHP5のサイトをツリーからクリックし、ハンドラマッピングを実行
6. モジュールマップの追加 を実行、ダイアログが表示されたらOK
7. サンプルコンテンツを作成
phpinfo.php というファイルをメモ帳で作成。内容は下記の一行で。
<? phpinfo(); ?>
それぞれ PHP4のサイトのフォルダとPHP5のフォルダに1つずつ用意する。
8. https://localhost:81/phpinfo.php と https://localhost:82/phpinfo.php にアクセスする
簡単ですよね、本当。あとは PHP の世界だと思うので php.ini をアプリに合わせてセットしていけばいいでしょう。
●コンテンツの展開
さあ ようやくアプリまで辿り着きました。IIS におけるコンテンツの展開は 大きく 3つ考えておけばいいです。これは IT Pro道場 アプリプラットフォーム編でも繰り返し言ったことでもあります。
1.アプリの入ったフォルダ、2.アプリの環境設定(web.config) そして、3.IIS の環境設定(つまり、アプリフォルダに対してアプリケーション設定あるいはWebサイト設定、アプリケーションプール設定などで、applicationHost.config に書いてあります。)
実は 1、そしてそこに含まれる2 についてはファイル共有を指すように設定するとWebサーバーに展開は不要になります。Webサーバー上のフォルダに置きたい場合には Webサーバーへフォルダをコピーする必要がありますね。そして、例えば2にデータベースへの接続文字列なんかが書いてある場合には展開先のデータベースサーバー名に書き変えないといけないですよね。
3については所謂 IIS7 の管理するそれぞれの方法で実施できます。appcmd であれば appcmd set config /? とでもやってください。サンプルが表示されますので。IIS マネージャで設定をGUIで実行するのももちろん一つの手ですが、前述のAdmin Pack を入れると実は Config Editor がついていたりもします。MWA(.NETのAPI)や WMI については割愛します。
Visual Studio も含めたもっと大きな視点では下記の表のように整理できます。
簡単にやりたければフォルダコピー+appcmdなんていうのもいいでしょうね。
●Webファームの味方 “共有構成”
製品ベータ段階の私の説明を聞いたことのある方は Shared Configuration のことです。要は上で説明したコンテンツをファイル共有におく方式を なんと!環境設定ファイルも置いてしまう方式です。過去の色々な Windows の環境ファイルの考え方では ini も xml も全部ローカルマシンに置くのが当然と思えますが、IISはこれをやってしまいます。
まずはマスター機で設定を全部行って、構成のエクスポート機能を使用して共有に.config ファイル類をコピーします。この時に暗号化用のパスワードを指定します。それぞれのWebサーバーでこの共有構成を使う場合にはここで指定したパスワードが必要になります。嘘みたいに簡単な仕掛けなんですが、これがかなり有効です。何故なら各サーバーを構成する必要がなく、しかもコンテンツが全部ファイル共有を差すようにしてあればこれでWebサーバー n 台が簡単に構成できてしまうからです。驚き ((+_+)) ローカルでポインターの役割を果たすのは redirection.config なので、中身を覗いておくといいでしょうね。今回は説明しませんでしたが、実はあまりにも仕掛けが簡単で、枯れたことをやっているので、ファイルサーバーの色々な仕掛けを併用することができます。オフラインフォルダ機能なんかもこの一つですし、場合によっては VSS(以前のバージョン というタブを表示する版管理機能)なんかも使えます。とても便利です。
●セキュアなリモート管理
アプリの展開が終わった後はメンテナンスということになると思うのですが、基本的に IIS7 の管理のほとんどは HTTP/HTTPS ベースで動きます。Windows Server 2008 を勉強なさっている方は winrm.exe(WS-Managementの実装、リモート管理設定)や winrs.exe(リモートシェル)については知ってますよね。appcmd + winrs というのは強力なタッグです。いずれにしても HTTPS が使えます。IISマネージャも同様でHTTP/HTTPSベースでの管理が可能なのでファイアウォールをあまり意識せずに管理が行える優れものです。IISマネージャの場合には サーバーをIISマネージャで選択し、管理サービスを実行すると リモート管理の設定が行えます。
IIS7 はさらに管理の委任機能があるのでそれを組み合わせることで、ADの組織単位での委任のようなことができ、自分が管理するところだけにIISマネージャを接続できたり、どうしても管理専用のユーザー管理を行いたい場合にはIISマネージャ用のユーザー登録のメカニズムもあります。あとは機能の委任で細かく制御すればいいことになります。もっと細かくやりたい人は applicationHost.config を直にいじくることであらゆる粒度の Lock をかけることが可能です。
●(そして)Windows PowerShellによる IIS の管理
これからは ですよ、皆さん。新しいマイクロソフトのサーバー製品はほぼ PowerShell のスクリプトを出力する機能がついてきていますからまず間違いないところでしょう。
IIS7 については PowerShell を待てずに appcmd という専用コマンドを用意してしまった背景があります。ただ、IIS7自身のシステム構成メカニズムがファイルベースで行われていることから展開のところで説明したようにフォルダのコピーとなんらかの方法でapplicationHost.configを書き換えればいいわけで、PowerShellの得意なテキストファイル制御を駆使すると同時 n 台 コンテンツ展開、構成の調整なんかも自動化可能です。これは Microsoft On の私のセッションなんかでご紹介していたりします。
ただ、今回のMSCセッションの直前にIIS開発チームが別口を出してきました。まだ TechPreview 段階ですが、IIS7用のPowerShell プロバイダ です。これをインストールすると、Exchange で PowerShell を使うのと同じ感覚で IIS7 を管理できるようになります。もうこのブログでこの件は投稿しておいたのでその投稿を読んでくださいまし。セッションではとても寒いデモをやってしまいました、時間的に焦ってたんだな、きっと。Windows Server 2008 で使う場合には IIS7のセットアップと Windows PowerShell の追加を忘れないようにしてください。面倒だったら、servermanagercmd –install powershell で入れちゃいましょう。さむいデモの様子↓ でもどういうことかはわかってもらえたんじゃないかな...と期待します。(*^^)v 詳細については IIS.NET を参照ください。
Windows PowerShell は .NETのクラスが扱えて 且つ オブジェクトをパイプする恐ろしい機能を有しているので可能性は無限大だと思います。.NET をこれから勉強する人は意外と PowerShell から入るのもありなんじゃないかと思うほどです。
●まとめ
まとめでは、今後の新機能登場の形態や IIS7 の機能多様化についてふれました。
IIS7 の新機能はここで説明をしてきた Admin Pack や PowerShell のプロバイダなどと同じように、OSのサービスパックやメジャーリリースを待たずにどんどん登場することになります。FTP7、FPSE、WebDAVなんかもこれに含まれます。一方で、ストリーミングメディアがどんどん普及していくのに合わせて、ビデオコンテンツをWebで提供することも多くなってくることから Windows メディアサービスも IIS開発チームが取り扱うように変わっています。なので同様にIIS7にストリーミングビデオを配置する際に使用できるBit Rate Throttlingのモジュールなんかも登場しています。もう一つの拡張性としては WCFやWFなどを利用したアプリケーションの実行ホストとしてのWASとIIS7です。こちらはベース機能が揃っているので拡張する話は聞こえてきませんが、当然この用途で多く使われていくことになるでしょう。そしてPHPに関してはふれましたが、CGI/FastCGI 環境を利用した他のアプリケーションの動作も今後はIIS7上で多く行われていくことになるでしょう。
ということで、MSCの私のセッションに関する報告はひとまず区切りとしておきます。実はセキュリティのところでHeaderFooter モジュールを使用したデモをやってますが、これはバーチャルラボの登場をお待ちください。4番目のラボで実際に触っていただくことができます。逆に言うとそこから持ってきました。QDIGを使用したPHPアプリケーションで実は計測とキャッシュの効用を見せようと思っていたのですが、それが一番できなくて後悔してます。なので、この点についてはおまけとしてもう一つ投稿しようと思っています。
では また逢う日 まで ♪(●^o^●)
= English =
[IIS7] From my sesssion – the Microsoft Conference 2008 (Part 3)
OK here goes the third part.
{Try out several ways to deploy and manage IIS7.0}
- Various ways to install
This point is well discussed in another post here and also at my article at the @IT web site. But I’ll paste the chart I had in the slide here too.
To add, I spoke something new this time. It’s about deploying IIS with the OS itself and you need to consider that option too. If you use MDT, next version of BDD, as you can see in the picture below, you can setup a post setup action that installs OS roles and features and obviously IIS too easily. This applies to not just IIS but for other features so you should really consider this option and design your deployment scenario carefully.
- Application runtime
So you got the OS deployed and IIS installed then you will want to think about your application. But before that let’s think about the application runtime environment you’ll need for your application.
For static contents, XML, ASP, ASP.NET you’ll just have to install the module for each runtime. Things that don’t apply like this are runtimes that uses the ISAPI or CGI structure. For example, PHP or Perl. At the event, there was a PHP on IIS session separately so I didn’t talk much about it. I’ve written pretty much about PHP on IIS in the past and the PHP on IIS pages on IIS.NET is getting richer every day. To leak some information from my side, it seems that the Windows Server Marketing team is working on a Japanese page for PHP on IIS. I’ll inform you when we get ready to inform you.
I did one demo showing how easy it is to have both PHP4 and PHP5 on a same machine, no switching needed. You just have to make each Web site separately and put PHP4 handler mapping on one web.config and one for PHP5 on the other. I’ll write a very simple step-by-step to accomplish this using the GUI tool.
1. First you have to get the PHP binaries
PHP 5.2.5 Non-thread-safe Win32 binaries –- Extract this in c:\PHP5.
PHP 4.4.8 zip package –- Extract this in c:\PHP4.
2. Open IIS Manager and make two web sites. (PHP4: c:\p4site/Port81, PHP5: c:\p5site/Port82)
3. Click PHP4 site and execute Handler Mapping
4. Execute Add module map, press OK after enter the parameters like the picture below.
5. Click PHP5 site and execute Handler Mapping
6. Execute Add module map, press OK after enter the parameters like the picture below.
7. Create a sample PHP content
Create a phpinfo.php file with notepad. Just enter the following one line.
<? phpinfo(); ?>
Put one in each site folder in PHP4 and PHP5.
8. Access https://localhost:81/phpinfo.php and https://localhost:82/phpinfo.php
Very easy isn’t it? Don’t forget to use FastCgiModule.
After this you will be in the PHP world so edit php.ini for your application and for your needs.
- Deploying content
OK, so you’re now ready for your application deployment. Application deployment in IIS consists of three things to keep it simple. I’ve explained this repeatedly at the IT Pro Dojo seminar.
1.Application folder , 2.Application specific configuration (web.config) , 3.IIS configuration (Application or virtual directory setting for your application folder = written in applicationHost.config)
First of all, if you place your content folder(web.config is included) on a file share, you won’t have to deploy them, you just need to point the servers to them. If you want to place copies to each web server, then you’ll need to think how to deploy. Also you have to think about changing the web.config so that it includes for example the correct database connection string for the environment.
For 3.IIS configuration, it’s all about the various ways you can manage IIS7. If you are using appcmd, try appcmd set config /? to see samples to change configuration. If you’re using IIS Manager, the steps are obvious but to add, if you install the Admin Pack then there is a Configuration Editor added to edit every setting in the config files. I’ll skip MWA (the .NET API) and WMI here.
If you include Visual Studio, the scenarios you can use will expand. You probably can’t read the Japanese so, I’ll write them in English here…
a. Using publish feature in Visual Studio:
You can’t automate this and it’s not integrated with team development
b. File copy, change web.config, set IIS configuration
You can do this manually and you can automate this using the above techniques, but it’s still not integrated with team development
c. Create a web installer with Visual Studio
This will be handy for IT Pros and since it will be a MSI file, very easy to deploy. Still it’s independant and no idea of team development.
d. Deployment with Visual Studio Team System
This one is THE one to choose if you can afford it. It understands the process of team development and you can have profiles about the development environment, staging environment, production environment where things like the name of the database servers will obviously differ – you have to change the .config files before you deploy. With Team System you can pack these variables so that you can deploy from one place to another correctly and quickly.
Well if you’re looking for something very easy, folder copying + appcmd maybe your best choice :-)
- Your powerful friend for web farms, Shared Configuration
To explain it in very simple words, it’s about putting not just contents but also the applicationHost.config file on a file share. In the past, configuration files like something.ini or something.xml was always on the local machine and you might not believe it but IIS7 makes it possible.
First you do all the configuration you need on one machine manually(or automate it) and you use the export feature to copy the .config files to a file share of your choice. When you do this, you specify a encoding password. When you set shared confguration on other servers you’ll need this password. It’s so easy and so simple but it’s quite effective. Why? You don’t have to configure anything on each web server for IIS and additionally if your web sites are pointing to a share for content too, you can very easily setup many web servers at once. First time I heard about this feature, I was amazed…
The pointer is located in a file called redirection.config so if you’re interested, you might as well check the file. For the event, I didn’t have time to explain this feature so well but what this does is very stable, long-history stuff which let’s you use many file server features. Offline folders, DFS-R, VSS are some of them. You must consider this configuration when you have more than 2 servers.
- Secure remote management
After you finish application deployment then maintenance is left. Fundamentally all management features ready for IIS7 works with HTTP/HTTPS. If you already know about Windows Server 2008 quite well, you probably know about winrm.exe (WS-Management, remote management settings), winrs.exe (remote shell). appcmd + winrs is actually a very powerful duo. As you know, this pair can also use HTTPS. It’s the same with IIS Manager and you can manage IIS7 thru HTTP or HTTPS so you don’t have to worry so much about having a firewall between you and the server. For IIS Manager, click the server and check the Management Service to see how your server is configured for remote management.
IIS7 also has feature delegation so if you use these together, you can do delegation like AD, and you can connect to only the area you have rights. You can even create special users for IIS Manager management only. After that, you just set the feature delegation to how you want it. If you want to do it more in detail, you can lock and unlock in various levels in the applicationHost.config file.
- AND, using Windows PowerShell for IIS management
Every new server product that Microsoft is shipping mostly has PowerShell scripting feature so BELIEVE me…
As for IIS7, it couldn’t wait for PowerShell and made a special command line tool, appcmd. But IIS7 itself has a file based system configuration mechanism so when you deploy, you just need to copy some folders and change the applicationHost.config in some way. This is where PowerShell’s strong text file manipulation ability comes in and you can deploy your application to multiple servers so easily by it’s normal functions only. The following picture shows a sample I explain when I go to Microsoft On seminars. :-)
But just before the launch event in Japan, the IIS development team came up with something else. It’s still in TechPreview level but the PowerShell provider for IIS7 came finally. If you install this, you can manage IIS like you can manage Exchange with PowerShell. I already posted about this provider here so please read that post. Well to be honest I did a very very simple demo, I didn’t have time… If you’re using this on Windows Server 2008, setup IIS7 and Windows PowerShell. If you don’t want to do all the setup manually, try “servermanagercmd –install powershell” to do it instantly. The simple demo I did, you can see from the picture. I think the audience got what it means though, I hope. If you want to know more detail, go to IIS.NET.
Windows PowerShell is so powerful because it can pipe OBJECTS and can use .NET classes so easily. I can’t imagine how much PowerShell can do with this capability. If you’re gonna learn .NET from now on, maybe it’s a good idea to learn using PowerShell.
- Summary
In summary, I spoke how the upcoming features are coming and how IIS7 is becoming a very feature rich platform.
The upcoming features of IIS7, like the Admin Pack & PowerShell provider I explained are coming out independently and quickly not waiting for service packs and OS major releases. FTP7, FPSE, WebDAV is also included in this list. Additionally, as streaming media becomes a first class citizen in the web world, Windows Media Service changed to be developed by the IIS team. Accordingly, modules like Bit Rate Throttling is also coming out for this type of content. One more big thing, IIS is also a platform for WCF & WF applications. The baseline features for these are already there and I don’t know of any feature updates but this usage will increase dramatically in the next few years. Another dimension is a platform for PHP and other CGI/FastCGI environment languages which will also be a major citizen in the IIS7 world.
So this will be the end of my report regarding the session I did. Actually I haven’t explained about the HeaderFooter module I showed in a demo but please wait for the localized virtual labs where I got these demos from. You can actually see how it works in the planned 4th lab coming. I also was going to show QDIG and how the cache mechanism is so powerful but I couldn’t squeeze it in time. I’m regretting that very much so I’ll write how it works and how you can actually use the feature in the next post as an appendix to these series of posts.
So farewell, see you again :-)