Windows Azure 用アプリケーション開発
            Step-by-Step チュートリアルガイド




              マイクロソフト株式会社 コンサルティングサービス統括本部

© 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
             本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
目次

第1章      はじめに ............................................................................................................................................. 5
 1.1     本書の目的と前提条件 ....................................................................................................................... 5
 1.2     Windows Azure Platform 概要 ........................................................................................................ 5
     1.2.1      クラウドコンピューティングとは ...................................................................................................... 5
     1.2.2      マイクロソフトのクラウドコンピューティングの全体像 ....................................................................... 6
     1.2.3      Azure 用アプリケーション開発時に利用する主要サービス ............................................................ 7
     1.2.4      Web アプリ開発時に考慮すべき Azure の特徴 ............................................................................ 9
第2章      簡単なサンプルを用いた Azure アプリケーションの開発 .................................................................... 11
 2.1     開発環境の構築 ............................................................................................................................... 11
     2.1.1      Windows 7 Enterprise 評価版のインストールと IIS の追加インストール ................................... 11
     2.1.2      Visual Studio 2010 Ultimate 評価版のインストール ................................................................ 12
     2.1.3      SQL Server 2008 R2 Management Studio Express のインストール ....................................... 12
     2.1.4      Windows Azure Tools for Microsoft Visual Studio ver1.2 のインストール .............................. 13
 2.2     ローカルでの Web アプリケーション開発 ............................................................................................ 13
     2.2.1      Web アプリケーションプロジェクトの作成 .................................................................................... 13
     2.2.2      1 つ目の Web ページの作成 ..................................................................................................... 14
     2.2.3      2 つ目の Web ページの作成 ..................................................................................................... 14
     2.2.4      ASP.NET 開発サーバー上での動作確認 .................................................................................. 16
 2.3     クラウドサービスプロジェクトの追加 .................................................................................................... 17
     2.3.1      クラウドサービスプロジェクトの役割 ............................................................................................. 17
     2.3.2      クラウドサービスプロジェクトの追加 ............................................................................................. 17
     2.3.3      複数の Web アプリケーションを同時に展開する場合 .................................................................. 19
     2.3.4      クラウドサービスプロジェクトの構成設定 ..................................................................................... 20
 2.4     開発用ファブリック上での動作確認 .................................................................................................... 21
     2.4.1      動作確認 .................................................................................................................................. 21
     2.4.2      開発用ファブリックのランタイム構成 ............................................................................................ 22
     2.4.3      運用環境と比較した開発環境(開発用ファブリック)の特徴 .......................................................... 23
     2.4.4      開発用ファブリックへの配置の仕組み ........................................................................................ 26
 2.5     Diagnostic Monitor によるアプリケーション監視 ............................................................................... 27
     2.5.1      Diagnostic Monitor とは ......................................................................................................... 28
     2.5.2      Azure ストレージ側の事前準備 ................................................................................................. 29
     2.5.3      収集するログファイルに関する設定方法 ..................................................................................... 31
     2.5.4      ログファイルの確認方法 ............................................................................................................ 34
第3章          Windows Azure 運用環境への展開 ............................................................................................. 37
 3.1     Windows Azure の購入................................................................................................................... 37
     3.1.1      Step 1 - Microsoft Online Services カスタマー ポータル プロファイル登録........................... 37
     3.1.2      Step 2 - Microsoft Online Services カスタマー ポータルから Azure の購買 ...................... 39
     3.1.3      Step 3 - Azure のアクティブ化 ............................................................................................. 43
 3.2     各種サービスの初期設定と Windows Azure API Certificate の登録 ............................................... 47
     3.2.1      SQL Azure データベースサービスの初期設定 .......................................................................... 47
     3.2.2      Windows Azure ストレージサービスの初期設定 ....................................................................... 51
     3.2.3      Windows Azure コンピュートサービスの初期設定 ..................................................................... 55
     3.2.4      API Certificate の登録 ............................................................................................................ 58
 3.3     SQL Azure データベースサービスへの移行 ..................................................................................... 61



                                                                                                                       p.3
                                 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                            本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.3.1     SQL Server Management Studio からの接続........................................................................ 61
   3.3.2     テーブルの作成 ........................................................................................................................ 62
   3.3.3     データの移行 ............................................................................................................................ 63
   3.3.4     アプリケーションの接続文字列を変更......................................................................................... 64
   3.3.5     動作確認 .................................................................................................................................. 64
 3.4   Windows Azure ストレージサービスへの移行 ................................................................................... 65
   3.4.1     ストレージ接続文字列の設定 ..................................................................................................... 65
   3.4.2     Blob コンテナ・テーブルの作成 ................................................................................................. 66
 3.5   Windows Azure コンピュートサービスへの移行 ................................................................................ 68
   3.5.1     インスタンス数の変更 ................................................................................................................ 68
   3.5.2     クラウドサービスのパッケージングと Azure 上への配置 .............................................................. 69
   3.5.3     Windows Azure コンピュートサービスの動作確認 ..................................................................... 72
 3.6   アプリケーションの修正と Azure 環境への再配置 .............................................................................. 73
   3.6.1     開発用ファブリックと本番環境の相違点 ...................................................................................... 73
   3.6.2     アプリケーションの修正 .............................................................................................................. 74
   3.6.3     アップグレード ........................................................................................................................... 74
   3.6.4     解決されない問題 ..................................................................................................................... 76
   3.6.5     構成設定の変更 ....................................................................................................................... 77
   3.6.6     本番環境への展開 .................................................................................................................... 78
   3.6.7     サービスの停止 ......................................................................................................................... 80
   3.6.8     アカウントの削除 ....................................................................................................................... 80
第4章        Windows Azure 運用環境における課金 ....................................................................................... 81
 4.1   Windows Azure 運用環境における課金を安く抑える方法 ................................................................ 81
   4.1.1     トラフィックの課金 ...................................................................................................................... 81
   4.1.2     Windows Azure コンピュートサービスの課金 ............................................................................ 82
   4.1.3     Windows Azure ストレージサービスの課金 ............................................................................... 83
   4.1.4     SQL Azure データベースサービスの課金 ................................................................................. 84
   4.1.5     課金状況の確認 ....................................................................................................................... 84
   4.1.6     課金の予測............................................................................................................................... 85




  本書の利用条件:

  本書に関するすべての権利は、マイクロソフト コーポレーション (以下、マイクロソフト) が保有しています。マイク
  ロソフトまたはその関連会社による事前の承諾がない限り、本書の全部または一部を複製 (電子装置等への保存・保管
  を含む)、改変、翻案、再頒布、公衆送信、貸与、譲渡することは一切認められません。
  マイクロソフトおよびその関連会社は、本書の内容について何ら保証するものではなく、本書の使用に関連してお客様
  または第三者に生ずる間接的、付随的、結果的な損害 (営業機会や営業情報の損失などを含む) について一切責任を負
  いません。
  本書の中で例として使用されている企業、名前およびデータは、特に記述が無い限り架空のものです。

  © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan




                                                                                                                   p.4
                             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
第1章
                                                                                              はじめに

1.1       本書の目的と前提条件
 本ガイドは、Windows Azure Platform について実際にご自身の手で開発を体験いただくためのチュートリアル
ガイドとなっております。Windows Azure と SQL Azure を使った、サンプル Web アプリケーションを Azure 用のア
プリケーションにカスタマイズし、実際にデプロイするまでを、順を追って解説していきます。


 本ガイドでは ASP.NET、SQL Server などに関する、基本的な開発スキルを前提として解説していきます。もし、こ
れらに不安がある場合には、まず ASP.NET や SQL Server に関する書籍を学習した上で、本ガイドをご参照くださ
い。


1.2       Windows Azure Platform 概要
 Azure 用アプリケーションを開発する前に、本章で Windows Azure Platform とはどのようなサービスかおさらい
し、次章から Azure 用アプリケーションを開発していきます。


 ・    クラウドコンピューティングとは(1.2.1)
 ・    マイクロソフトのクラウドコンピューティングの全体像(1.2.2)
 ・    Azure 用アプリケーション開発時に利用する主要サービス(1.2.3)
 ・    Azure 用アプリケーション開発時の基本的な注意点(1.2.4)


 1.2.1    クラウドコンピューティングとは
      Azure は Microsoft が提供しているクラウドコンピューティングサービスの1つです。クラウドコンピューティング
     とは、ネットワークを介して提供される「サービス」を利用する形態のことを言います。




      クラウドコンピューティングの大きな特徴は、低水準のハード構成やソフトウエアを意識する必要がないということ
     です。従来のコンピューティングシステムは、インフラ、アプリ、運用のすべてを自社で賄う必要がありました(これ
     をオンプレミスと言います)。クラウドコンピューティングでは、これらすべて、または一部を、他社に任せることがで
     きるようになります。ハード、ミドル、およびアプリの、どこの層まで他社に任せるかで、クラウドを分類することがで
     きます。


      ・     IaaS ・・・ ハード部分のみ他社に任せてしまう
      ・     PaaS ・・・ インフラ部分(ハードおよびミドル)のみ他社に任せてしまう
      ・     SaaS ・・・ ハード、ミドルおよびアプリまで全て他社に任せてしまう



                                                                                                           p.5
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
コンピューティングシステムの全部または一部を他社に任せると、その部分の構築や保守、運用などについて
 考える必要がなくなります。そのため、クラウドコンピューティングを活用すると、当該企業が本当に注力したい部
 分にのみ、ビジネスリソースを割くことができるようになります。


1.2.2   マイクロソフトのクラウドコンピューティングの全体像
   最適なクラウドコンピューティングは、ユーザー企業ごとに異なります。例えば、メールサーバーを例にとります。
 メールサーバーの運用などをしたくない中小企業は SaaS が最適です。しかし、セキュリティポリシー上、メールを
 社外に出せない企業は、オンプレミスが最適です。このため、マイクロソフトでは、オンプレミス型とクラウド型の 2
 通りのシナリオを提供しています。




   Windows Azure Platform は、マイクロソフトの PaaS 型のクラウドサービスです。自社開発アプリケーションを
 載せるプラットフォームとして Windows Azure Platform を見た場合には、以下のような特徴があります。


   ・    .NET Framework や Visual Studio を使った開発ができる
   ・    煩わしいハードウェアやミドルウエア運用から解放される
   ・    利用に応じた課金がなされる




                                                                                                         p.6
                   © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                              本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
1.2.3    Azure 用アプリケーション開発時に利用する主要サービス
   Azure 用アプリケーションを開発する場合には、主に以下 3 つのサービスを利用します。


   ・     Windows Azure コンピュートサービス(以下、コンピュートサービス)
   ・     Windows Azure ストレージサービス(以下、ストレージサービス)
   ・     SQL Azure データベースサービス(以下、データベースサービス)




   これらの概要について簡単に解説していきます。


  A. Windows Azure コンピュートサービス
        コンピュートサービスは、カスタムアプリケーションのホスティングサービスです。Windows Server OS のベ
    ースイメージが提供され、そこにカスタムアプリケーションを載せて実行することができます。コンピュートサー
    ビスには、大別して 2 種類の OS ベースイメージがあります。


          a. Web Role サーバー
         主に Web アプリケーションをホストするためのサーバーです。IIS が搭載されています。


          b. Worker Role サーバー
         主にバッチアプリケーションを動作させるためのサーバーです。IIS が搭載されていません。


        これらの OS ベースイメージにアプリケーションをインストールし、実行させて使用します。




  B. Windows Azure ストレージサービス
        Azure 上で動作するアプリケーションやサービスは、セキュリティ確保のため、基本的にローカルのファイル
    システムに書き込むことができません。それに代わるものとして、データ保存用に提供されているのが、ストレ
    ージサービスです。ストレージに格納できるデータ構造として、3 種類のデータ構造(Blob, Table, Queue)が




                                                                                                           p.7
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
定義されており、そのデータ構造ごとに 3 種類のストレージがあります。それぞれのストレージには URI が付い
        ていて、HTTP-REST プロトコル1によるアクセスができるようになっています。

          種類        データ              用途                                        URI
          BLOB      バイナリ             巨大バイナリデータを種類問わずに格納でき                      http://<アカウント名
          ストレージ     データ              るストレージになっています。そのため、マル                     >.blob.core.windows.net/<コンテナ名
                                     チメディア系のファイル                               >/<Blob 名>
                                     (.wmv、.wav、.mp3、.jpg など)や巨大なデータ
                                     ファイル(.vhd、.zip など)などの格納に最適で
                                     す。
          Table     Key-Value        プロパティ値のみを持つようなオブジェクトを、                    http://<アカウント名
          ストレージ     データ              二つのキーにより一意化し、分散保有する設                      >.table.core.windows.net/<Table 名
                                     計になっています。そのため、キーを上手に                      >?$filter=<Blob 名>
                                     設計することにより、巨大なデータ検索処理を
                                     効率よく実行することができるようになります。
          Queue     メッセージキュー         Web/Worker Role サーバー間の通信には                http://<アカウント名
          ストレージ     データ              HTTP または TCP による直接型通信を行いま                 >.queue.core.windows.net/<Queue 名
                                     す。この通信を非同期で行いたい場合にのみ                      >
                                     Queue ストレージを使用します。




      C. SQL Azure データベースサービス
         SQL Azure データベースサービスは、インターネット上で利用できる SQL Server データベースです。
        TDS プロトコルを直接受けつけることができるため、通常の SQL Server とほぼ同一の開発ツールや管理ツ
        ールを利用できます。しかし、完全に SQL Server と同じというわけではなく、SQL Server に対していくつか
        のカスタマイズと、制限事項を加えて作られています。


             a. 制限事項
            ・   容量の上限が 50GB と低い


             b. メリット
            ・   内部でレプリケーションによるデータの多重保持が行われており、サービス可用性 99.9%が保証さ
                れている
            ・   カスタムアプリケーションのインフラとして見た場合、SQL Server の細かいサーバー運用に、気を
                払わずに使うことができる




1   REST(Representational State Transfer)とは、HTTP のメソッドヘッダー上にデータアクセスのための命令(Post、Get、Put、
    Delete)を記述することでリソースにアクセスできるように設計されたプロトコルのことです。



                                                                                                                p.8
                          © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                     本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
1.2.4   Web アプリ開発時に考慮すべき Azure の特徴
   通常(オンプレミス用)の Web アプリケーション開発と比較して、Azure 用の Web アプリケーション開発には、
 PaaS アプリケーション開発特有の特徴があります。具体的には、オンプレミス型の開発とは異なり、ハードやミド
 ルなどの、インフラに関わる設定や運用を、ほとんど考えなくて済むという利点があります。しかしその半面、Web
 サーバーや DB サーバーの設定やバージョンを自由に決めることができない、または変更できないなどの注意点
 があります。また、配置するアプリケーションそのものにも、ローカル HDD やレジストリへの書き込みができない、
 複数の Web アプリを同一サーバー上に配置できないなどの制限事項があります。


   具体的な制限事項・注意事項として、最初に知っておくべきものに、以下のようなものがあります。オンプレミスと
 比べ、こうした注意事項や制限事項が多いため、きちんと理解した上で、開発を進める必要があります。




   また、Windows Azure Platform は、リソースを共用するタイプの画一的なプラットフォームであることも忘れて
 はいけません。詳細はここでは解説しませんが、下図に示すように、コンピュートサービスにしろ、SQL Azure にし
 ろ、複数のユーザーがひとつのハードウェア筐体を共有する形式を取っており、またサービスレベルも画一的なも
 のとなります。オンプレミスであれば、単一のアプリケーションが全ハードウェアリソースを占有することも、また
 99.999%のような超高可用性を目指すことも自由ですが、クラウドサービスではこのような自由がありません。




                                                                                                      p.9
                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
このような背景から、Azure に適したアプリケーションと不向きなアプリケーションとがあります。


A. Azure に適しているアプリケーション
  ・   一般的なインターネットアプリケーション
  ・   トラフィックが時期や時間帯により、大きく変動するアプリケーション
  ・   ASP サービスとして展開しているアプリケーション
  ・   自社でインフラを持たないソフトウエア会社が、開発するアプリケーション


B. Azure に不向きなアプリケーション
  ・   セキュリティポリシー上、社外に持ち出すことのできないデータを取り扱っているイントラネットアプリケー
      ション
  ・   Azure の SLA では不十分な、ミッションクリティカルシステム
  ・   SP や QFE などの、ソフトウェアバージョンを固定したいアプリケーション


 全てのアプリケーションが、Azure に適しているというわけではないということにご注意ください。このような注意
点を理解した上で、Azure 用のアプリケーションを開発する必要があります。




                                                                                                  p.10
             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
第2章
                           簡単なサンプルを用いた Azure アプリケーションの開発

 それでは、Azure 用のアプリケーションを開発していきましょう。


2.1          開発環境の構築
 Windows Azure 上で動作するアプリケーションを開発するためには、Windows Azure 用の SDK が必要となりま
す。本ガイドでは、Windows Azure SDK 1.2 を用いて開発するため、以下のような環境をセットアップする必要があ
ります。なお、以下は全て一般に入手可能な評価版、またはフリーのツールになっています。

      種類                         製品
      OS                         Windows 7 Enterprise 評価版
      開発ツール                      Visual Studio 2010 Ultimate 試用版
      Management Studio          Microsoft SQL Server 2008 R2 RTM - Management Studio Express
      その他                        Windows Azure Tools for Microsoft Visual Studio ver1.2


 以下の手順で環境をセットアップします。


 2.1.1        Windows 7 Enterprise 評価版のインストールと IIS の追加インストール
      Windows Azure SDK 1.2 に対応する OS は、2010 年 6 月 25 日時点で以下の 4 つとなります。Visual Studio
  自体は Windows XP や Windows Server 2003 でも動作しますが、Windows Azure SDK が対応していないた
  め、Windows XP などでは Window Azure 上で動作するアプリケーションを開発することはできません。


       ・       Windows Vista SP 1 以降
       ・       Windows 7
       ・       Windows Server 2008
       ・       Windows Server 2008 R2


      今回は「Windows 7 Enterprise 評価版」をインストールします。以下のリンクから ISO ファイルをダウンロード
  し、ご自分の端末にインストールしてください。

           ダウンロードサイト
           http://technet.microsoft.com/ja-jp/evalcenter/cc442495.aspx


      Windows Azure SDK を使用するためには、IIS 7.0 以上のインストールと、オプションとして [ASP.NET] と
  [WCF HTTP Activation] の有効化が必要となります。以下の手順で追加インストールしてください。


       ・       コントロールパネルの [プログラムと機能] を開き、左端のペインから [Windows 機能の有効化または無
               効化] を選択します
       ・       ツリービューの [インターネットインフォメーションサービス] をチェックします
       ・       「インターネットインフォメーションサービス」を展開し、「ASP.NET」をチェックしてください
       ・       また、「Microsoft .NET Framework 3.5.1」を展開し、「Windows Communication Foundation
               HTTP Activation」をクリックしてください


                                                                                                                       p.11
                                  © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                             本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
これで IIS の追加インストールは終了となります。


    2.1.2   Visual Studio 2010 Ultimate 評価版のインストール
       次に開発ツールをインストールします。Windows Azure SDK 1.2 は、Visual Studio 2008 SP1 にも対応して
     いますが、今回は Visual Studio 2010 Ultimate 試用版を用いて開発します2。以下のリンクからダウンロードし、
     インストールしてください。なお、インストール時にはすべてデフォルトのオプションを利用してください。

         ダウンロードサイト
         http://www.microsoft.com/downloads/details.aspx?FamilyID=06a32b1c-80e9-41df-ba0c-79d56cb823f7&displaylang=ja



    2.1.3   SQL Server 2008 R2 Management Studio Express のインストール
       次に SQL Server Management Studio をインストールします。Management Studio を利用すると、データ
     ベースサービスを管理できます。以下のリンクよりダウンロードし、インストールしてください。なお、インストール時
     にはすべてデフォルトのオプションを利用してください。

         ダウンロードサイト
         http://www.microsoft.com/downloads/details.aspx?familyid=56AD557C-03E6-4369-9C1D-E81B33D8026B&displaylang=ja




2   (参考) Visual Studio 2008 SP1 に Windows Azure SDK 1.2 をインストールして開発する場合、Windows Azure SDK 1.2 のすべ
    ての機能を使うことができません。このため、Visual Studio に関しては、2010 を利用することを推奨します。



                                                                                                                     p.12
                                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.1.4      Windows Azure Tools for Microsoft Visual Studio ver1.2 のインストール
      最後に、Visual Studio 用の Windows Azure アプリケーション開発ツールキットをインストールします。今回は、
  2010 年 6 月 25 日時点において最新版の、Windows Azure SDK 1.2 を含む、Windows Azure Tools for
  Microsoft Visual Studio ver 1.2 をインストールします。以下のリンクよりダウンロードし、インストールしてくださ
  い。

         ダウンロードサイト
         http://www.microsoft.com/downloads/details.aspx?FamilyID=2274a0a8-5d37-4eac-b50a-e197dc340f6f&displaylang=en


      インストールすると、同時に SDK もインストールされます。そして、Visual Studio で Cloud Service のプロジェ
  クトテンプレートが追加され、Windows Azure 上で動作するアプリケーションの開発が可能となります。


2.2        ローカルでの Web アプリケーション開発
 さて、いよいよ Windows Azure 用のアプリケーションを開発していきます。オンプレミス型のアプリケーションを
Azure 上へ移行するというシナリオも想定し、今回は、まずローカルで通常の Web アプリケーションを開発し(本章)、
それを Windows Azure 上へ展開する(次章)、という流れで作業を進めていきます。


 2.2.1      Web アプリケーションプロジェクトの作成
      まず、新規に.NET Framework 4.0 で [ASP.NET 空の Web アプリケーション] プロジェクトテンプレートから
  プロジェクトを作成します。[ASP.NET Web アプリケーション] というプロジェクトテンプレートもありますが、こちら
  ですと、必要のないモジュールまで含まれてしまいます。そのため、今回は Web.config のみを含む [ASP.NET
  空の Web アプリケーション] プロジェクトテンプレートから作成します。




      今回はサンプルとして、①一般的な Web ページと、②データベース入出力を行う Web ページの 2 つを作成し
  ます。




                                                                                                                    p.13
                               © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                          本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.2.2   1 つ目の Web ページの作成
   まず、Web プロジェクトに [Web フォーム] テンプレートから、1 つ目の Web ページ(WebForm1.aspx)ページ
 を追加します。そして、以下のような画面とロジックを作成してください。




2.2.3   2 つ目の Web ページの作成
   次に、2 つ目の Web ページを作成します。


  A. データベースの追加
        Web プロジェクトにデータベースファイルを追加します。以下の URL からサンプルデータベースをダウンロ
    ードし、インストールウィザードに従いインストールしてください。


                                                                                                       p.14
                  © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                             本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ダウンロードサイト
          http://www.microsoft.com/downloads/details.aspx?FamilyId=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en


         インストールすると、C ドライブの ”SQL Server 2000 Sample Databases” フォルダに NORTHWND デ
       ータベースと PUBS データベースの 2 つが作成されます。今回は PUBS データベースを使用しますので、
       Web プロジェクトに App_Data フォルダを追加し、さらにその App_Data フォルダに PUBS.MDF ファイルを
       追加してください3。




      B. テーブルの一覧表示をする Web ページの作成
         次に、Web プロジェクトに 2 つ目の Web ページ(WebForm2.aspx)を追加してください。そして、
       SqlDataSource と GridView を用いて、authors テーブルを一覧表示するプリケーションを作成してください
       (サーバーエクスプローラーから authors テーブルをドラッグ&ドロップすると簡単に作成できます)。




3   App_Data フォルダは [追加] → [新しいフォルダ] から”App_Data”を指定して追加できます。pubs.mdf ファイルは App_Data フォル
    ダにドラックアンドドロップすることで追加できます。



                                                                                                                   p.15
                              © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                         本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.2.4   ASP.NET 開発サーバー上での動作確認
   以上の作業が終了したら、Ctrl + F5 キーでアプリケーションを起動し、実行してください。すると、ASP.NET 開
 発サーバーが起動し、下図のようにアプリケーションが動作します。




                                                                                                     p.16
                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.3           クラウドサービスプロジェクトの追加
 それでは引き続き、このアプリケーションを Azure 用(Web Role サーバー用)に修正していきます。


 2.3.1        クラウドサービスプロジェクトの役割
      Window Azure Tools(開発ツールキット)によりインストールされるクラウドサービスプロジェクトは、簡単に言う
  と、以下の 2 つの作業を行うためのプロジェクトです。


      ・       開発用 PC の中で、開発用ファブリック(Windows Azure エミュレータ)を起動し、その上でアプリケーシ
              ョンを実行・デバッグする
      ・       作成したアプリケーションのファイルを、Windows Azure 本番環境へアップロードできるようにパッケージ
              化する


      後者は次章で解説しますので、前者についてこれから解説していきます。


 2.3.2        クラウドサービスプロジェクトの追加
      まず、Visual Studio のソリューションファイルに対して、クラウドサービスプロジェクトを追加します。そして、先
  ほど作成した Web アプリケーションプロジェクトを追加し、Web アプリケーションが Windows Azure 上に展開さ
  れるようにします。具体的には以下のようにします。


      A. プロジェクトの追加
          ・   ソリューションに対して、[Windows Azure Cloud Service] プロジェクトを追加する。




                                                                                                             p.17
                        © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                   本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   次の [New Cloud Service Project] の画面で、何も選択せずに [OK] ボタンをクリックする。
         先ほど作成した Web アプリケーションプロジェクトを追加するため、ここでは何も選択しません。




B. Roles へのプロジェクトの追加
  次に、追加したクラウドサービスプロジェクトへ、Web Role として、先程作成した Web アプリケーションを追
加します。具体的な追加手順は、以下のようになります。


  ・   クラウドサービスプロジェクト内の [Roles] フォルダを右クリックし、[Add] → [Web Role Project in
      solution…] をクリックする
  ・   追加するプロジェクトとしては、先ほど作成した [WebApplication1] プロジェクトを指定する




                                                                                                     p.18
                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
以上の作業により、[Roles] フォルダの中に、[WebApplication1] プロジェクトが追加されます。これにより、こ
     の [WebApplication1] プロジェクトが Web ロールサーバー上に展開され、実行されるようになります。


    2.3.3   複数の Web アプリケーションを同時に展開する場合
       1 つの Web ロールサーバー上には、1 つの Web アプリケーションのみが展開(インストール)可能です。複数
     の Web アプリケーションを、同一の Web ロールサーバー上に展開して実行することはできません。複数の Web
     アプリケーションを同時に展開したい場合には、下図のように、複数の Web ロールサーバーを使用する必要があ
     ります4。




4   ひとつの Web アプリケーションにまとめ直して、Web Role サーバー上に展開するという方法もあります。



                                                                                                          p.19
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.3.4   クラウドサービスプロジェクトの構成設定
       次に、各ロール(サーバー)の構成設定を行います。クラウドサービスプロジェクトの [Roles] 下にある各ロール
     をダブルクリックすると、構成設定画面が現れます。こちらを使うと、以下のような項目が設定できます。


       ・    利用する仮想マシン(VM)のサイズ(仮想マシンに割り当てる CPU やメモリリソースのサイズ)
       ・    利用する仮想マシンのインスタンス数
       ・    CAS(Code Access Security)の設定
       ・    利用する通信の種類(エンドポイントの定義)


       構成設定画面から構成設定を修正すると、その設定は                                                 “ServiceConfiguration.cscfg” と
     “ServiceDefinition.csdef”   の 2 つの XML ファイルに反映されます5。




5   直接 XML ファイルを修正することもできます。



                                                                                                                  p.20
                             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ここでは、もっとも簡単な設定として、[WebApplication1] プロジェクトを動作させる仮想マシンを、3 つに変更
     しておきます6。


2.4         開発用ファブリック上での動作確認
    ここまで設定が終了したら、いよいよ Windows Azure エミュレータ上で、このアプリケーションを動作させてみましょ
う。


    2.4.1   動作確認
       [CloudService1] プロジェクトをスタートアッププロジェクトに変更し、Ctrl + F5 キーで実行します。その際、サ
     ーバーエクスプローラーが PUBS.MDF を握っていると、エラーが発生するため、デタッチしてから実行してくださ
     い。すると、タスクトレイ上に “Development Fabric” と呼ばれる Azure エミュレータ環境が起動し、この中でア
     プリケーションが起動します。




       一見すると、先ほどと変わりなく動作しているように見えますが、実際にはかなり異なる環境で Web アプリケーシ
     ョンが動作しています。これについて以下に解説します。




6   (注意)実際の運用環境に配置する場合には、インスタンス数や仮想マシンのサイズをむやみに引き上げないようにしてください。むやみ
    に引き上げると、その分だけ課金が増えることになります。



                                                                                                          p.21
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.4.2   開発用ファブリックのランタイム構成
       最終的な運用環境では、このアプリケーションは、ファブリックコントローラ 7によってコンピュートサービスのイン
     フラ上に展開され、複数の仮想マシン(VM、Virtual Machine)が起動します8。




       通常、IIS 7 ではワーカープロセスとして w3wp.exe が利用されます。しかし、コンピュートサービスでは、専用
     のワーカープロセスとして WaWebHost.exe というものが用意されており、アプリケーションを展開すると、この
     WaWebHost.exe が起動します。この WaWebHost.exe には、以下のような特徴があります。


       ・    IIS 7 のモジュールをロードして動作するため、内部動作は w3wp.exe とほぼ同じ
       ・    内部では、ASP.NET ランタイムが統合パイプラインモードで動作


       運用環境では、複数の仮想マシンが展開され、1 仮想マシン(サーバ)あたり 1 ワーカープロセスが起動します。
     これに対して、開発環境(開発用ファブリック)では、運用環境で利用される VM と同じ数のホストプロセス
     (WaWebHost.exe)が、ローカルコンピューター内で起動します。これにより、運用環境をエミュレーションするよう
     になっています。




7   コンピュートサービス全体を管理している制御コンピュータ群のことです。
8   わかりやすくするため、下図では各サーバーを物理マシンとしてイラストを描いていますが、実際には仮想マシンとして Azure 環境に展
    開されます。



                                                                                                          p.22
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.4.3       運用環境と比較した開発環境(開発用ファブリック)の特徴
   この開発環境におけるエミュレーション動作を運用環境の動作と比較すると、以下のような特徴があります。


  A. ワーカープロセス
        ・   開発用ファブリックでは、運用環境と同一のワーカープロセスが複数個使用されます。
                開発用ファブリックでは、1 つのコンピュータ内で、複数のロール、複数の仮想マシンをまとめて
                 エミュレーションする必要があります。
                このため、開発用マシンの中では、複数の WaWebHost.exe(Worker ロールを使っている場合
                 には WaWorkerHost.exe)が起動する形になります。
        ・   ワーカープロセスは比較的軽量ですが、沢山の VM を利用すれば、それなりにマシンリソース(特にメ
            モリ)を消費します。
              そのため、開発環境ではあまり大量のインスタンスを起動しないよう、ご注意ください。
        ・   開発環境と運用環境で利用されるワーカープロセスはほぼ同じですが、開発環境では 32 ビット版が、
            運用環境では 64 ビット版が利用されます。
                .NET のみでアプリケーションを開発している際には問題になりませんが、Unmanaged Code を
                 利用している場合にはご注意ください。


  B. ロードバランサ
        ・   運用環境と同様、クライアントブラウザからのリクエストをロードバランサがルーティングします。
                ワーカープロセスは、クライアントブラウザからのリクエストを直接受け付けるわけではありません。
                 いったん、ロードバランサのエミュレータである DFloadbalancer.exe がリクエストを受け付け、そ
                 れが各ワーカープロセスにルーティングされる、という仕組みになっています。
                これは運用環境でも同様で、リクエストは一旦ロードバランサが受け付け、それが各マシンにル
                 ーティングされる形になります。




                                                                                                           p.23
                      © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
C. ポート番号
 ・   開発環境では、運用環境とはロードバランサからのリクエストのルーティング方法が異なります。
        上図を見てわかる通り、運用環境では、各 VM マシンに対して、プライベート IP アドレスと、乱数
         によるポートが定められ、フロントエンドのロードバランサからのリクエストがルーティングされま
         す。
        これに対して開発用ファブリック(開発環境)では、各ワーカープロセスに対して乱数によるポート
        が定められ、フロントエンドのロードバランサからリクエストがルーティングされます。
 ・   ポート番号は、運用環境で利用する予定のポート番号とはずれてしまうことがあるのでご注意ください。
        例えば、このサンプルアプリケーションを動作させると、ブラウザはポート番号 81 上でこのアプリ
         ケーションを呼び出します。
        これは、開発マシン上では、すでにポート番号 80 が IIS 7.5 にアサインされているため、使用で
         きないからです。
        このため、DFloadbalancer.exe は 80 の代わりに 81(次の空きポート)を利用し、これをリスンす
         る、という形になっています。




                                                                                                   p.24
              © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                         本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
さて、このままだと、このアプリケーションが実際にどのワーカープロセスで処理されているのかがわかりませ
       ん。そこで、このアプリケーションの WebForm1.aspx.cs ファイルに以下のような修正を加えてください。


        ・   Microsoft.WindowsAzure.ServiceRuntime への参照設定の追加
        ・   using キーワードの追加(using Microsoft.WindowsAzure.ServiceRuntime; )
        ・   Page_Load() メソッド内への、インスタンス番号を解決して表示するロジックの追加(Label3.Text =
            RoleEnvironment.CurrentRoleInstance.Id;)




        以上を行った上で、再度 Ctrl + F5 キーにより実行すると、Web 画面上にサーバーID が表示されるように
       なります。この状態で、リロードやポストバックなどを繰り返していると、ロードバランス機能により、複数のサー
       バー(ワーカプロセス)に分散処理されることがわかります9。




9   リロードやポストバックだけでは別サーバインスタンスに振りなおされないケースもあります。その場合には、別の Web ブラウザを起動する
    などしてご確認ください。



                                                                                                          p.25
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.4.4       開発用ファブリックへの配置の仕組み
   では次に、この開発用ファブリックの動作の仕組みについて、もう尐し詳しく解説します。まず、タスクトレイの
 [Windows Azure Simulation Environment] のアイコンを右クリックし、メニューから [Show Development
 Fabric UI] を選択してください。これにより、開発用ファブリックの UI が表示されます。




   前述したように、Visual Studio からクラウドサービスプロジェクトを実行すると、開発用ファブリックが動作し、そ
 の上でアプリケーションが動作します。この動作については、以下の点を押さえておくとよいでしょう。


  A. 開発用ファブリックへのアプリケーション展開
        ・   Visual Studio からクラウドプロジェクトを実行すると、開発用ファブリック上にアプリケーションが展開さ
            れます。この作業を「配置」と呼びます。
        ・   配置の際には、一意の配置 ID(Deployment ID)が採番されるようになっています。ちなみに配置 ID
            は、開発環境と運用環境では全くフォーマットが異なります。
                開発環境 → “deployment(21)” のように、一意連番が振られる。
                運用環境 → “6f4d99b8b339413ea3dac24ce71929af” のように、ランダムな GUID 値が振
                 られる


  B. ロールインスタンスごとのフォルダ分け
        ・   開発環境では、ローカルマシンの特殊なフォルダにアプリケーションが展開されます。
                例えば上記のアプリケーションの場合、”WebApplication1” ロールのインスタンス#0 のアプリ



                                                                                                            p.26
                       © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                  本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ケ          ー             シ            ョ            ン             は             、            ”
                 C:¥Users¥nakama¥AppData¥Local¥dftmp¥s0¥deployment(21)¥res¥deployment(2
                 1).CloudService1.WebApplication1.0” というパスの下側に、アプリケーションが展開されて
                 動作しています(このような動作は、ASP.NET 開発サーバーによる動作とは全く異なります)。
                また、このフォルダの下側には、実際に利用する Web アプリケーションの他に、ASP.NET テン
                 ポラリファイル、IIS ログ、Diagnostic Monitor によるログファイル、IIS 圧縮キャッシュなど
                 様々なデータが、ロールインスタンス(=運用環境における仮想マシン)ごとに保存されるように
                 なっています。(このフォルダは、下図のように Development Fabric UI から選択すると、簡単
                 に開くことができます。)




      C. ワーカープロセスのモニタリング
       ・    各ワーカープロセスの状況を、上図のツールからモニタできます。
                このツールは、コンソール出力をモニタできるようになっているので、Diagnostic トレースなどを
                 簡単に見たりすることができるようになっています。また、サービスの停止や、配置したアプリケー
                 ションの除去などもこのツール上からできるようになっています。
                ただし、このツールから得られる各サーバ(各ロールインスタンス)の情報については、非常に限
                 られています。また、運用環境ではこのモニタツールを使用できません。例えば、CPU 稼働率
                 やメモリ利用率の監視、IIS ログの確認などといった内容については、このツールからでは確認
                 できません。これらに関しては、次に述べる Diagnostic Monitor による監視が必要になりま
                 す。


 以上で、基本的な開発用ファブリックの利用方法に関しては終わりです。引き続き、これらのサーバーをモニタリン
グする機能を追加していきます。


2.5        Diagnostic Monitor によるアプリケーション監視
 サーバーをモニタリングするためのツールである、Diagnostic Monitor を使用したアプリケーション監視の方法に
ついて説明します。




                                                                                                             p.27
                        © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                   本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
2.5.1   Diagnostic Monitor とは
   コンピュートサービス内の各仮想マシンには、Diagnostic Monitor ランタイムと呼ばれるサービスがインストー
 ルされています。このサービスは、イベントログやパフォーマンスログ、フラットファイルなどを定期的に監視・デー
 タ収集し、ストレージサービスへと転送するようになっています。このサービスが存在するため、各アプリケーション
 からは直接ストレージサービスへデータを書き込む必要はなく、従来通り、イベントログやパフォーマンスログなど
 に、データを出力しているだけで済むようになっています。




   Diagnostic Monitor ランタイムでは、様々なログデータを転送できるようになっていると説明しましたが、実際
 には尐し注意が必要です。Diagnostic Monitor ランタイムのドキュメント類を参照すると、以下のようなログファイ
 ルが転送できると示されています。




   しかしこの転送は、転送先が Table ストレージになっているものと、Blob ストレージになっているものとで、以下
 のように仕組みが大きく異なります。このため、注意が必要です。

    転送先のストレージの種類         転送の仕組み
    Table ストレージ          ログファイルは、構造を持ったテーブルデータとして、特定の Table ストレージに転送・追記され
                         る。
    Blob ストレージ           ログファイルは、バイナリファイルとして Blob ストレージに転送・保存される。



                                                                                                           p.28
                      © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
つまり、トレースログやパフォーマンスカウンタのデータは、スキーマを持ったデータとして Table ストレージに
      分解・整理・転送されますが、IIS ログファイルや FREB ログファイルなどは、ただのバイナリファイルとして Blob
      ストレージに転送される、という形になっています。このため、データ取得後のデータの取り出し方などが異なって
      きますので注意してください。詳細は後程解説します。


        さて、Diagnostic Monitor を使うためには、以下の作業が必要になります。


        ・     Azure ストレージ側の事前準備(2.5.2)
        ・     収集するログファイルに関する設定方法(2.5.3)
        ・     ログファイルの確認方法(2.5.4)


        以下に、これらについて順に解説していきます。


     2.5.2    Azure ストレージ側の事前準備
        まず、Azure ストレージ側に、データを格納するための Blob コンテナや Table ストレージを作成します。データ
      転送先となる Blob や Table の名称の多くは固定的に定められていますので、以下のような名称でコンテナやテ
      ーブルを作成します。




        具体的な作業手順は、以下のようになります。


       A. 開発用ストレージサービスの起動
             タスクトレイの [Windows Azure Simulation Environment] を右クリックし、[Start Development
         Storage service] を選択して開発用ストレージサービスを起動します10。




10   (参考) この開発用ストレージサービスは、内部的には SQL Server Express Edition のファイルアタッチデータベースを利用してい
     るため、SQL Server Express Edition がインストールされていないとうまく起動しません。また、開発用ストレージにゴミがたまってしまっ
     た場合には、”Show Development Storage UI” から Reset ボタンを押下すると、簡単に初期状態(空の状態)に戻すことができま
     す。



                                                                                                                p.29
                           © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                      本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
B. Blob コンテナやテーブルの作成
  次に、コンテナやテーブルを作成します。作成する際は、以下の 2 通りの方法があります。


  ・     ツールを使って、手作業でコンテナやテーブルを作成していく方法
  ・     コンソールアプリケーションなどを使って、コンテナやテーブルを作成する方法


  どちらの方法でも構いませんが、コンソールアプリケーションを使用すると、以下のような簡単なコードで作
成することが可能です。


  以下 2 つの、参照の追加が必要です。


  ・     Microsoft.WindowsAzure.ServiceRuntime.dll
  ・     Microsoft.WindowsAzure.StorageClient.dll

using   System;
using   System.Collections.Generic;
using   System.Linq;
using   System.Text;

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 開発環境の場合(運用環境の場合には適宜コードを修正)
            CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;

             // 作成するコンテナ、テーブル、キューの名称一覧
             string[] containerNamesToCreate = new string[]
             {
                 "wad-iis-failedreqlogfiles", "wad-iis-logfiles", "wad-crash-dumps"




                                                                                                              p.30
                         © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                    本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
};

                 string[] tableNamesToCreate = new string[]
                 {
                     "WADLogsTable", "WADDiagnosticInfrastructureLogsTable",
                     "WADPerformanceCountersTable", "WADWindowsEventLogsTable", "WADDirectoriesTable" };

                 string[] queueNamesToCreate = new string[] { };

                 // コンテナ、テーブル、キューを作成
                 CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
                 foreach (string containerName in containerNamesToCreate)
                 {
                     CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
                     bool created = blobContainer.CreateIfNotExist();
                     if (created) Console.WriteLine("{0} : コンテナを作成しました。", containerName);
                 }

                 CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
                 foreach (string tableName in tableNamesToCreate)
                 {
                     bool result = tableClient.CreateTableIfNotExist(tableName);
                     if (result) Console.WriteLine("{0} : テーブルを作成しました。", tableName);
                 }

                 CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
                 foreach (string queueName in queueNamesToCreate)
                 {
                     CloudQueue queue = queueClient.GetQueueReference(queueName);
                     bool result = queue.CreateIfNotExist();
                     if (result) Console.WriteLine("{0} : キューを初期化しました。", queueName);
                 }

             }
        }
    }




   ストレージの準備ができたら、今度は Web アプリケーションに、ログデータ収集と自動転送を行わせるための設
 定コードを追加します。


2.5.3   収集するログファイルに関する設定方法
   Diagnostic Monitor による監視を行うためには、以下 2 つの設定が必要です。


   ・        データをローカルマシン内で収集させるための設定
   ・        それを Azure ストレージに自動転送させるための設定


   収集するログの種類ごとに、設定可能な項目が尐しずつ異なりますが、簡単に書くと、以下のような項目が設定
 できます。




                                                                                                                 p.31
                            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
設定を行うためには、以下の作業を行います。


・       Web アプリケーションに WebRole.cs という名前のファイルを追加する
・       参照設定として、Microsoft.WindowsAzure.ServiceRuntime, StorageClient, Diagnostics の 3 つの
        DLL を追加する
・       using キーワードで、Microsoft.WindowsAzure, StorageClient, ServiceRuntime, Diagnostics の 4
        つの名前空間を導入する
・       WebRole.cs クラスを RoleEntryPoint クラスの派生クラスにする
・       OnStart() メソッドに Diagnostic Monitor の初期化処理を実装する


OnStart() メソッドについては、以下をご参照ください。

using   System;
using   System.Collections.Generic;
using   System.Linq;
using   System.Web;

using   Microsoft.WindowsAzure.ServiceRuntime;
using   Microsoft.WindowsAzure.Diagnostics;
using   Microsoft.WindowsAzure.StorageClient;
using   Microsoft.WindowsAzure;

namespace WebApplication1
{
    public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            // 構成設定が変更されたらロールインスタンスをリスタートする
            RoleEnvironment.Changing += (sender, e) => {
                if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) e.Cancel =
true;
            };

             DiagnosticMonitorConfiguration dmc = DiagnosticMonitor.GetDefaultInitialConfiguration();

             // トレースログ (※ web.config への設定も必要)
             dmc.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(2);
             dmc.Logs.ScheduledTransferLogLevelFilter = LogLevel.Warning;

             // Diagnostic Monitor ログ
             dmc.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(2);
             dmc.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Critical;

             // イベントログ
             dmc.WindowsEventLog.DataSources.Add("Application!*");
             dmc.WindowsEventLog.DataSources.Add("System!*");
             dmc.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(2);




                                                                                                              p.32
                         © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                    本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
dmc.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose;

                      // パフォーマンスカウンタ
                      dmc.PerformanceCounters.DataSources.Add(
                          new PerformanceCounterConfiguration()
                          {
                              CounterSpecifier = @"Processor(_Total)% Processor Time",
                              SampleRate = TimeSpan.FromSeconds(60)
                          });
                      dmc.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(2);

                      // カスタムファイルログ (※ IIS ログ, FREB ログ, クラッシュダンプは設定済み)
                      dmc.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);

                      // Diagnostic Monitor をスタートさせる
                      DiagnosticMonitor.Start("DiagnosticsConnectionString", dmc);


                      return base.OnStart();
                  }

             }
        }



       こちらのコードは、基本的に以下 2 つの条件を指定しています。


        ・        データ収集に関する条件
        ・        データ自動転送に関する条件


       大まかに言うと、デ ー タ転送に関する条 件 を                                             .ScheduledTransferPeriod プ ロ パ テ ィ
      や.ScheduledTransferLogLevelFiler プロパティにより設定し、その他の.DataSource プロパティなどでデータ
      収集条件を設定します。ここでは 2 分間隔でデータ転送する形にしていますが、実際のシステムでは転送間隔は
      もう尐し長くてもよいでしょう11。


       さて、上記のサンプルコードについては、いくつかの注意点があります。要点を説明すると、以下の通りです。


       A. .SetConfigurationSettingPublisher() メソッド
            コードの先頭に書かれている、.SetConfigurationSettingPublisher() メソッドは、サービス構成設定の変
        更を動的に追いかけるためのコードです。(しかし、ここではまだ意味が分からないと思います。現段階では
        「呪文」だと思っておいていただければ結構です。)


       B. トレースログ
            「 ト レ ー ス ロ グ 」 と 書 か れ て い る の は 、 System.Diagnostics ト レ ー ス ( System.Diagnostics.Trace.
        WriteLine() な ど の 命 令 に よ り 出 力 さ れ る Win32 ト レ ー ス ロ グ ) で すが 、 こ の 機能を 使 う た め に は 、
        web.config ファイルに、以下の記述を追加する必要があります。このコードを追加することにより、Win32 トレ
        ースログの情報が、Azure の Diagnostic Monitor ランタイムの方に転送され、記録されるようになります。

        <?xml version="1.0"?>
        <configuration>




11    (参考) データの転送間隔については、むやみに短くしないことをおすすめします。これは、転送間隔をむやみに短くすると、それだけ
     システムに負荷がかかってしまうためです。「仮想マシンがクラッシュするとログデータが吹き飛ぶので、極力転送間隔を短くしておきた
     い」と考える人もいると思います。しかし、通常のオンプレミスのシステムでも、ローカルマシンに出力されたファイルを監視マシンに吸い
     上げる場合、ある程度の時間間隔を置いてチェックおよび吸出しを行っているはずです。それと同様に、あまり短く設定しすぎないことを
     推奨します。



                                                                                                                      p.33
                                 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                            本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
- - - (前略) - - -

        <system.diagnostics>
          <trace>
            <listeners>
              <add                     type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,
    Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                   name="AzureDiagnostics" />
            </listeners>
          </trace>
        </system.diagnostics>

    - - - (後略) - - -

    </configuration>


  C. Diagnostic Monitor ログ
         「Diagnostic Monitor ログ」とは、Diagnostic Monitor ランタイム自身から発生するログです。このログに
    対しては必ずフィルタリング条件を設定してください(尐なくとも Warning 以上)。 Verbose レベルでデータ
    収集を行うと、大量(数秒間に数十エントリ)のデータが出力されてしまいます。基本的には Critical などに
    設定しておけば十分でしょう。


  D. Diagnostic Monitor ランタイムの起動
         最後の DiagnosticMonitor.Start() メソッドによって Diagnostic Monitor ランタイムを起動しています。そ
    して、このメソッドの第 1 パラメータ(ここでは “DiagnosticsConnectionString”)で、転送先となる Azure スト
    レージへの接続情報を設定しています。この接続情報は、クラウドサービスプロジェクト側の “Settings” セク
    ションに設定されており、既定では “UseDevelopmentStorage=true” (開発ストレージにログ情報を転送
    する)という設定になっています。(運用環境に持っていく場合には、この設定値を、本番環境の Windows
    Azure ストレージサービスへの接続文字列に書き換えます。)




   以上で設定は完了です。この状態で、アプリケーションを実行してください。そして、これをしばらく使い、その後、
 しばらく放置(5 分程度)してみてください。これにより、ログデータが適宜 Azure ストレージに転送されているはず
 です。




2.5.4     ログファイルの確認方法
   最後に、転送されたログファイルを確認してみます。一番手っ取り早い方法は、各種のツール(Windows
 Azure MMC など)を使って Azure ストレージに接続し、その中を確認する方法です。しかしながら、以下のよう
 なログファイルダウンロード用のコンソールアプリケーションなどを準備しておく方法も便利です。ここでは、Azure



                                                                                                                 p.34
                            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ストレージに保存された IIS のログファイルを、ダウンロードするためのコードを以下に示します。

 using   System;
 using   System.Collections.Generic;
 using   System.Linq;
 using   System.Text;
 using   Microsoft.WindowsAzure;
 using   Microsoft.WindowsAzure.StorageClient;
 using   System.IO;


 namespace ConsoleApplication2
 {
     class Program
     {
         static void Main(string[] args)
         {
             // Diagnostic Monitor のログデータ一括転送
             // 開発環境の場合(運用環境の場合には適宜コードを修正)
             CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;

              // 転送先となるローカルパス
              string localRootPath = @"C:temp" + DateTime.UtcNow.ToString("yyyyMMdd_HHmmss");
              bool willFileDelete = true; // 転送したファイルを消すか否か

             // ① Blob データのダウンロード
             CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
             foreach (string containerName in new string[] {
                 "wad-control-container",          "wad-iis-failedreqlogfiles",          "wad-iis-logfiles",
 "wad-crash-dumps" })
             {
                 CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
                 var blobs = blobContainer.ListBlobs(new BlobRequestOptions() { UseFlatBlobListing = true });

                  foreach (var blob in blobs)
                  {
                      CloudBlob cb = blobContainer.GetBlobReference(blob.Uri.AbsoluteUri);
                      string localFilePath = localRootPath + @"Blob" + blob.Uri.PathAndQuery.Replace('/',
 '');
                     Console.WriteLine(blob.Uri.AbsoluteUri + " → " + localFilePath);
                     Directory.CreateDirectory(localFilePath.Substring(0,
 localFilePath.LastIndexOf('')));
                     cb.DownloadToFile(localFilePath);
                     if (willFileDelete) cb.Delete();
                 }
             }

          }
     }
 }



 このコンソールアプリケーションを実行すると、Azure ストレージに蓄積された IIS ログを、ローカルマシンにダウ
ンロードすることができるようになります。ダウンロードしたログを、Excel や各種のログ解析ツールなどに読み込ま
せると、分析することができます。




                                                                                                               p.35
                          © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                     本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ここまでコンピュートサービスの監視方法について解説してきました。これらの説明からわかるように、現時点で
は、コンピュートサービスの監視 API は、比較的剥き出しのような状態で、残念ながら、使いやすいツール類が充
実しているとは言い難い状況です。3rd party 製ツールとしては Cerebrata 社の Azure Diagnostics Manager
などのツールが出てきていますが、コンピュートサービスの監視については、今しばらくは手作業で行う必要があ
ります。ただ、Diagnostic Monitor ランタイムの基本動作やその考え方については、今のうちにきっちり理解して
おいた方がいいため、一度触ってみることを推奨します。




                                                                                                      p.36
                 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                            本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
第3章
                                                              Windows Azure 運用環境への展開

 いよいよ本章では、作成した Web アプリケーションを Azure 上へ展開していきます。


 まず、展開作業に入る前の Azure を使用するための準備として以下 2 つを行います。


 ・     Windows Azure サービスの購入(3.1)
 ・     各種サービスの初期化(3.2)


 Azure を使用する準備が整ったら、次にデータベース、ストレージ、アプリケーションの順番で Azure 上(Staging
環境)へ移行していきます。


 ・     SQL Azure データベースサービスへの移行(3.3)
 ・     Windows Azure ストレージサービスへの移行(3.4)
 ・     Windows Azure コンピュートサービスへの移行(3.5)


 そしてアプリケーションの移行が完了したら、最後に本番(Production)環境に展開します(3.6)。


 それでは、Windows Azure サービスの購入手順から説明していきます。


3.1         Windows Azure の購入
 2010 年 6 月 25 日現在 、Windows Azure Platform サービスでは、初期特別提供プランとして、Azure の 25
時間分の無償使用を含む「Windows Azure Platform 導入特別プラン」が提供されています。今回はこちらを利用
して検証作業を行います。なお、このプランは範囲内での試用は無償ですが、無償枠を超えてサービスを利用すると
従量課金のレートで課金が発生しますのでご注意ください。

      Windows Azure Platform 導入特別プラン
      http://www.microsoft.com/japan/windowsazure/offers/popup.aspx?lang=ja&locale=ja-JP&offer=MS-AZR-0001P


 下記手順では、クレジットカード払いによる購入手順を説明します。


 ・     Step 1 - Microsoft Online Services カスタマー ポータル プロファイル登録
 ・     Step 2 - Microsoft Online Services カスタマー ポータルから Azure の購買
 ・     Step 3 - Azure のアクティブ化


 3.1.1      Step 1 - Microsoft Online Services カスタマー ポータル プロファイル登録
      実際の Windows Azure の購入は、Microsoft Online Services カスタマーポータルサイト(略称:MOCP)か
     ら行います。最初の Step では、Microsoft Online Services カスタマー ポータルを使用するためのプロファイル
     登録を行います。




                                                                                                                     p.37
                                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
A. Microsoft Online Services カスタマーポータルへのログイン
  ・      Internet Explorer で下記 Microsoft Online Services カスタマーポータルにアクセスします。

      Microsoft Online Services カスタマーポータル
      https://mocp.microsoftonline.com/site/default.aspx


  ・      [サインイン] をクリックすると、Windows Live ID でのログイン画面が表示されますので、Windows
         Live ID アカウント名 (メール アドレス) とパスワードを入力し、 [Sign in] ボタンをクリックしてくださ
         い。


B. プロファイルの登録
  ・      ログインに成功すると 新規プロファイル登録開始画面が表示されるので、必要な情報を入力します。
                既にプロファイル登録済みの場合は、Step 2 にお進みください。




  ・      下記の確認画面が表示されたら、プロファイル情報入力は完了です。 [閉じる] ボタンをクリックしま
         す。




                                                                                                                 p.38
                            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
最初のプロファイル登録が終わると、カスタマーポータルの画面が表示されます。




3.1.2       Step 2 - Microsoft Online Services カスタマー ポータルから Azure の購買

  A. 初期特別提供プランの選択
        ・    画面中央の利用可能なサービスから [Windows Azure Platform] の利用可能なサービスの表示リン
             クをクリックします。
                 すると、現在利用可能な Azure の購買メニューが表示されます。




                                                                                                            p.39
                       © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                  本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   ここでは [初期特別提供プラン] を選択し、 [今すぐ購入] をクリックします。




・   購入の同意事項を確認してチェックボックスを入れ、 [購入手続きへ進む] ボタンをクリックします。




                                                                                                 p.40
            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
B. クレジットカードの登録と注文の確定
         ・   支払い方法の入力画面からクレジットカードの情報を登録します12。
         ・   新しいクレジット カードが選択されていることを確認して [次へ] ボタンをクリックします。




12   このプランは、無償範囲の利用であれば課金が発生しません。しかし、無償範囲枠を超えて利用すると、登録したクレジットカードに課
     金が発生します。このため、無償範囲に注意しながら検証作業を進めてください。



                                                                                                          p.41
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   必要事項を入力したら、 [次へ] ボタンをクリックします。
       すると、オンライン サブスクリプション契約が表示されます。




・   オンラインサブスクリプション契約をご確認いただき、問題がなければ [次へ] ボタンをクリックします。
    以下の 2 点に注意してください。
       氏名の署名欄には、上に記載されている文字列の通り入力してください
      姓と名の間に半角スペースが必要となりますので注意してください
・   注文の確認および確定画面が表示されます。内容を確認して [注文の確定] ボタンをクリックします。




                                                                                                 p.42
            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
確認画面が表示されれば支払い情報の登録は完了です。この画面から引き続き Azure のアクティブ化を
    行います。




3.1.3       Step 3 - Azure のアクティブ化
   続いて、購入した権利で Azure を利用するための手続きであるアクティブ化を行います。


  A. Azure のアクティブ化
        ・    注文完了画面でアクティブ化ボタンをクリックして、サブスクリプション操作画面を表示します。




                                                                                                           p.43
                      © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   [アクション] のリストから [今すぐアクティブ化] を選択し、[移動] ボタンをクリックします。




・   サービスのサブスクリプション名を入力し、[次へ] ボタンをクリックします。
       サブスクリプション名は Azure で最初のプロジェクトの名称にも使用されます。




                                                                                                  p.44
             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   続いてサービス管理者の情報を入力します。
       すでに入力しているサービス購買の連絡先情報をコピーすることも可能です。
       前述のサービス購買者と、ここで解説するサービス管理者との違いは以下の通りです。
           企業で利用する場合は、購入手続きを行う部門と、実際にプロジェクトで利用する部門や
            担当者が異なる場合がよくあります。
           このような場合に備えて、それぞれ個別に指定ができるようになっています。
           なお、Azure では、サービス購買者として登録した ユーザーを「アカウントオーナー
            (Account Owner)」、サービス管理者として登録したユーザーを「サービスアドミニストレ
            ーター(Service Administrator)」と呼んで区別しています。
       アカウントオーナーとサービスアドミニストレータは、後で示す Windows Azure のポータル画面
        上では区別して表示されます。




                                                                                                   p.45
              © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                         本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   概要画面で入力情報を確認したら、[完了] ボタンをクリックします。




 確認完了画面が表示されたら手続きは終了です。




B. 作成されたプロジェクトの確認
 完了手続きを終えると、登録に利用した Windows Live ID のアカウント宛に完了メールが届きます。これ
で Windows Azure デベロッパー ポータルにアクセスできるようになります。


 ・   メールに記載されたデベロッパー ポータルのリンクから [Windows Azure] をクリックして、Windows
     Azure デベロッパー ポータルにアクセスします(または、https://windows.azure.com/ にアクセスし




                                                                                                    p.46
               © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                          本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ます)。
                      新たに先ほど作成したプロジェクトが追加されていることをご確認ください13。




             以上で、Azure の購入とアクティブ化のプロセスが終了となります。


3.2              各種サービスの初期設定と Windows Azure API Certificate の登録
     Azure の各サービスを利用するためには、各々のサービスで初期設定を行う必要があります。また、Azure をロー
カルのツールから遠隔操作するためには、API 証明書(Windows Azure API Certificate)の登録が必要です。


     まず各種サービスの初期設定からご説明します。


     3.2.1       SQL Azure データベースサービスの初期設定
        以下の手順で、データベースサービスを初期設定します


       A. SQL Azure プロジェクトの作成
             ・    まず、ポータルサイト(https://sql.azure.com/)にアクセスします。
                      https://windows.azure.com/ のサイトの左側タブの中から [SQL Azure] の項目をクリックし
                       ても構いません。
             ・    使用条件を読み、 [Accept] ボタンをクリックします。




13   下図では、PDC08CTP というプロジェクトが存在しますが、これはβ版の頃から利用していた場合のみ表示されます。現在、新規にこの
     作業を行った場合には、作成したプロジェクトひとつだけが表示されます。



                                                                                                                  p.47
                             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   データベースサービスの管理者アカウントのアカウント名とパスワードを入力し、データベースサーバー
    の場所を選択します。
      ここでは、場所に関しては [Southeast Asia] を選択することを推奨します。
・   [Create Server] ボタンをクリックしサーバーを作成します。




                                                                                                  p.48
             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
B. SQL Azure サーバー名の確認
  SQL Azure サ ー バ ー の サ ー バ ー 名 が 自 動 作 成 さ れ ま す 。 ( サ ー バ ー 名 の 変 更 は で き ま せ ん )
Management Studio からデータベースサービスに接続する際に必要になりますので、どこかにメモを残して
おいてください。




C. ファイアウォール設定の緩和
  自分のローカル端末の Management Studio から SQL Azure 上のデータベースを管理するためには、
TCP/IP 1433 ポートでの直結を行う必要があります。以下のようなファイアウォール設定の緩和を行ってくださ
い。




                                                                                                      p.49
                 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                            本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ファイアウォール設定の緩和を行う場所                緩和方法
     ローカル側                             会社内からアクセスする場合には、貴社の IT 部門にポート 1433(外部発信)を
                                       開けてもらいます14
     SQL Azure データベース側                 SQL Azure データベースサービス側については、管理サイト
                                       (https://sql.azure.com/ )の管理画面から、ファイアウォール設定の緩和を行
                                       います15


      データベースサービス側のファイアウォール設定の緩和については、管理サイト
     (https://sql.azure.com/ )の管理画面から、以下の手順で行います。


      ・   管理サイトから先ほど作成したプロジェクトを選択し、Server Administration の画面を開きます
      ・   [Firewall Settings] タブを選択し Microsoft Service からのアクセスの許可ルールの有効化チェック
          ボックスへのチェックと、[Add Rules] ボタンから自分の端末の IP を許可するルールを追加します




     D. データベースの作成
      次に、SQL Azure ポータルサイトからデータベースを作成します。作成時には、データベース名と最大容
     量を指定する必要があります。ここでは以下のように作成してください。


      ・   データベース名: PUBS
      ・   エディション:  Web
      ・   サイズ:     1GB




14 実際のシステム開発では、自社側のポート 1433 を開けることが難しいことが多いと思います。このような場合には、(このあとにご説明
  する Management Studio での作業も含めて)一時的に自宅から作業するなどの工夫を行ってください。なお将来的には、SQL Server
  を Web 上から管理できるツールである、SQL Server Web Manager がリリースされる予定です。
15 SQL Azure 側のファイアウォールについては、設定変更の反映に約 5 分ほどの時間がかかります。すぐに設定が反映されなくても、

  しばらく待っていただければ設定が反映されます。



                                                                                                              p.50
                         © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                    本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
データベース作成後、[Connection Strings] ボタンを押すと、当該データベースにアプリケーションから接
    続するのに必要な、接続文字列を確認することができます。




3.2.2    Windows Azure ストレージサービスの初期設定
   次にストレージサービスの初期設定を行います。




                                                                                                        p.51
                   © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                              本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
A. ストレージサービスの作成
 ・   まず、Azure ポータルサイト(https://windows.azure.com/)へアクセスし、 [Windows Azure] リンク
     をクリックしてください。
 ・   次に [New Service] をクリックし、作成するサービスとして [Storage Account] を選択します。




 ・   [Service Label] には任意の名前を付与してください。
         ここで指定したラベルはポータルサイト上でのみ利用されるラベルとなるので、適当に付与して
          構いません。 [Next] ボタンをクリックしてください。




                                                                                                     p.52
                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   [Storage Account] の画面で、アカウント名を付与し、アフィニティグループ16を作成してください。
            ここで付与するアカウント名は、このストレージにアクセスする際の URL となるので、わかりやす
             い名前を付与してください。
     ・   アカウント名を付与したら [Create] ボタンをクリックし、ストレージサービスを作成してください。
     ・   また、ストレージサービスを作成するデータセンタについては、必ず Southeast など、データベースサ
         ービスを作成したデータセンタと同じ場所を選択してください17。
            異なるデータセンタを選択してしまうと、データセンタまたがりの通信で、課金が発生することにな
             ります。




16 アフィニティグループは同じグループ内のサービス(コンピュートサービスとストレージサービスなど)を同一センタ内の極力近くに配置す
  るためのものです。近い場所に配置することを保証するものではありませんが、極力近い場所に配置するよう努力します。
17 なお、データセンタを指定する場合は、地域(Region)を指定する方法と、サブ地域(SubRegion)を指定する方法の 2 つがあります。例

  えば、地域として「アジア」を選択した場合、実際にサービスが配置される場所は、「東南アジア(シンガポール)」「東アジア(香港)」のど
  ちらかになります(どちらになるかは不明)。一方、サブ地域である「東南アジア」「東アジア」を選択すると、そのサブ地域にあるデータセ
  ンタにサービスが配置されます。サブ地域まで指定すると、確実にそのデータセンタに配置することができますので、こちらの方法での指
  定を推奨します。



                                                                                                         p.53
                    © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                               本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
B. Key の確認
          以上の作業を行うと、ストレージサービスにアクセスするためのキーが 2 つ発行されます。 [Primary Key]
        と [Secondary Key]   18   と書かれていますが、実際にはこの 2 種類のキーはどちらを使っても同じようにスト
        レージにアクセスできます。


         ・   どちらか好きな方のキーをメモしておいてください。




18   Primary Key と Secondary Key については、様々な使い分けが考えられます。例えば、① 片方の鍵は Web アプリケーション内
     に組み込む鍵とし、もう片方の鍵は管理者がツールから使う鍵とする、といった使い分けや、② どちらか一方を普段使いのキーにしてお
     き、もう片方をスペアキーとしておく(もし普段使いのキーが盗まれた場合には、こちらの鍵のみを再生成し、スペアキーの方については
     そのままにしておく)、などの使い方が考えられます。



                                                                                                                 p.54
                            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.2.3       Windows Azure コンピュートサービスの初期設定
   次にコンピュートサービスの初期設定を行います。


  A. Hosted Services の作成
        ・    ス トレ ー ジサー ビスと 同 様 に、まずポ ータルサイト( https://windows.azure.com/ ) に アク セス し、
             [Windows Azure] リンクをクリックしてください。
        ・    次に、[New Service] リンクから [Hosted Services] を選択します。




                                                                                                             p.55
                        © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                   本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   [Service Label] には任意の名前を付与してください。
       ここで指定したラベルはポータルサイト上でのみ利用されるラベルとなるので、適当に付与して
        構いません。
・   ラベルを付与したら、 [Next] ボタンをクリックしてください。




                                                                                                  p.56
             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   次に、サービスの URL を決定するとともに、サービスを配置するデータセンタを選択します。
・   このとき、ストレージサービス作成時に作成したデータセンタと、アフィニティグループ名を指定します。




                                                                                                p.57
           © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                      本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
B. 作成されたサービスの確認
             以上の作業により、コンピュートサービスが作成されます。サービスを作成すると、アプリケーションをアップ
         ロードするための 2 つの環境が用意されます。ひとつは “Production” 環境(運用環境)、もうひとつが
         “Staging” 環境(最終動作確認環境)です。




     3.2.4       API Certificate の登録
        Azure では、「Windows Azure Service Management API」(以下 Management API)という管理用の API
      が公開されています。この Management API は、HTTP-REST 方式によって呼び出すことが可能な Web サー
      ビスとして提供されています。これを使用すると、コンピュートサービスやストレージサービスをローカルのツールか
      ら遠隔操作19することが可能です。
        しかし、この API はインターネットに晒されているため、セキュリティ上の安全性を保つ必要があります。このため、
      この API を使用するには、事前に Azure ポータルサイトから証明書をアップロードしておく必要があります。以下
      で、証明書の作成とアップロードの手順をご説明します。


       A. 証明書の作成
             証明書を以下の手順で作成してください。


             ・    Visual Studio コマンドプロンプト(2010)を管理者特権つきで起動する
             ・    証明書を作成するディレクトリへ移動する


19    今回のサンプルでは Visual Studio から Windows Azure 上へアプリケーションをアップロードするためにも使用します。アプリケーショ
     ンのアップロード後サービスの管理も可能となります。この他にも Windows Azure MMC
     (http://code.msdn.microsoft.com/windowsazuremmc)でもサービスの管理が可能です。



                                                                                                                   p.58
                              © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                         本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・    下記コマンドを実行する

 "C:Program FilesMicrosoft SDKsWindowsv7.0Abinmakecert" -r -pe -a sha1 -n "CN=Windows Azure Authentication
 Certificate" -ss My -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 "AzureMgmt.cer"




   このコマンドにより以下 2 つが実行されます。


   ・    カレントディレクトリに自己署名証明書(AzureMgmt.cer)が作成される
   ・    作成された証明書が現在ログオンしているユーザーの”個人”証明書ストアへ保存される




B. Windows Azure への証明書の登録
   次に、作成された証明書を Azure へ登録します。


   ・    まず、ポータルサイト(https://windows.azure.com/)にアクセスし、プロジェクトを選択します。
   ・    次に[Account] タブを開きます。[Manage My API Certificates] リンクから [API Certificates] 画
        面を開きます。




                                                                                                               p.59
                          © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                     本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   [参照…] ボタンから、先ほど作成した証明書を選択し、[Upload] ボタンでアップロードします。




                                                                                                 p.60
            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
これで証明書の登録が完了となります。この証明書は、後で Visual Studio から Azure 上へアプリケーショ
      ンをデプロイする際に使用します。


 以上で、Azure を使用する準備が整いました。次に、Azure 上へアプリケーションを移行していきます。


3.3      SQL Azure データベースサービスへの移行
 ではまず、データベースサービスへの移行から解説します。


 3.3.1    SQL Server Management Studio からの接続
      まず、SQL Server Management Studio から SQL Azure データベースに接続します20。接続の際には、
  以下 3 点に注意してください。


         ①   サーバー名として、先のサーバー名(xxx.database.windows.net)を使用
         ②   SQL Server 認証を使用
         ③   オプション画面において、接続先とするデータベースの選択


      ③の作業(接続時に接続先のデータベースを選択する)は極めて重要です。一般に、通常の SQL Server で
  は、どこかのデータベースに接続した後、use コマンドを利用して、同一インスタンス内の別データベースに切り替
  えることができましたが、データベースサービスではこれができません。これは SQL Azure データベースサービ
  ス特有の制限事項のため、注意してください。



20(参考)利用する SQL Server Management Studio のバージョンにより、利用できる機能範囲が変わります。2008 R2 November
 CTP 以降では、サーバーエクスプローラーを使用し、テーブル一覧などを表示できるようになりましたが、それ以前のバージョンのものだ
 と、クエリの発行しかできません。サーバーエクスプローラーなどを使用するには、最新の Management Studio をお使いください。



                                                                                                          p.61
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.3.2   テーブルの作成
   次に、データベースサービス上にテーブルを作成します。クエリウィンドウから CREATE TABLE 命令などを
 発行し、テーブルを作成してください。(今回は簡単のため、authors テーブル、publishers テーブル、titles
 テーブル、titleauthor テーブルの 4 つだけ作成することにします。)


   なお、SQL Azure データベースはアーキテクチャ的な特徴から、SQL Server データベースに比べてテーブ
 ルに関しては、仕様上の制限がいくつかあります。例えば以下 2 つなどです。


   ・     ユーザー定義型が使えない
   ・     クラスタ化インデックスを持たないテーブル(ヒープと呼ばれます)は作成できない


   今回、サンプルで利用している PUBS データベースはこれらの制限に一部ひっかかるところがあり、そのまま
 では SQL Azure データベース上に移行することができません。このため、スキーマなどを一部修正したテーブ
 ルを利用します。作成時は以下のスクリプトを利用してください。

    CREATE TABLE authors
    (
         au_id          varchar(11)
                CHECK (au_id like '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]')
                CONSTRAINT UPKCL_auidind PRIMARY KEY CLUSTERED,
         au_lname       varchar(40)       NOT NULL,
         au_fname       varchar(20)       NOT NULL,
         phone          char(12)          NOT NULL
                  DEFAULT ('UNKNOWN'),
         address        varchar(40)           NULL,
         city           varchar(20)           NULL,
         state          char(2)               NULL,
         zip            char(5)               NULL
                  CHECK (zip like '[0-9][0-9][0-9][0-9][0-9]'),
         contract       bit               NOT NULL
    )
    GO

    CREATE TABLE publishers
    (
         pub_id          char(4)           NOT NULL
                   CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED
                  CHECK (pub_id in ('1389', '0736', '0877', '1622', '1756') OR pub_id like '99[0-9][0-9]'),
         pub_name        varchar(40)           NULL,



                                                                                                                 p.62
                            © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                       本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
city            varchar(20)               NULL,
            state           char(2)                   NULL,
            country         varchar(30)               NULL
                      DEFAULT('USA')
    )
    GO

    CREATE TABLE titles
    (
         title_id        varchar(6)
                   CONSTRAINT UPKCL_titleidind PRIMARY KEY CLUSTERED,
         title           varchar(80)       NOT NULL,
         type            char(12)          NOT NULL
                   DEFAULT ('UNDECIDED'),
         pub_id          char(4)               NULL
                   REFERENCES publishers(pub_id),
         price           money                 NULL,
         advance         money                 NULL,
         royalty         int                   NULL,
         ytd_sales       int                   NULL,
         notes           varchar(200)          NULL,
         pubdate         datetime          NOT NULL
                   DEFAULT (getdate())
    )
    GO

    CREATE TABLE titleauthor
    (
         au_id          varchar(11)
                  REFERENCES authors(au_id),
         title_id       varchar(6)
                  REFERENCES titles(title_id),
         au_ord         tinyint               NULL,
         royaltyper     int                   NULL,
                  CONSTRAINT UPKCL_taind PRIMARY KEY CLUSTERED(au_id, title_id)
    )
    GO



3.3.3    データの移行
   データベースが作成できたら、各テーブルのデータを SQL Azure データベース上にコピーします。データコ
 ピーの方法は SSIS (SQL Server Integration Service)などを使用するのが正しいやり方ですが、ここでは簡
 単のため、非接続型データアクセスを使ったコンソールアプリケーションを書き、アップロードします。以下のような
 コードを使って、データをコピーしてください。(※ サーバー名などは適宜、ご自身のものに変更してください。)

    using   System;
    using   System.Collections.Generic;
    using   System.Linq;
    using   System.Text;
    using   System.Data;
    using   System.Data.SqlClient;

    namespace ConsoleApplication3
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 手元のファイルアタッチデータベースの SQL Server 上の
                // データを、SQL Azure 上にコピーする
                SqlConnection   sqlcon1   =   new   SqlConnection(@"Persist   Security                 Info=False;Integrated
    Security=true;Initial Catalog=PUBS;Server=mmasuda2sqlexpress");
                SqlConnection                        sqlcon2                       =                                    new
    SqlConnection(@"Server=tcp:uevf0i1ffa.database.windows.net;Database=pubs;User
    ID=mmasuda@uevf0i1ffa;Password=xxxxxxxx;Trusted_Connection=False;");

                  DataSet ds = new DataSet();

                  // データ読み取り
                  SqlDataAdapter sqlda1   =   new   SqlDataAdapter("SELECT   *   FROM   publishers", sqlcon1);
                  SqlDataAdapter sqlda2   =   new   SqlDataAdapter("SELECT   *   FROM   titles", sqlcon1);
                  SqlDataAdapter sqlda3   =   new   SqlDataAdapter("SELECT   *   FROM   authors", sqlcon1);
                  SqlDataAdapter sqlda4   =   new   SqlDataAdapter("SELECT   *   FROM   titleauthor", sqlcon1);




                                                                                                                    p.63
                               © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                          本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
sqlda1.Fill(ds,   "publishers");
                sqlda2.Fill(ds,   "titles");
                sqlda3.Fill(ds,   "authors");
                sqlda4.Fill(ds,   "titleauthor");

                // データ書き込み
                SqlDataAdapter sqlda5   =   new   SqlDataAdapter("SELECT   *   FROM   publishers", sqlcon2);
                SqlDataAdapter sqlda6   =   new   SqlDataAdapter("SELECT   *   FROM   titles", sqlcon2);
                SqlDataAdapter sqlda7   =   new   SqlDataAdapter("SELECT   *   FROM   authors", sqlcon2);
                SqlDataAdapter sqlda8   =   new   SqlDataAdapter("SELECT   *   FROM   titleauthor", sqlcon2);

                // 更新クエリ生成
                SqlCommandBuilder   scb5   =   new   SqlCommandBuilder(sqlda5);
                SqlCommandBuilder   scb6   =   new   SqlCommandBuilder(sqlda6);
                SqlCommandBuilder   scb7   =   new   SqlCommandBuilder(sqlda7);
                SqlCommandBuilder   scb8   =   new   SqlCommandBuilder(sqlda8);

                // 行ステータスを変更
                foreach (DataTable table in ds.Tables)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        row.SetAdded();
                    }
                }

                // データアダプタ経由で INSERT 処理を実施
                sqlda5.Update(ds.Tables["publishers"]);
                sqlda6.Update(ds.Tables["titles"]);
                sqlda7.Update(ds.Tables["authors"]);
                sqlda8.Update(ds.Tables["titleauthor"]);

                Console.WriteLine("データをコピーしました。");
            }
        }
    }



3.3.4    アプリケーションの接続文字列を変更
   先ほど作成した Web アプリケーションは、ファイルアタッチデータベースを利用しています。データベースサー
 ビスを利用するように変更するには、接続文字列を書き換えるだけで済みます。以下のように web.config ファイル
 内の接続文字列を書き換えてください。

    <configuration>

        ... (前略) ...

       <!-- 変更前 -->
       <!--<connectionStrings>
         <add                         name="pubsConnectionString1"                      connectionString="Data
    Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|pubs.mdf;Integrated Security=True;User Instance=True"
              providerName="System.Data.SqlClient" />
       </connectionStrings>-->

       <connectionStrings>
         <add                                                                     name="pubsConnectionString1"
    connectionString="Server=tcp:mbkz89u87g.database.windows.net;Database=PUBS;User
    ID=mmasuda@mbkz89u87g;Password=xxxxxxxx;Trusted_Connection=False;"
              providerName="System.Data.SqlClient" />
       </connectionStrings>

        ... (後略) ...

    </configuration>



3.3.5    動作確認
   以上を行ったあとでクラウドサービスプロジェクトを Ctrl + F5 により実行し、WebForm2.aspx ページを呼び出
 すと、SQL Azure データベースからデータを読み出し、画面に表示するようになります。




                                                                                                                p.64
                           © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                      本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.4       Windows Azure ストレージサービスへの移行
 次に、ストレージサービスへの移行を説明します。


 3.4.1    ストレージ接続文字列の設定
      まず、ストレージ接続文字列を修正します。


      ・   クラウドサービスプロジェクトの、プロパティ画面の [Settings] タブを開き、Diagnostic Monitor の接続
          先となるストレージを、開発用ストレージ(development storage)から、運用環境の方に変更します。
      ・   下図のように、 [Account Name] と [Account Key] を設定し、さらに接続方法として HTTPS プロト
          コルを設定してください。




                                                                                                          p.65
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・        以 上 の 設 定 の 後 、 [OK] ボ タ ン を ク リ ッ ク す る と 、 Azure ス ト レ ー ジ 接 続 文 字 列 が 作 成 さ れ 、 ”
            DiagnosticsConnectionString” という名称で保存されます。
   ・        以下のような文字列になりますが、この文字列を次に利用しますので、コピーしておいてください。
                ” DefaultEndpointsProtocol=https;AccountName=nakama;AccountKey= … ( == と い う 文
                 字で終了する文字列)…”


3.4.2   Blob コンテナ・テーブルの作成
   次に、Diagnostic Monitor で利用する、Blob コンテナやテーブルを、ストレージサービス内に作成します。前
 章の「Diagnostic Monitor によるアプリケーション監視」の、「Windows Azure ストレージ側の事前準備」の項で
 説明したサンプルコードを一部修正し、本番環境へ Blob コンテナやテーブルを作成します。
   以下にフルソースコードを示しますが、修正するのは下記ソースコード中のマーカーされた行のみです。ここに、
 先に作成した接続文字列をペーストしてください。
   コードを修正し、コンソールアプリケーションを実行すると、本番環境に Diagnostic Monitor 用の Blob コンテ
 ナやテーブルなどが作成されます。

    using   System;
    using   System.Collections.Generic;
    using   System.Linq;
    using   System.Text;
    using   Microsoft.WindowsAzure;
    using   Microsoft.WindowsAzure.StorageClient;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 開発環境の場合(運用環境の場合には適宜コードを修正)
                //CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
                // 運用環境の場合
                CloudStorageAccount                              storageAccount                              =
    CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=azuretest;AccountKey=xxxxxxxx");




                                                                                                                  p.66
                             © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                        本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
// 作成するコンテナ、テーブル、キューの名称一覧
              string[] containerNamesToCreate = new string[]
              {
                  "wad-iis-failedreqlogfiles", "wad-iis-logfiles", "wad-crash-dumps"
              };

              string[] tableNamesToCreate = new string[]
              {
                  "WADLogsTable", "WADDiagnosticInfrastructureLogsTable",
                  "WADPerformanceCountersTable", "WADWindowsEventLogsTable", "WADDirectoriesTable" };

              string[] queueNamesToCreate = new string[] { };

              // コンテナ、テーブル、キューを作成
              CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
              foreach (string containerName in containerNamesToCreate)
              {
                  CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
                  bool created = blobContainer.CreateIfNotExist();
                  if (created) Console.WriteLine("{0} : コンテナを作成しました。", containerName);
              }

              CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
              foreach (string tableName in tableNamesToCreate)
              {
                  bool result = tableClient.CreateTableIfNotExist(tableName);
                  if (result) Console.WriteLine("{0} : テーブルを作成しました。", tableName);
              }

              CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
              foreach (string queueName in queueNamesToCreate)
              {
                  CloudQueue queue = queueClient.GetQueueReference(queueName);
                  bool result = queue.CreateIfNotExist();
                  if (result) Console.WriteLine("{0} : キューを初期化しました。", queueName);
              }

          }
      }
  }



 以上の作業で、利用するストレージが、開発用ストレージから運用環境のストレージサービスへと変更されます。
クラウドサービスプロジェクトを Ctrl + F5 キーで実行し、動作確認をしてみてください。先ほどと特に見た目は変
わりませんが、内部の動作は以下のように変更されます。




 各種のログファイルが、正しくストレージサービスに、データ出力できているか否かを確認するには、マイクロソフ
トのサンプルアプリケーションである myAzureStorage                           (http://myazurestorage.cloudapp.net/)を使ってい
ただくと簡単です。このツールは、Blob や Table ストレージの中をブラウジングできる Web アプリケーションにな




                                                                                                              p.67
                         © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                    本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
っており、簡単にストレージサービスの中身を確認することができます21。




3.5          Windows Azure コンピュートサービスへの移行
     最後に、コンピュートサービスを移行していきます。


     基本的に、コンピュートサービスへアプリケーションを展開する場合には、まず Staging 環境にアプリケーションを
配置して、最終動作確認を行ったのち、これを Production 環境と入れ替えます。まずは Staging 環境へのアプリ
ケーションのアップロード方法について、以下に解説します。


     3.5.1   インスタンス数の変更
        まず、サーバーへのアップロードを行う前に、いったん仮想マシンのインスタンス数を 1 に減らしておきます。後
      で解説しますが、コンピュートサービスでは、利用した仮想マシンの台数分だけ課金が発生します。このため、最
      初の段階ではインスタンス数を 1 に減らして配置を行い、動作確認が取れてからインスタンス数を増やすのが鉄
      則になります。




21   (参考) このツールは Microsoft が提供する非常に手軽なツールですが、開発用ストレージの中を見ることができない、データのダウ
     ンロードやアップロードができないなど、実際に利用するには、機能不足というのが正直なところです。取り急ぎでざっくりデータを確認し
     たい、という場合に利用すると便利です。



                                                                                                          p.68
                     © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.5.2   クラウドサービスのパッケージングと Azure 上への配置
        次にクラウドサービスを発行し、それを、Windows Azure 上へと配置する手順を説明します。


        ・    クラウドサービスプロジェクトを右クリックして、 [発行] をクリックしてください。
                すると、サービスパッケージの作成(パッケージング)のみか、Azure 上へのサービスパッケージの
                 配置も行うか、聞かれます。
                Visual Studio でパッケージングのみを行い、ポータルから手動でサービスパッケージを配置する
                 ということも可能です。
                しかし今回は、Visual Studio でパッケージングと配置の両方を行う方法をとります22。
        ・    まず、[Deploy your Cloud Service to Windows Azure] を選択します。
        ・    そして、[Credentials:] のドロップダウンリストから、<Add…>を選択します。
        ・    [Cloud Service Management Authentication] の画面が表示されます。




        ・    [1. Create or select an existing certificate for authentication:] ドロップダウンリストで、先ほど作成
             した証明書を選択します。
        ・    次に、[3. Copy the subscription ID for your account from the Developer Portal: ] のテキストボッ
             クスに、メモしておいた Subscription ID23を貼り付けます。
        ・    そして、[Name these credential: ] のテキストボックスに、適当な証明書の名前を付与し、[OK] ボタン
             をクリックします。




22 Visual Studio から配置が行えるのは、Azure 開発ツールキットのバージョンが 1.2 からになっております。以前のバージョンを使用する
  場合には Visual Studio で発行を行い、ポータルから、手動で配置する必要があります。
23 ポータルサイト(http://windows.azure.com)からプロジェクトを選択し、 [Account] タブから取得できます。




                                                                                                                p.69
                           © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                      本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   すると、[Publish Cloud Service] 画面に戻ります。
        ・   デプロイするサービススロットとして Staging 環境を選択し、Storage Account を選択します。
        ・   最後に、ラベルにアプリケーションのバージョン番号(ビルド番号) 24を付与し、 [OK] ボタンをクリックし
            てください。




       すると、クラウドサービス(Web アプリケーション)が発行され、Azure 上に配置されます。その配置の進行状況
      や作業のログは、Visual Studio から確認することができます。




24   今回は 2010 年 7 月 1 日の最初のバージョンということで ”1.0.00701.0” を付与します。管理上、わかりやすい名前を付与してください。
     デフォルトで付与されている名前をそのまま使っていただいても問題ありません。



                                                                                                             p.70
                        © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                   本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ポータルサイトからも進行状況が変化していくのが確認できます。




 Visual Studio からは[Complete]と表示されたら、ポータルサイトからはステータスが Ready となったら、Azure
上への配置が終了となります。
 以下では、パッケージングと配置の処理で、具体的にはどのようなことが行われているか解説します。


A. パッケージング
   パッケージング処理により、Visual Studio から、以下 2 つのファイルが出力されます。
   ・ サービスパッケージファイル(CloudService1.cspkg)
           実際の Web アプリケーションが含まれるパッケージファイルです。
   ・   サービス構成設定ファイル(ServiceConfiguration.cscfg)
           配置後も変更可能な構成設定データが記述されたテキストファイル(XML ファイル)です。


B. 配置
   配置では、以下 3 つの処理が行われます。
   ・   コンピュートサービスのハードウエアインフラ上に、仮想マシンのイメージ(この例の場合には、Web ロー
       ルの VM イメージ)がコピーされる
   ・   この仮想マシンに対して、指定した VM サイズのリソース(この場合には Small なので 1 個の CPU と
       1.75GB のメモリ)が割り当てられる
   ・   この仮想マシンに、アップロードしたアプリケーションパッケージが配置され、実行される




                                                                                                       p.71
                  © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                             本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.5.3   Windows Azure コンピュートサービスの動作確認
   しばらくすると、コンピュートサービスが起動します。Staging 環境では、配置されたアプリケーションにダミーの
 URL が付与されます。画面上にある URL にアクセスして、Web アプリケーションの動作を確認してください。




   以上で、コンピュートサービス環境への Web アプリケーションの配置と、基本的な動作確認は終了です。しかし



                                                                                                      p.72
                 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                            本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
ながら、このままではいくつかの問題があります。


      A. 現在時刻の表示
         表示されている時刻が、現在時刻とずれてしまっています。これは、コンピュートサービスのコンピュータが、
      UTC 時刻(グリニッジ標準時)で動作しているためです。UTC と東京時刻には 9 時間の時差があるため、表
      示時刻は 9 時間ずれて表示されてしまいます。


      B. コントロールの英語表記
         GridView の [選択] ボタンが英語表記の ”Select” となってしまっています。これは、コンピュートサービ
      スのサーバーOS が、データカルチャ、UI カルチャともに”en-us”(英語)で動作しているためです。このため、
      例えば int a = 30;というデータを通過表記すると、¥30 ではなく$30 となってしまいます。


      このように、コンピュートサービスの本番環境は、ローカルコンピューターの開発用ファブリックとは、いくつか環
  境的に異なるところがあります。このため、実際に既存のアプリケーションを Azure 上に移植する場合、あるいは
  新規に Azure 用のアプリケーションを開発する場合には、このような環境の違い(特に国際化対応の問題)を意識
  する必要があります。


3.6      アプリケーションの修正と Azure 環境への再配置
 それでは、実際にアプリケーションを修正し、コンピュートサービスの環境に適応させてみることにします。


 3.6.1    開発用ファブリックと本番環境の相違点
      開発用ファブリックと Azure 本番環境では様々な相違点があります。Azure 本番環境で問題となりやすい制
  限事項としては、以下のようなものがあります。




      この中でも、国際化対応に関連する問題は、よくひっかかりやすいポイントになります。例えば、以下のような簡
  単な処理でも、Azure 環境では、開発環境とは異なる動きをします。




                                                                                                         p.73
                    © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                               本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.6.2    アプリケーションの修正
   これらについては、基本的に以下の対策を行うとよいでしょう。


  A. web.config ファイルへの、データカルチャと UI カルチャの修正設定の追加
        .NET ランタイムは、内部的に、データの国際化対応と UI メッセージの国際化対応の 2 つの機能を持って
    います。これらは、web.config ファイルで切り替えることが可能です。日本語圏と同じように動作させたければ、
    以下のように指定を行います。

    <configuration>
       <system.web>
         <globalization culture="ja-jp" uiCulture="ja-jp" />
       </system.web>
    </configuration>


  B. アプリケーション中の時刻処理を、タイムゾーンを意識したコードに変更
        DateTime.Now プロパティによって取得される時刻は、Azure 環境では UTC 時刻となります。このため、
    日本の時刻を取得したい場合には、時差補正を行う必要があります。具体的には、以下のようにコードを修正
    してください。

    // 従来であれば、以下のように実装していたコードを、
    DateTime now = DateTime.Now;
    // 以下のように修正します。
    DateTime now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now.ToUniversalTime(),"Tokyo Standard
    Time");



3.6.3    アップグレード
   これらの修正を加えたら、Azure 上の Web アプリケーションをアップグレードします。アップグレードについては
 Visual Studio 2010 + Azure Tools 1.2 から直接操作できないため、Visual Studio からパッケージング作業を
 行い、ポータルサイトからアップグレードします。以下の手順でアップグレードしてください。


   ・     まず、先ほどと同様に CloudService1 プロジェクトを右クリックし、[発行] を選択します。
   ・     そして、発行のみを行う [Create Service Package Only] を選択し、[OK] をクリックしてください。
              すると、Visual Studio から、サービスパッケージファイル(CloudService1.cspkg)とサービス構成
               ファイル(ServiceConfiguration.cscfg)が出力されます。




                                                                                                                p.74
                           © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                      本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・   次に、ポータルサイトの Staging 環境の [Upgrade…] ボタンをクリックし、発行された 2 つのファイルを
    アップロードしてください。
       配置の際には、ラベルとして、先とは異なる名称を付与しておくとよいでしょう。その他の項目
        (Operating System Settings など)は既定値のままで構いません。




                                                                                                    p.75
               © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                          本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.6.4   解決されない問題
   以上の作業を行った上で、再度アプリケーションの動作を確認すると、以下のようになります。


   ・    日時表示は正しい表示に変更され、東京の日時が表示される
   ・    しかし、GridView の選択ボタンについては、依然として [Select] 表示のままである


   前者については問題ないと思いますが、後者については疑問を覚える方もいると思います。尐し補足すると、
 一般に、GridView の選択ボタンの表記文字や、例外に含まれる詳細メッセージなどには、.NET Framework
 ランタイムの中に含まれる、日本語リソースファイルが使われています。しかし、現在のコンピュートサービスの環
 境には、日本語のリソースファイルが含まれていません。<globalization> タグで uiCulture を “ja-jp” にして
 おくと、本来は、日本語リソースファイルが利用されるようになります。しかし、そもそもこのリソースファイルが
 Azure 上にインストールされていないため、英語メッセージになってしまう、ということになります。
   このため、今回の GridView の選択ボタンのようなものを日本語表記にしたい場合には、以下のように対応する
 必要があります。


   ・    テンプレート列を作成し、LinkButton コントロールを配置する
   ・    手作業でこれに “選択” という文字を設定し、CommandName プロパティに “Select” を指定する


   尐し面倒な作業ですが、現在の Azure プラットフォームの制約として覚えておく必要があります。




                                                                                                       p.76
                  © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                             本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.6.5   構成設定の変更
   次に、ポータルサイトから構成設定を変更してみます。


   ・    ポータルサイト上で、[Configure…] ボタンをクリックしてください。
           サービス構成設定ファイルを編集できます。
   ・    このファイルの中ほどに、<Instances count=”1” /> という設定があるので、これを適宜増やします。
           ここでは 3 にしてみることにします。
   ・    修正後、”Save” ボタンをクリックしてください。
           インスタンス数増加には多尐時間がかかります。しばらくお待ちください。




                                                                                                       p.77
                  © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                             本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
しばらくすると、インスタンス数が 3 になります。




   ・    この状態で動作確認してみてください。
           インスタンス ID が時折切り替わることが確認できると思います。




3.6.6   本番環境への展開
   最後に、いよいよこのアプリケーションを本番環境(”Production”)へと展開しましょう。このためには、ポータル
 サイトのスワップ機能(入れ替え機能)を利用します。この画面の真ん中のボタンを押すと、二つの環境が入れ替
 わり、運用環境にアプリケーションが配置されます。Staging 環境ではダミーの URL が付与されていますが、
 Production 環境に移すことにより、通常の URL(http://<アカウント名>.cloudapp.net)アドレスでアクセスするこ
 とができるようになります。




                                                                                                      p.78
                 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                            本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
Staging 環境と Production 環境の入れ替えは、ロードバランサのみで行われるため、すぐに終了します。




 作業が終了したら、運用環境用の URL(http://<アカウント名>.cloudapp.net)にアクセスを行い、Web アプリ
ケーションが動作することを確認してください。




                                                                                                    p.79
               © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                          本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
3.6.7      サービスの停止
   アプリケーションの動作を確認し、テストが完了したら、サービスを停止します。具体的には、Windows Azure
 ポータルサイトの画面内にて、以下の作業を行ってください。


   ・        ポータルサイト上の”Suspend”のボタンを押す。
   ・        さらに、ポータルサイト上の”Delete”のボタンを押す。


   以上の作業により、コンピュートサービスが停止し、コンピュートサービスの利用にかかわる課金が停止します。
 注意すべき点として、アプリケーションを”Suspend”させるだけではコンピュートサービスの課金が停止しません。
 これは、Suspend 状態であっても、仮想マシンがリソースを占有し続けているためです。課金を停止させるために、
 利用が終了したら必ずサービスを”Delete”するようにしてください。


   以上で、Windows Azure Platform 上でのアプリケーション開発の演習は終了です。


3.6.8      アカウントの削除
   Windows Azure Platform のアカウントが今後もう必要ない、ということであれば、Windows Azure アカウント
 の削除を行ってください。アカウントを削除するには、Windows Azure のカスタマーサポートに電話し、削除して
 もらいます。


   なお、課金状況は MOCP サイト(Microsoft Online Services Customer Portal サイト)から確認できます。
 課金情報はリアルタイムではなく遅れがあるため、注意してください。

        MOCP サイト
        https://mocp.microsoftonline.com/site/default.aspx




                                                                                                                     p.80
                                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
第4章
                                                     Windows Azure 運用環境における課金

 最後に本章では、Windows Azure の課金を安く抑えるためのコツについて解説します。
 前提として、ここに書かれている情報は、2010 年 6 月 25 日時点での情報をまとめたものであり、また、あくまで参考
情報となっております。必ず、オフィシャルサイトの最新情報をご参照ください。

      Windows Azure Platform オフィシャルサイト(日本語)
      http://www.microsoft.com/japan/windowsazure/


4.1         Windows Azure 運用環境における課金を安く抑える方法
 Azure の課金の詳細については、Windows Azure のサイト(上記)に詳しくまとめられていますが、なかなかとっつ
きにくいのも確かだと思います。そこでここでは、課金に関するポイントを解説します。
 Windows Azure プラットフォームでは、基本的に、「サービス」と「トラフィック」が課金対象になります。




 サービスに対する課金に関しては、各サービスで課金方式が異なるため、注意が必要です。特に、開発中に課金
が膨らみやすいのはコンピュートサービスとなっています。そのため、コンピュートサービスの利用方法には、特に注
意してください。


 4.1.1      トラフィックの課金
       トラフィック課金については、以下の点に注意する必要があります。


      A. 同一拠点(≠ 同一地区)の Azure データセンタ内の通信に関しては課金対象ではない
           同一データセンタ内に配置されたサーバー間の通信は課金対象とはなりません。例えば、コンピュートサー
        ビス(Web ロールなど)と SQL Azure が同一のデータセンタ(例えばシンガポールなど)に存在する場合、そ
        の間の通信に関しては課金がかかりません。しかし、コンピュートサービスが香港、SQL Azure がシンガポー
        ルにあると、その間の通信に関してはトラフィック課金がかかります(この場合、両方のデータセンタで課金が
        発生します)。


      B. トラフィック課金の単価は、データセンタの場所によって異なる
           クライアントユーザがどこにいるかではなく、サービスがどのデータセンタに配置されているのかによって課



                                                                                                                    p.81
                               © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                          本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
金が決まります。(アジアはトラフィック課金の単価が高めなため、注意してください25。)


       C. 運用時はトラフィック課金が比較的膨らみやすい
             単価だけ見ると尐額ですが、実際の Web サイトではそれなりの金額になります。例えば、約 500kB の Web
         ページが 5,000 回/日のペースで呼び出されたとしても、500kB x 5,000 回 x 30 日 = 75GB の転送量
         になり、決して無視できないデータ転送量になるため、注意が必要です。


       D. 開発中のトラフィックはそれほど大きくならないが、巨大なデータ転送には注意する
             開発時はユーザー数が尐ないでしょうから、通常は数 GB もあれば十分であり、数百円程度で済むでしょぅ。
         ただし、初期データのアップロードなど、巨大データの転送には注意してください。


     4.1.2    Windows Azure コンピュートサービスの課金
        コンピュートサービスの課金は、「物理マシンリソースの占有量」と「トラフィック量」に応じて決まります。


       A. マシン占有課金=単価×サイズ×デプロイ時間×インスタンス数
             マシン占有に対する課金は、「CPU の利用時間」ではなく、「サーバリソースの占有量と時間」により課金が
         決まるところがポイントです。コンピュートサービスでは、アプリケーションをアップロードした時点から”Delete”
         されるまでの時間が課金の対象となります。なぜなら、“Suspend”や“Stopped”などの状態のように、サービス
         が停止していた状態であっても、リソースを占有しているためです。実際の利用時には、“Suspend”状態でサ
         ーバーを放置せず、使用後は必ず “Delete” し、空の状態にするようにしてください。




       B. “Production” 環境と “Staging” 環境の課金単価は同一
             Staging 環境といっても、ここにアップロードしたアプリケーションは、しっかりと Windows Azure インフラの
         CPU やメモリリソースを占有しています。このため、”Staging” 環境に置いたアプリケーションについても、課
         金が行われます。 通常、Staging 環境は、Production 環境のアプリケーションをアップグレードする前の、最
         終動作確認環境として利用されますが、利用が済んだら、これも必ず “Delete” するようにしてください。


       C. 課金時間は、「デプロイ~削除」までを 1 時間単位で繰り上げ計算
             つまり、数分しか配置していなかったとしても、1 時間分の課金が行われる、ということになります。よって、
         以下のような操作は避けてください。



25   北アメリカやヨーロッパに配置すると通信料はやや安くなりますが、開発中はそれほどトラフィックが多くならないため、必ずしもメリットは
     大きくないでしょう。



                                                                                                             p.82
                        © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                   本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
・       新規アプリケーションパッケージをデプロイしたあと、すぐに削除する
                  この場合でも、1 時間分の課金がされます。
        ・       最初から大量のインスタンス数でデプロイする
                   一度に 30 インスタンスでデプロイをすると、万が一デプロイに失敗した場合には、削除してやり
                     直すことになりますが、この場合、30 時間分の請求が発生するため、注意が必要です。
        ・       開発中に、既存アプリケーションをアップグレードする際に、"Upgrade" せずに、"Delete" してから
                "New" で新規配置する
                   Upgrade の場合には、時間数計算が連続します。
                   また、配置に要する時間も、Upgrade の方が短く済みます。


   以上のことをきちんと押さえておくと、Production 環境のアプリケーションをアップグレードする正しい方法が
 分かってきます。具体的にまとめると、以下のような手順になります。


   ・        正しいアップグレード手順
            ①    まず Staging 環境に、インスタンス数 = 1 で新規デプロイする
            ②    動作確認し、問題なければ、Staging 環境でインスタンス数を増やす
            ③    Production と Staging を入れ替える
            ④    しばらく様子を見る(※ 問題があった場合にはロールバックするため)
            ⑤    問題がなければ、Staging 環境を削除(Delete)し、インスタンスを消す


   うっかり放置すると、Small インスタンス 1 つであっても、1 か月あたり 8,000 円程度の課金になってしまい
 ます。決して安い金額ではないので、十分注意しながら利用してください。


4.1.3       Windows Azure ストレージサービスの課金
   ストレージサービスに関しては、トラフィック課金に特に注意してください。ストレージサービスでは、「ストレージ
 利用量」、「トランザクション数」、および「トラフィック量」の 3 つにより課金が決まります。2010 年 6 月 25 日時点
 での単価は、以下のようになっています。


   ・        ストレージ利用課金:                14.70 円/GB・月
   ・        トランザクション課金:               10,000 トランザクションあたり 0.98 円
   ・        トラフィック課金:                 アジア地域からのダウンロードの場合 29.40 円/GB


   これらの数字から考えると、ストレージサービスの課金の大半は、トラフィック課金になるはずです。特に、マル
 チメディアファイルなどの、巨大な BLOB データを、ストレージに置いて配信するような場合には、十分な注意が
 必要です。




                                                                                                               p.83
                          © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                     本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
4.1.4      SQL Azure データベースサービスの課金
   データベースサービスの課金については、以下に注意してください。


  A. サービスの課金は、データベースの数とエディションと実際のデータ量により決定
         例えば下図の例の場合には、Business Edition のデータベースが 1 つ、Web Edition のデータベースが
    1 つで、それぞれに対して課金が発生します。データベースサービスの場合、容量制限があるためにデータ
    ベースの数を増やしたくなるわけですが、むやみに増やせば、それ相応に課金額も増えていく、ということに
    注意してください。




         なお、2010 年 6 月末に、データベースサービスの最大容量が拡大され、実容量を加味した課金方式に変
    更されました。例えば、Web Edition のデータベースに対して、ある日、3GB のデータが入っていた場合に
    は、¥4,895.10 の日割りが課金され、次の日、データが 0.8GB に減った場合には、¥979.02 の日割りが課
    金されるようになっています。詳細は Web ページの情報をご確認ください。


             最大容量                  Web                       Business

             1GB                   979.02/月                 (9,799.02/月)

             5GB                   4,895.10/月               (9,799.02/月)

             10GB                  -                         9,799.02/月

             20GB                  -                         19,598.04/月

             30GB                  -                         29,397.06/月

             40GB                  -                         39,196.08/月

             50GB                  -                         48,995.10/月



  B. オンプレミス SQL Server などとの連携を行う場合は、トラフィック課金に注意
         特に、データベースのデータの一括転送などは、どうしても容量がかさみがちになります。トラフィック課金が
    かなりの額になることも想定されるため、十分に注意してください。


4.1.5      課金状況の確認
   なお、上記のいずれに関しても、課金状況は MOCP サイト(Microsoft Online Services Customer Portal
 サイト)から確認できますが、課金情報はリアルタイムではなく遅れがあるため、注意してください。

        MOCP サイト
        https://mocp.microsoftonline.com/site/default.aspx


   また、本セクションで解説した課金ロジックは実際の課金ロジックを単純化したものです。実際の課金ロジックは




                                                                                                                     p.84
                                © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                           本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
かなり複雑になっておりますので、より詳細を知りたい方は、以下の情報を参照してください。

        課金情報サイト
        http://www.microsoft.com/windowsazure/support/understandbill/




4.1.6      課金の予測
   さて、ここまで課金の仕組みなどについて、ざっと解説してきました。ここで、実際にご自身のアプリケーションの
 場合にどの程度の課金となるのか気になると思います。しかし、これに関しては、case-by-case としか言いようが
 ありません。Web アプリケーションの中身は千差万別であり、必要なサーバー台数も、データ転送量も、本当にま
 ちまちというのが実態です。


   もし実際に Azure プラットフォームを使う前に、課金がどの程度になるかを知りたいようであれば、既存の類似
 アプリケーションについて、以下のようなポイントを考えてみたり、調べてみたりするとよいでしょう。


   ・       ネットワークトラフィックはどの程度あるのか?(これは IIS ログから調べられます)
   ・       現在の Web サーバーのマシンスペックと台数はどの程度か?(Azure プラットフォームでは Small イ
           ンスタンスの CPU が 1.6GHz 相当なので、これからざっくりとした計算はできます)
   ・       必要となる SQL Azure データベースの容量はどの程度か?


   サーバー台数の見積もりなどは、原理的に机上での評価が難しい領域になります。そういう観点からも、プロトタ
 イピングなどを通して実機検証を行い、見積もり精度を高めていくことを推奨します。




                                                                                                                    p.85
                               © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan
                                                          本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

Windows azure stepbystep_tutorialguide

  • 1.
    Windows Azure 用アプリケーション開発 Step-by-Step チュートリアルガイド マイクロソフト株式会社 コンサルティングサービス統括本部 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 2.
    目次 第1章 はじめに ............................................................................................................................................. 5 1.1 本書の目的と前提条件 ....................................................................................................................... 5 1.2 Windows Azure Platform 概要 ........................................................................................................ 5 1.2.1 クラウドコンピューティングとは ...................................................................................................... 5 1.2.2 マイクロソフトのクラウドコンピューティングの全体像 ....................................................................... 6 1.2.3 Azure 用アプリケーション開発時に利用する主要サービス ............................................................ 7 1.2.4 Web アプリ開発時に考慮すべき Azure の特徴 ............................................................................ 9 第2章 簡単なサンプルを用いた Azure アプリケーションの開発 .................................................................... 11 2.1 開発環境の構築 ............................................................................................................................... 11 2.1.1 Windows 7 Enterprise 評価版のインストールと IIS の追加インストール ................................... 11 2.1.2 Visual Studio 2010 Ultimate 評価版のインストール ................................................................ 12 2.1.3 SQL Server 2008 R2 Management Studio Express のインストール ....................................... 12 2.1.4 Windows Azure Tools for Microsoft Visual Studio ver1.2 のインストール .............................. 13 2.2 ローカルでの Web アプリケーション開発 ............................................................................................ 13 2.2.1 Web アプリケーションプロジェクトの作成 .................................................................................... 13 2.2.2 1 つ目の Web ページの作成 ..................................................................................................... 14 2.2.3 2 つ目の Web ページの作成 ..................................................................................................... 14 2.2.4 ASP.NET 開発サーバー上での動作確認 .................................................................................. 16 2.3 クラウドサービスプロジェクトの追加 .................................................................................................... 17 2.3.1 クラウドサービスプロジェクトの役割 ............................................................................................. 17 2.3.2 クラウドサービスプロジェクトの追加 ............................................................................................. 17 2.3.3 複数の Web アプリケーションを同時に展開する場合 .................................................................. 19 2.3.4 クラウドサービスプロジェクトの構成設定 ..................................................................................... 20 2.4 開発用ファブリック上での動作確認 .................................................................................................... 21 2.4.1 動作確認 .................................................................................................................................. 21 2.4.2 開発用ファブリックのランタイム構成 ............................................................................................ 22 2.4.3 運用環境と比較した開発環境(開発用ファブリック)の特徴 .......................................................... 23 2.4.4 開発用ファブリックへの配置の仕組み ........................................................................................ 26 2.5 Diagnostic Monitor によるアプリケーション監視 ............................................................................... 27 2.5.1 Diagnostic Monitor とは ......................................................................................................... 28 2.5.2 Azure ストレージ側の事前準備 ................................................................................................. 29 2.5.3 収集するログファイルに関する設定方法 ..................................................................................... 31 2.5.4 ログファイルの確認方法 ............................................................................................................ 34 第3章 Windows Azure 運用環境への展開 ............................................................................................. 37 3.1 Windows Azure の購入................................................................................................................... 37 3.1.1 Step 1 - Microsoft Online Services カスタマー ポータル プロファイル登録........................... 37 3.1.2 Step 2 - Microsoft Online Services カスタマー ポータルから Azure の購買 ...................... 39 3.1.3 Step 3 - Azure のアクティブ化 ............................................................................................. 43 3.2 各種サービスの初期設定と Windows Azure API Certificate の登録 ............................................... 47 3.2.1 SQL Azure データベースサービスの初期設定 .......................................................................... 47 3.2.2 Windows Azure ストレージサービスの初期設定 ....................................................................... 51 3.2.3 Windows Azure コンピュートサービスの初期設定 ..................................................................... 55 3.2.4 API Certificate の登録 ............................................................................................................ 58 3.3 SQL Azure データベースサービスへの移行 ..................................................................................... 61 p.3 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 3.
    3.3.1 SQL Server Management Studio からの接続........................................................................ 61 3.3.2 テーブルの作成 ........................................................................................................................ 62 3.3.3 データの移行 ............................................................................................................................ 63 3.3.4 アプリケーションの接続文字列を変更......................................................................................... 64 3.3.5 動作確認 .................................................................................................................................. 64 3.4 Windows Azure ストレージサービスへの移行 ................................................................................... 65 3.4.1 ストレージ接続文字列の設定 ..................................................................................................... 65 3.4.2 Blob コンテナ・テーブルの作成 ................................................................................................. 66 3.5 Windows Azure コンピュートサービスへの移行 ................................................................................ 68 3.5.1 インスタンス数の変更 ................................................................................................................ 68 3.5.2 クラウドサービスのパッケージングと Azure 上への配置 .............................................................. 69 3.5.3 Windows Azure コンピュートサービスの動作確認 ..................................................................... 72 3.6 アプリケーションの修正と Azure 環境への再配置 .............................................................................. 73 3.6.1 開発用ファブリックと本番環境の相違点 ...................................................................................... 73 3.6.2 アプリケーションの修正 .............................................................................................................. 74 3.6.3 アップグレード ........................................................................................................................... 74 3.6.4 解決されない問題 ..................................................................................................................... 76 3.6.5 構成設定の変更 ....................................................................................................................... 77 3.6.6 本番環境への展開 .................................................................................................................... 78 3.6.7 サービスの停止 ......................................................................................................................... 80 3.6.8 アカウントの削除 ....................................................................................................................... 80 第4章 Windows Azure 運用環境における課金 ....................................................................................... 81 4.1 Windows Azure 運用環境における課金を安く抑える方法 ................................................................ 81 4.1.1 トラフィックの課金 ...................................................................................................................... 81 4.1.2 Windows Azure コンピュートサービスの課金 ............................................................................ 82 4.1.3 Windows Azure ストレージサービスの課金 ............................................................................... 83 4.1.4 SQL Azure データベースサービスの課金 ................................................................................. 84 4.1.5 課金状況の確認 ....................................................................................................................... 84 4.1.6 課金の予測............................................................................................................................... 85 本書の利用条件: 本書に関するすべての権利は、マイクロソフト コーポレーション (以下、マイクロソフト) が保有しています。マイク ロソフトまたはその関連会社による事前の承諾がない限り、本書の全部または一部を複製 (電子装置等への保存・保管 を含む)、改変、翻案、再頒布、公衆送信、貸与、譲渡することは一切認められません。 マイクロソフトおよびその関連会社は、本書の内容について何ら保証するものではなく、本書の使用に関連してお客様 または第三者に生ずる間接的、付随的、結果的な損害 (営業機会や営業情報の損失などを含む) について一切責任を負 いません。 本書の中で例として使用されている企業、名前およびデータは、特に記述が無い限り架空のものです。 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan p.4 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 4.
    第1章 はじめに 1.1 本書の目的と前提条件 本ガイドは、Windows Azure Platform について実際にご自身の手で開発を体験いただくためのチュートリアル ガイドとなっております。Windows Azure と SQL Azure を使った、サンプル Web アプリケーションを Azure 用のア プリケーションにカスタマイズし、実際にデプロイするまでを、順を追って解説していきます。 本ガイドでは ASP.NET、SQL Server などに関する、基本的な開発スキルを前提として解説していきます。もし、こ れらに不安がある場合には、まず ASP.NET や SQL Server に関する書籍を学習した上で、本ガイドをご参照くださ い。 1.2 Windows Azure Platform 概要 Azure 用アプリケーションを開発する前に、本章で Windows Azure Platform とはどのようなサービスかおさらい し、次章から Azure 用アプリケーションを開発していきます。 ・ クラウドコンピューティングとは(1.2.1) ・ マイクロソフトのクラウドコンピューティングの全体像(1.2.2) ・ Azure 用アプリケーション開発時に利用する主要サービス(1.2.3) ・ Azure 用アプリケーション開発時の基本的な注意点(1.2.4) 1.2.1 クラウドコンピューティングとは Azure は Microsoft が提供しているクラウドコンピューティングサービスの1つです。クラウドコンピューティング とは、ネットワークを介して提供される「サービス」を利用する形態のことを言います。 クラウドコンピューティングの大きな特徴は、低水準のハード構成やソフトウエアを意識する必要がないということ です。従来のコンピューティングシステムは、インフラ、アプリ、運用のすべてを自社で賄う必要がありました(これ をオンプレミスと言います)。クラウドコンピューティングでは、これらすべて、または一部を、他社に任せることがで きるようになります。ハード、ミドル、およびアプリの、どこの層まで他社に任せるかで、クラウドを分類することがで きます。 ・ IaaS ・・・ ハード部分のみ他社に任せてしまう ・ PaaS ・・・ インフラ部分(ハードおよびミドル)のみ他社に任せてしまう ・ SaaS ・・・ ハード、ミドルおよびアプリまで全て他社に任せてしまう p.5 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 5.
    コンピューティングシステムの全部または一部を他社に任せると、その部分の構築や保守、運用などについて 考える必要がなくなります。そのため、クラウドコンピューティングを活用すると、当該企業が本当に注力したい部 分にのみ、ビジネスリソースを割くことができるようになります。 1.2.2 マイクロソフトのクラウドコンピューティングの全体像 最適なクラウドコンピューティングは、ユーザー企業ごとに異なります。例えば、メールサーバーを例にとります。 メールサーバーの運用などをしたくない中小企業は SaaS が最適です。しかし、セキュリティポリシー上、メールを 社外に出せない企業は、オンプレミスが最適です。このため、マイクロソフトでは、オンプレミス型とクラウド型の 2 通りのシナリオを提供しています。 Windows Azure Platform は、マイクロソフトの PaaS 型のクラウドサービスです。自社開発アプリケーションを 載せるプラットフォームとして Windows Azure Platform を見た場合には、以下のような特徴があります。 ・ .NET Framework や Visual Studio を使った開発ができる ・ 煩わしいハードウェアやミドルウエア運用から解放される ・ 利用に応じた課金がなされる p.6 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 6.
    1.2.3 Azure 用アプリケーション開発時に利用する主要サービス Azure 用アプリケーションを開発する場合には、主に以下 3 つのサービスを利用します。 ・ Windows Azure コンピュートサービス(以下、コンピュートサービス) ・ Windows Azure ストレージサービス(以下、ストレージサービス) ・ SQL Azure データベースサービス(以下、データベースサービス) これらの概要について簡単に解説していきます。 A. Windows Azure コンピュートサービス コンピュートサービスは、カスタムアプリケーションのホスティングサービスです。Windows Server OS のベ ースイメージが提供され、そこにカスタムアプリケーションを載せて実行することができます。コンピュートサー ビスには、大別して 2 種類の OS ベースイメージがあります。 a. Web Role サーバー 主に Web アプリケーションをホストするためのサーバーです。IIS が搭載されています。 b. Worker Role サーバー 主にバッチアプリケーションを動作させるためのサーバーです。IIS が搭載されていません。 これらの OS ベースイメージにアプリケーションをインストールし、実行させて使用します。 B. Windows Azure ストレージサービス Azure 上で動作するアプリケーションやサービスは、セキュリティ確保のため、基本的にローカルのファイル システムに書き込むことができません。それに代わるものとして、データ保存用に提供されているのが、ストレ ージサービスです。ストレージに格納できるデータ構造として、3 種類のデータ構造(Blob, Table, Queue)が p.7 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 7.
    定義されており、そのデータ構造ごとに 3 種類のストレージがあります。それぞれのストレージにはURI が付い ていて、HTTP-REST プロトコル1によるアクセスができるようになっています。 種類 データ 用途 URI BLOB バイナリ 巨大バイナリデータを種類問わずに格納でき http://<アカウント名 ストレージ データ るストレージになっています。そのため、マル >.blob.core.windows.net/<コンテナ名 チメディア系のファイル >/<Blob 名> (.wmv、.wav、.mp3、.jpg など)や巨大なデータ ファイル(.vhd、.zip など)などの格納に最適で す。 Table Key-Value プロパティ値のみを持つようなオブジェクトを、 http://<アカウント名 ストレージ データ 二つのキーにより一意化し、分散保有する設 >.table.core.windows.net/<Table 名 計になっています。そのため、キーを上手に >?$filter=<Blob 名> 設計することにより、巨大なデータ検索処理を 効率よく実行することができるようになります。 Queue メッセージキュー Web/Worker Role サーバー間の通信には http://<アカウント名 ストレージ データ HTTP または TCP による直接型通信を行いま >.queue.core.windows.net/<Queue 名 す。この通信を非同期で行いたい場合にのみ > Queue ストレージを使用します。 C. SQL Azure データベースサービス SQL Azure データベースサービスは、インターネット上で利用できる SQL Server データベースです。 TDS プロトコルを直接受けつけることができるため、通常の SQL Server とほぼ同一の開発ツールや管理ツ ールを利用できます。しかし、完全に SQL Server と同じというわけではなく、SQL Server に対していくつか のカスタマイズと、制限事項を加えて作られています。 a. 制限事項 ・ 容量の上限が 50GB と低い b. メリット ・ 内部でレプリケーションによるデータの多重保持が行われており、サービス可用性 99.9%が保証さ れている ・ カスタムアプリケーションのインフラとして見た場合、SQL Server の細かいサーバー運用に、気を 払わずに使うことができる 1 REST(Representational State Transfer)とは、HTTP のメソッドヘッダー上にデータアクセスのための命令(Post、Get、Put、 Delete)を記述することでリソースにアクセスできるように設計されたプロトコルのことです。 p.8 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 8.
    1.2.4 Web アプリ開発時に考慮すべき Azure の特徴 通常(オンプレミス用)の Web アプリケーション開発と比較して、Azure 用の Web アプリケーション開発には、 PaaS アプリケーション開発特有の特徴があります。具体的には、オンプレミス型の開発とは異なり、ハードやミド ルなどの、インフラに関わる設定や運用を、ほとんど考えなくて済むという利点があります。しかしその半面、Web サーバーや DB サーバーの設定やバージョンを自由に決めることができない、または変更できないなどの注意点 があります。また、配置するアプリケーションそのものにも、ローカル HDD やレジストリへの書き込みができない、 複数の Web アプリを同一サーバー上に配置できないなどの制限事項があります。 具体的な制限事項・注意事項として、最初に知っておくべきものに、以下のようなものがあります。オンプレミスと 比べ、こうした注意事項や制限事項が多いため、きちんと理解した上で、開発を進める必要があります。 また、Windows Azure Platform は、リソースを共用するタイプの画一的なプラットフォームであることも忘れて はいけません。詳細はここでは解説しませんが、下図に示すように、コンピュートサービスにしろ、SQL Azure にし ろ、複数のユーザーがひとつのハードウェア筐体を共有する形式を取っており、またサービスレベルも画一的なも のとなります。オンプレミスであれば、単一のアプリケーションが全ハードウェアリソースを占有することも、また 99.999%のような超高可用性を目指すことも自由ですが、クラウドサービスではこのような自由がありません。 p.9 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 9.
    このような背景から、Azure に適したアプリケーションと不向きなアプリケーションとがあります。 A. Azureに適しているアプリケーション ・ 一般的なインターネットアプリケーション ・ トラフィックが時期や時間帯により、大きく変動するアプリケーション ・ ASP サービスとして展開しているアプリケーション ・ 自社でインフラを持たないソフトウエア会社が、開発するアプリケーション B. Azure に不向きなアプリケーション ・ セキュリティポリシー上、社外に持ち出すことのできないデータを取り扱っているイントラネットアプリケー ション ・ Azure の SLA では不十分な、ミッションクリティカルシステム ・ SP や QFE などの、ソフトウェアバージョンを固定したいアプリケーション 全てのアプリケーションが、Azure に適しているというわけではないということにご注意ください。このような注意 点を理解した上で、Azure 用のアプリケーションを開発する必要があります。 p.10 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 10.
    第2章 簡単なサンプルを用いた Azure アプリケーションの開発 それでは、Azure 用のアプリケーションを開発していきましょう。 2.1 開発環境の構築 Windows Azure 上で動作するアプリケーションを開発するためには、Windows Azure 用の SDK が必要となりま す。本ガイドでは、Windows Azure SDK 1.2 を用いて開発するため、以下のような環境をセットアップする必要があ ります。なお、以下は全て一般に入手可能な評価版、またはフリーのツールになっています。 種類 製品 OS Windows 7 Enterprise 評価版 開発ツール Visual Studio 2010 Ultimate 試用版 Management Studio Microsoft SQL Server 2008 R2 RTM - Management Studio Express その他 Windows Azure Tools for Microsoft Visual Studio ver1.2 以下の手順で環境をセットアップします。 2.1.1 Windows 7 Enterprise 評価版のインストールと IIS の追加インストール Windows Azure SDK 1.2 に対応する OS は、2010 年 6 月 25 日時点で以下の 4 つとなります。Visual Studio 自体は Windows XP や Windows Server 2003 でも動作しますが、Windows Azure SDK が対応していないた め、Windows XP などでは Window Azure 上で動作するアプリケーションを開発することはできません。 ・ Windows Vista SP 1 以降 ・ Windows 7 ・ Windows Server 2008 ・ Windows Server 2008 R2 今回は「Windows 7 Enterprise 評価版」をインストールします。以下のリンクから ISO ファイルをダウンロード し、ご自分の端末にインストールしてください。 ダウンロードサイト http://technet.microsoft.com/ja-jp/evalcenter/cc442495.aspx Windows Azure SDK を使用するためには、IIS 7.0 以上のインストールと、オプションとして [ASP.NET] と [WCF HTTP Activation] の有効化が必要となります。以下の手順で追加インストールしてください。 ・ コントロールパネルの [プログラムと機能] を開き、左端のペインから [Windows 機能の有効化または無 効化] を選択します ・ ツリービューの [インターネットインフォメーションサービス] をチェックします ・ 「インターネットインフォメーションサービス」を展開し、「ASP.NET」をチェックしてください ・ また、「Microsoft .NET Framework 3.5.1」を展開し、「Windows Communication Foundation HTTP Activation」をクリックしてください p.11 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 11.
    これで IIS の追加インストールは終了となります。 2.1.2 Visual Studio 2010 Ultimate 評価版のインストール 次に開発ツールをインストールします。Windows Azure SDK 1.2 は、Visual Studio 2008 SP1 にも対応して いますが、今回は Visual Studio 2010 Ultimate 試用版を用いて開発します2。以下のリンクからダウンロードし、 インストールしてください。なお、インストール時にはすべてデフォルトのオプションを利用してください。 ダウンロードサイト http://www.microsoft.com/downloads/details.aspx?FamilyID=06a32b1c-80e9-41df-ba0c-79d56cb823f7&displaylang=ja 2.1.3 SQL Server 2008 R2 Management Studio Express のインストール 次に SQL Server Management Studio をインストールします。Management Studio を利用すると、データ ベースサービスを管理できます。以下のリンクよりダウンロードし、インストールしてください。なお、インストール時 にはすべてデフォルトのオプションを利用してください。 ダウンロードサイト http://www.microsoft.com/downloads/details.aspx?familyid=56AD557C-03E6-4369-9C1D-E81B33D8026B&displaylang=ja 2 (参考) Visual Studio 2008 SP1 に Windows Azure SDK 1.2 をインストールして開発する場合、Windows Azure SDK 1.2 のすべ ての機能を使うことができません。このため、Visual Studio に関しては、2010 を利用することを推奨します。 p.12 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 12.
    2.1.4 Windows Azure Tools for Microsoft Visual Studio ver1.2 のインストール 最後に、Visual Studio 用の Windows Azure アプリケーション開発ツールキットをインストールします。今回は、 2010 年 6 月 25 日時点において最新版の、Windows Azure SDK 1.2 を含む、Windows Azure Tools for Microsoft Visual Studio ver 1.2 をインストールします。以下のリンクよりダウンロードし、インストールしてくださ い。 ダウンロードサイト http://www.microsoft.com/downloads/details.aspx?FamilyID=2274a0a8-5d37-4eac-b50a-e197dc340f6f&displaylang=en インストールすると、同時に SDK もインストールされます。そして、Visual Studio で Cloud Service のプロジェ クトテンプレートが追加され、Windows Azure 上で動作するアプリケーションの開発が可能となります。 2.2 ローカルでの Web アプリケーション開発 さて、いよいよ Windows Azure 用のアプリケーションを開発していきます。オンプレミス型のアプリケーションを Azure 上へ移行するというシナリオも想定し、今回は、まずローカルで通常の Web アプリケーションを開発し(本章)、 それを Windows Azure 上へ展開する(次章)、という流れで作業を進めていきます。 2.2.1 Web アプリケーションプロジェクトの作成 まず、新規に.NET Framework 4.0 で [ASP.NET 空の Web アプリケーション] プロジェクトテンプレートから プロジェクトを作成します。[ASP.NET Web アプリケーション] というプロジェクトテンプレートもありますが、こちら ですと、必要のないモジュールまで含まれてしまいます。そのため、今回は Web.config のみを含む [ASP.NET 空の Web アプリケーション] プロジェクトテンプレートから作成します。 今回はサンプルとして、①一般的な Web ページと、②データベース入出力を行う Web ページの 2 つを作成し ます。 p.13 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 13.
    2.2.2 1 つ目の Web ページの作成 まず、Web プロジェクトに [Web フォーム] テンプレートから、1 つ目の Web ページ(WebForm1.aspx)ページ を追加します。そして、以下のような画面とロジックを作成してください。 2.2.3 2 つ目の Web ページの作成 次に、2 つ目の Web ページを作成します。 A. データベースの追加 Web プロジェクトにデータベースファイルを追加します。以下の URL からサンプルデータベースをダウンロ ードし、インストールウィザードに従いインストールしてください。 p.14 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 14.
    ダウンロードサイト http://www.microsoft.com/downloads/details.aspx?FamilyId=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en インストールすると、C ドライブの ”SQL Server 2000 Sample Databases” フォルダに NORTHWND デ ータベースと PUBS データベースの 2 つが作成されます。今回は PUBS データベースを使用しますので、 Web プロジェクトに App_Data フォルダを追加し、さらにその App_Data フォルダに PUBS.MDF ファイルを 追加してください3。 B. テーブルの一覧表示をする Web ページの作成 次に、Web プロジェクトに 2 つ目の Web ページ(WebForm2.aspx)を追加してください。そして、 SqlDataSource と GridView を用いて、authors テーブルを一覧表示するプリケーションを作成してください (サーバーエクスプローラーから authors テーブルをドラッグ&ドロップすると簡単に作成できます)。 3 App_Data フォルダは [追加] → [新しいフォルダ] から”App_Data”を指定して追加できます。pubs.mdf ファイルは App_Data フォル ダにドラックアンドドロップすることで追加できます。 p.15 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 15.
    2.2.4 ASP.NET 開発サーバー上での動作確認 以上の作業が終了したら、Ctrl + F5 キーでアプリケーションを起動し、実行してください。すると、ASP.NET 開 発サーバーが起動し、下図のようにアプリケーションが動作します。 p.16 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 16.
    2.3 クラウドサービスプロジェクトの追加 それでは引き続き、このアプリケーションを Azure 用(Web Role サーバー用)に修正していきます。 2.3.1 クラウドサービスプロジェクトの役割 Window Azure Tools(開発ツールキット)によりインストールされるクラウドサービスプロジェクトは、簡単に言う と、以下の 2 つの作業を行うためのプロジェクトです。 ・ 開発用 PC の中で、開発用ファブリック(Windows Azure エミュレータ)を起動し、その上でアプリケーシ ョンを実行・デバッグする ・ 作成したアプリケーションのファイルを、Windows Azure 本番環境へアップロードできるようにパッケージ 化する 後者は次章で解説しますので、前者についてこれから解説していきます。 2.3.2 クラウドサービスプロジェクトの追加 まず、Visual Studio のソリューションファイルに対して、クラウドサービスプロジェクトを追加します。そして、先 ほど作成した Web アプリケーションプロジェクトを追加し、Web アプリケーションが Windows Azure 上に展開さ れるようにします。具体的には以下のようにします。 A. プロジェクトの追加 ・ ソリューションに対して、[Windows Azure Cloud Service] プロジェクトを追加する。 p.17 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 17.
    次の [New Cloud Service Project] の画面で、何も選択せずに [OK] ボタンをクリックする。  先ほど作成した Web アプリケーションプロジェクトを追加するため、ここでは何も選択しません。 B. Roles へのプロジェクトの追加 次に、追加したクラウドサービスプロジェクトへ、Web Role として、先程作成した Web アプリケーションを追 加します。具体的な追加手順は、以下のようになります。 ・ クラウドサービスプロジェクト内の [Roles] フォルダを右クリックし、[Add] → [Web Role Project in solution…] をクリックする ・ 追加するプロジェクトとしては、先ほど作成した [WebApplication1] プロジェクトを指定する p.18 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 18.
    以上の作業により、[Roles] フォルダの中に、[WebApplication1] プロジェクトが追加されます。これにより、こ の [WebApplication1] プロジェクトが Web ロールサーバー上に展開され、実行されるようになります。 2.3.3 複数の Web アプリケーションを同時に展開する場合 1 つの Web ロールサーバー上には、1 つの Web アプリケーションのみが展開(インストール)可能です。複数 の Web アプリケーションを、同一の Web ロールサーバー上に展開して実行することはできません。複数の Web アプリケーションを同時に展開したい場合には、下図のように、複数の Web ロールサーバーを使用する必要があ ります4。 4 ひとつの Web アプリケーションにまとめ直して、Web Role サーバー上に展開するという方法もあります。 p.19 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 19.
    2.3.4 クラウドサービスプロジェクトの構成設定 次に、各ロール(サーバー)の構成設定を行います。クラウドサービスプロジェクトの [Roles] 下にある各ロール をダブルクリックすると、構成設定画面が現れます。こちらを使うと、以下のような項目が設定できます。 ・ 利用する仮想マシン(VM)のサイズ(仮想マシンに割り当てる CPU やメモリリソースのサイズ) ・ 利用する仮想マシンのインスタンス数 ・ CAS(Code Access Security)の設定 ・ 利用する通信の種類(エンドポイントの定義) 構成設定画面から構成設定を修正すると、その設定は “ServiceConfiguration.cscfg” と “ServiceDefinition.csdef” の 2 つの XML ファイルに反映されます5。 5 直接 XML ファイルを修正することもできます。 p.20 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 20.
    ここでは、もっとも簡単な設定として、[WebApplication1] プロジェクトを動作させる仮想マシンを、3 つに変更 しておきます6。 2.4 開発用ファブリック上での動作確認 ここまで設定が終了したら、いよいよ Windows Azure エミュレータ上で、このアプリケーションを動作させてみましょ う。 2.4.1 動作確認 [CloudService1] プロジェクトをスタートアッププロジェクトに変更し、Ctrl + F5 キーで実行します。その際、サ ーバーエクスプローラーが PUBS.MDF を握っていると、エラーが発生するため、デタッチしてから実行してくださ い。すると、タスクトレイ上に “Development Fabric” と呼ばれる Azure エミュレータ環境が起動し、この中でア プリケーションが起動します。 一見すると、先ほどと変わりなく動作しているように見えますが、実際にはかなり異なる環境で Web アプリケーシ ョンが動作しています。これについて以下に解説します。 6 (注意)実際の運用環境に配置する場合には、インスタンス数や仮想マシンのサイズをむやみに引き上げないようにしてください。むやみ に引き上げると、その分だけ課金が増えることになります。 p.21 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 21.
    2.4.2 開発用ファブリックのランタイム構成 最終的な運用環境では、このアプリケーションは、ファブリックコントローラ 7によってコンピュートサービスのイン フラ上に展開され、複数の仮想マシン(VM、Virtual Machine)が起動します8。 通常、IIS 7 ではワーカープロセスとして w3wp.exe が利用されます。しかし、コンピュートサービスでは、専用 のワーカープロセスとして WaWebHost.exe というものが用意されており、アプリケーションを展開すると、この WaWebHost.exe が起動します。この WaWebHost.exe には、以下のような特徴があります。 ・ IIS 7 のモジュールをロードして動作するため、内部動作は w3wp.exe とほぼ同じ ・ 内部では、ASP.NET ランタイムが統合パイプラインモードで動作 運用環境では、複数の仮想マシンが展開され、1 仮想マシン(サーバ)あたり 1 ワーカープロセスが起動します。 これに対して、開発環境(開発用ファブリック)では、運用環境で利用される VM と同じ数のホストプロセス (WaWebHost.exe)が、ローカルコンピューター内で起動します。これにより、運用環境をエミュレーションするよう になっています。 7 コンピュートサービス全体を管理している制御コンピュータ群のことです。 8 わかりやすくするため、下図では各サーバーを物理マシンとしてイラストを描いていますが、実際には仮想マシンとして Azure 環境に展 開されます。 p.22 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 22.
    2.4.3 運用環境と比較した開発環境(開発用ファブリック)の特徴 この開発環境におけるエミュレーション動作を運用環境の動作と比較すると、以下のような特徴があります。 A. ワーカープロセス ・ 開発用ファブリックでは、運用環境と同一のワーカープロセスが複数個使用されます。  開発用ファブリックでは、1 つのコンピュータ内で、複数のロール、複数の仮想マシンをまとめて エミュレーションする必要があります。  このため、開発用マシンの中では、複数の WaWebHost.exe(Worker ロールを使っている場合 には WaWorkerHost.exe)が起動する形になります。 ・ ワーカープロセスは比較的軽量ですが、沢山の VM を利用すれば、それなりにマシンリソース(特にメ モリ)を消費します。  そのため、開発環境ではあまり大量のインスタンスを起動しないよう、ご注意ください。 ・ 開発環境と運用環境で利用されるワーカープロセスはほぼ同じですが、開発環境では 32 ビット版が、 運用環境では 64 ビット版が利用されます。  .NET のみでアプリケーションを開発している際には問題になりませんが、Unmanaged Code を 利用している場合にはご注意ください。 B. ロードバランサ ・ 運用環境と同様、クライアントブラウザからのリクエストをロードバランサがルーティングします。  ワーカープロセスは、クライアントブラウザからのリクエストを直接受け付けるわけではありません。 いったん、ロードバランサのエミュレータである DFloadbalancer.exe がリクエストを受け付け、そ れが各ワーカープロセスにルーティングされる、という仕組みになっています。  これは運用環境でも同様で、リクエストは一旦ロードバランサが受け付け、それが各マシンにル ーティングされる形になります。 p.23 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 23.
    C. ポート番号 ・ 開発環境では、運用環境とはロードバランサからのリクエストのルーティング方法が異なります。  上図を見てわかる通り、運用環境では、各 VM マシンに対して、プライベート IP アドレスと、乱数 によるポートが定められ、フロントエンドのロードバランサからのリクエストがルーティングされま す。  これに対して開発用ファブリック(開発環境)では、各ワーカープロセスに対して乱数によるポート が定められ、フロントエンドのロードバランサからリクエストがルーティングされます。 ・ ポート番号は、運用環境で利用する予定のポート番号とはずれてしまうことがあるのでご注意ください。  例えば、このサンプルアプリケーションを動作させると、ブラウザはポート番号 81 上でこのアプリ ケーションを呼び出します。  これは、開発マシン上では、すでにポート番号 80 が IIS 7.5 にアサインされているため、使用で きないからです。  このため、DFloadbalancer.exe は 80 の代わりに 81(次の空きポート)を利用し、これをリスンす る、という形になっています。 p.24 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 24.
    さて、このままだと、このアプリケーションが実際にどのワーカープロセスで処理されているのかがわかりませ ん。そこで、このアプリケーションの WebForm1.aspx.cs ファイルに以下のような修正を加えてください。 ・ Microsoft.WindowsAzure.ServiceRuntime への参照設定の追加 ・ using キーワードの追加(using Microsoft.WindowsAzure.ServiceRuntime; ) ・ Page_Load() メソッド内への、インスタンス番号を解決して表示するロジックの追加(Label3.Text = RoleEnvironment.CurrentRoleInstance.Id;) 以上を行った上で、再度 Ctrl + F5 キーにより実行すると、Web 画面上にサーバーID が表示されるように なります。この状態で、リロードやポストバックなどを繰り返していると、ロードバランス機能により、複数のサー バー(ワーカプロセス)に分散処理されることがわかります9。 9 リロードやポストバックだけでは別サーバインスタンスに振りなおされないケースもあります。その場合には、別の Web ブラウザを起動する などしてご確認ください。 p.25 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 25.
    2.4.4 開発用ファブリックへの配置の仕組み では次に、この開発用ファブリックの動作の仕組みについて、もう尐し詳しく解説します。まず、タスクトレイの [Windows Azure Simulation Environment] のアイコンを右クリックし、メニューから [Show Development Fabric UI] を選択してください。これにより、開発用ファブリックの UI が表示されます。 前述したように、Visual Studio からクラウドサービスプロジェクトを実行すると、開発用ファブリックが動作し、そ の上でアプリケーションが動作します。この動作については、以下の点を押さえておくとよいでしょう。 A. 開発用ファブリックへのアプリケーション展開 ・ Visual Studio からクラウドプロジェクトを実行すると、開発用ファブリック上にアプリケーションが展開さ れます。この作業を「配置」と呼びます。 ・ 配置の際には、一意の配置 ID(Deployment ID)が採番されるようになっています。ちなみに配置 ID は、開発環境と運用環境では全くフォーマットが異なります。  開発環境 → “deployment(21)” のように、一意連番が振られる。  運用環境 → “6f4d99b8b339413ea3dac24ce71929af” のように、ランダムな GUID 値が振 られる B. ロールインスタンスごとのフォルダ分け ・ 開発環境では、ローカルマシンの特殊なフォルダにアプリケーションが展開されます。  例えば上記のアプリケーションの場合、”WebApplication1” ロールのインスタンス#0 のアプリ p.26 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 26.
    ー シ ョ ン は 、 ” C:¥Users¥nakama¥AppData¥Local¥dftmp¥s0¥deployment(21)¥res¥deployment(2 1).CloudService1.WebApplication1.0” というパスの下側に、アプリケーションが展開されて 動作しています(このような動作は、ASP.NET 開発サーバーによる動作とは全く異なります)。  また、このフォルダの下側には、実際に利用する Web アプリケーションの他に、ASP.NET テン ポラリファイル、IIS ログ、Diagnostic Monitor によるログファイル、IIS 圧縮キャッシュなど 様々なデータが、ロールインスタンス(=運用環境における仮想マシン)ごとに保存されるように なっています。(このフォルダは、下図のように Development Fabric UI から選択すると、簡単 に開くことができます。) C. ワーカープロセスのモニタリング ・ 各ワーカープロセスの状況を、上図のツールからモニタできます。  このツールは、コンソール出力をモニタできるようになっているので、Diagnostic トレースなどを 簡単に見たりすることができるようになっています。また、サービスの停止や、配置したアプリケー ションの除去などもこのツール上からできるようになっています。  ただし、このツールから得られる各サーバ(各ロールインスタンス)の情報については、非常に限 られています。また、運用環境ではこのモニタツールを使用できません。例えば、CPU 稼働率 やメモリ利用率の監視、IIS ログの確認などといった内容については、このツールからでは確認 できません。これらに関しては、次に述べる Diagnostic Monitor による監視が必要になりま す。 以上で、基本的な開発用ファブリックの利用方法に関しては終わりです。引き続き、これらのサーバーをモニタリン グする機能を追加していきます。 2.5 Diagnostic Monitor によるアプリケーション監視 サーバーをモニタリングするためのツールである、Diagnostic Monitor を使用したアプリケーション監視の方法に ついて説明します。 p.27 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 27.
    2.5.1 Diagnostic Monitor とは コンピュートサービス内の各仮想マシンには、Diagnostic Monitor ランタイムと呼ばれるサービスがインストー ルされています。このサービスは、イベントログやパフォーマンスログ、フラットファイルなどを定期的に監視・デー タ収集し、ストレージサービスへと転送するようになっています。このサービスが存在するため、各アプリケーション からは直接ストレージサービスへデータを書き込む必要はなく、従来通り、イベントログやパフォーマンスログなど に、データを出力しているだけで済むようになっています。 Diagnostic Monitor ランタイムでは、様々なログデータを転送できるようになっていると説明しましたが、実際 には尐し注意が必要です。Diagnostic Monitor ランタイムのドキュメント類を参照すると、以下のようなログファイ ルが転送できると示されています。 しかしこの転送は、転送先が Table ストレージになっているものと、Blob ストレージになっているものとで、以下 のように仕組みが大きく異なります。このため、注意が必要です。 転送先のストレージの種類 転送の仕組み Table ストレージ ログファイルは、構造を持ったテーブルデータとして、特定の Table ストレージに転送・追記され る。 Blob ストレージ ログファイルは、バイナリファイルとして Blob ストレージに転送・保存される。 p.28 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 28.
    つまり、トレースログやパフォーマンスカウンタのデータは、スキーマを持ったデータとして Table ストレージに 分解・整理・転送されますが、IIS ログファイルや FREB ログファイルなどは、ただのバイナリファイルとして Blob ストレージに転送される、という形になっています。このため、データ取得後のデータの取り出し方などが異なって きますので注意してください。詳細は後程解説します。 さて、Diagnostic Monitor を使うためには、以下の作業が必要になります。 ・ Azure ストレージ側の事前準備(2.5.2) ・ 収集するログファイルに関する設定方法(2.5.3) ・ ログファイルの確認方法(2.5.4) 以下に、これらについて順に解説していきます。 2.5.2 Azure ストレージ側の事前準備 まず、Azure ストレージ側に、データを格納するための Blob コンテナや Table ストレージを作成します。データ 転送先となる Blob や Table の名称の多くは固定的に定められていますので、以下のような名称でコンテナやテ ーブルを作成します。 具体的な作業手順は、以下のようになります。 A. 開発用ストレージサービスの起動 タスクトレイの [Windows Azure Simulation Environment] を右クリックし、[Start Development Storage service] を選択して開発用ストレージサービスを起動します10。 10 (参考) この開発用ストレージサービスは、内部的には SQL Server Express Edition のファイルアタッチデータベースを利用してい るため、SQL Server Express Edition がインストールされていないとうまく起動しません。また、開発用ストレージにゴミがたまってしまっ た場合には、”Show Development Storage UI” から Reset ボタンを押下すると、簡単に初期状態(空の状態)に戻すことができま す。 p.29 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 29.
    B. Blob コンテナやテーブルの作成 次に、コンテナやテーブルを作成します。作成する際は、以下の 2 通りの方法があります。 ・ ツールを使って、手作業でコンテナやテーブルを作成していく方法 ・ コンソールアプリケーションなどを使って、コンテナやテーブルを作成する方法 どちらの方法でも構いませんが、コンソールアプリケーションを使用すると、以下のような簡単なコードで作 成することが可能です。 以下 2 つの、参照の追加が必要です。 ・ Microsoft.WindowsAzure.ServiceRuntime.dll ・ Microsoft.WindowsAzure.StorageClient.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // 開発環境の場合(運用環境の場合には適宜コードを修正) CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount; // 作成するコンテナ、テーブル、キューの名称一覧 string[] containerNamesToCreate = new string[] { "wad-iis-failedreqlogfiles", "wad-iis-logfiles", "wad-crash-dumps" p.30 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 30.
    }; string[] tableNamesToCreate = new string[] { "WADLogsTable", "WADDiagnosticInfrastructureLogsTable", "WADPerformanceCountersTable", "WADWindowsEventLogsTable", "WADDirectoriesTable" }; string[] queueNamesToCreate = new string[] { }; // コンテナ、テーブル、キューを作成 CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); foreach (string containerName in containerNamesToCreate) { CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName); bool created = blobContainer.CreateIfNotExist(); if (created) Console.WriteLine("{0} : コンテナを作成しました。", containerName); } CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); foreach (string tableName in tableNamesToCreate) { bool result = tableClient.CreateTableIfNotExist(tableName); if (result) Console.WriteLine("{0} : テーブルを作成しました。", tableName); } CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); foreach (string queueName in queueNamesToCreate) { CloudQueue queue = queueClient.GetQueueReference(queueName); bool result = queue.CreateIfNotExist(); if (result) Console.WriteLine("{0} : キューを初期化しました。", queueName); } } } } ストレージの準備ができたら、今度は Web アプリケーションに、ログデータ収集と自動転送を行わせるための設 定コードを追加します。 2.5.3 収集するログファイルに関する設定方法 Diagnostic Monitor による監視を行うためには、以下 2 つの設定が必要です。 ・ データをローカルマシン内で収集させるための設定 ・ それを Azure ストレージに自動転送させるための設定 収集するログの種類ごとに、設定可能な項目が尐しずつ異なりますが、簡単に書くと、以下のような項目が設定 できます。 p.31 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 31.
    設定を行うためには、以下の作業を行います。 ・ Web アプリケーションに WebRole.cs という名前のファイルを追加する ・ 参照設定として、Microsoft.WindowsAzure.ServiceRuntime, StorageClient, Diagnostics の 3 つの DLL を追加する ・ using キーワードで、Microsoft.WindowsAzure, StorageClient, ServiceRuntime, Diagnostics の 4 つの名前空間を導入する ・ WebRole.cs クラスを RoleEntryPoint クラスの派生クラスにする ・ OnStart() メソッドに Diagnostic Monitor の初期化処理を実装する OnStart() メソッドについては、以下をご参照ください。 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.WindowsAzure.ServiceRuntime; using Microsoft.WindowsAzure.Diagnostics; using Microsoft.WindowsAzure.StorageClient; using Microsoft.WindowsAzure; namespace WebApplication1 { public class WebRole : RoleEntryPoint { public override bool OnStart() { // 構成設定が変更されたらロールインスタンスをリスタートする RoleEnvironment.Changing += (sender, e) => { if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) e.Cancel = true; }; DiagnosticMonitorConfiguration dmc = DiagnosticMonitor.GetDefaultInitialConfiguration(); // トレースログ (※ web.config への設定も必要) dmc.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(2); dmc.Logs.ScheduledTransferLogLevelFilter = LogLevel.Warning; // Diagnostic Monitor ログ dmc.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(2); dmc.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Critical; // イベントログ dmc.WindowsEventLog.DataSources.Add("Application!*"); dmc.WindowsEventLog.DataSources.Add("System!*"); dmc.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(2); p.32 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 32.
    dmc.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose; // パフォーマンスカウンタ dmc.PerformanceCounters.DataSources.Add( new PerformanceCounterConfiguration() { CounterSpecifier = @"Processor(_Total)% Processor Time", SampleRate = TimeSpan.FromSeconds(60) }); dmc.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(2); // カスタムファイルログ (※ IIS ログ, FREB ログ, クラッシュダンプは設定済み) dmc.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1); // Diagnostic Monitor をスタートさせる DiagnosticMonitor.Start("DiagnosticsConnectionString", dmc); return base.OnStart(); } } } こちらのコードは、基本的に以下 2 つの条件を指定しています。 ・ データ収集に関する条件 ・ データ自動転送に関する条件 大まかに言うと、デ ー タ転送に関する条 件 を .ScheduledTransferPeriod プ ロ パ テ ィ や.ScheduledTransferLogLevelFiler プロパティにより設定し、その他の.DataSource プロパティなどでデータ 収集条件を設定します。ここでは 2 分間隔でデータ転送する形にしていますが、実際のシステムでは転送間隔は もう尐し長くてもよいでしょう11。 さて、上記のサンプルコードについては、いくつかの注意点があります。要点を説明すると、以下の通りです。 A. .SetConfigurationSettingPublisher() メソッド コードの先頭に書かれている、.SetConfigurationSettingPublisher() メソッドは、サービス構成設定の変 更を動的に追いかけるためのコードです。(しかし、ここではまだ意味が分からないと思います。現段階では 「呪文」だと思っておいていただければ結構です。) B. トレースログ 「 ト レ ー ス ロ グ 」 と 書 か れ て い る の は 、 System.Diagnostics ト レ ー ス ( System.Diagnostics.Trace. WriteLine() な ど の 命 令 に よ り 出 力 さ れ る Win32 ト レ ー ス ロ グ ) で すが 、 こ の 機能を 使 う た め に は 、 web.config ファイルに、以下の記述を追加する必要があります。このコードを追加することにより、Win32 トレ ースログの情報が、Azure の Diagnostic Monitor ランタイムの方に転送され、記録されるようになります。 <?xml version="1.0"?> <configuration> 11 (参考) データの転送間隔については、むやみに短くしないことをおすすめします。これは、転送間隔をむやみに短くすると、それだけ システムに負荷がかかってしまうためです。「仮想マシンがクラッシュするとログデータが吹き飛ぶので、極力転送間隔を短くしておきた い」と考える人もいると思います。しかし、通常のオンプレミスのシステムでも、ローカルマシンに出力されたファイルを監視マシンに吸い 上げる場合、ある程度の時間間隔を置いてチェックおよび吸出しを行っているはずです。それと同様に、あまり短く設定しすぎないことを 推奨します。 p.33 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 33.
    - - -(前略) - - - <system.diagnostics> <trace> <listeners> <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics" /> </listeners> </trace> </system.diagnostics> - - - (後略) - - - </configuration> C. Diagnostic Monitor ログ 「Diagnostic Monitor ログ」とは、Diagnostic Monitor ランタイム自身から発生するログです。このログに 対しては必ずフィルタリング条件を設定してください(尐なくとも Warning 以上)。 Verbose レベルでデータ 収集を行うと、大量(数秒間に数十エントリ)のデータが出力されてしまいます。基本的には Critical などに 設定しておけば十分でしょう。 D. Diagnostic Monitor ランタイムの起動 最後の DiagnosticMonitor.Start() メソッドによって Diagnostic Monitor ランタイムを起動しています。そ して、このメソッドの第 1 パラメータ(ここでは “DiagnosticsConnectionString”)で、転送先となる Azure スト レージへの接続情報を設定しています。この接続情報は、クラウドサービスプロジェクト側の “Settings” セク ションに設定されており、既定では “UseDevelopmentStorage=true” (開発ストレージにログ情報を転送 する)という設定になっています。(運用環境に持っていく場合には、この設定値を、本番環境の Windows Azure ストレージサービスへの接続文字列に書き換えます。) 以上で設定は完了です。この状態で、アプリケーションを実行してください。そして、これをしばらく使い、その後、 しばらく放置(5 分程度)してみてください。これにより、ログデータが適宜 Azure ストレージに転送されているはず です。 2.5.4 ログファイルの確認方法 最後に、転送されたログファイルを確認してみます。一番手っ取り早い方法は、各種のツール(Windows Azure MMC など)を使って Azure ストレージに接続し、その中を確認する方法です。しかしながら、以下のよう なログファイルダウンロード用のコンソールアプリケーションなどを準備しておく方法も便利です。ここでは、Azure p.34 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 34.
    ストレージに保存された IIS のログファイルを、ダウンロードするためのコードを以下に示します。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; using System.IO; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { // Diagnostic Monitor のログデータ一括転送 // 開発環境の場合(運用環境の場合には適宜コードを修正) CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount; // 転送先となるローカルパス string localRootPath = @"C:temp" + DateTime.UtcNow.ToString("yyyyMMdd_HHmmss"); bool willFileDelete = true; // 転送したファイルを消すか否か // ① Blob データのダウンロード CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); foreach (string containerName in new string[] { "wad-control-container", "wad-iis-failedreqlogfiles", "wad-iis-logfiles", "wad-crash-dumps" }) { CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName); var blobs = blobContainer.ListBlobs(new BlobRequestOptions() { UseFlatBlobListing = true }); foreach (var blob in blobs) { CloudBlob cb = blobContainer.GetBlobReference(blob.Uri.AbsoluteUri); string localFilePath = localRootPath + @"Blob" + blob.Uri.PathAndQuery.Replace('/', ''); Console.WriteLine(blob.Uri.AbsoluteUri + " → " + localFilePath); Directory.CreateDirectory(localFilePath.Substring(0, localFilePath.LastIndexOf(''))); cb.DownloadToFile(localFilePath); if (willFileDelete) cb.Delete(); } } } } } このコンソールアプリケーションを実行すると、Azure ストレージに蓄積された IIS ログを、ローカルマシンにダウ ンロードすることができるようになります。ダウンロードしたログを、Excel や各種のログ解析ツールなどに読み込ま せると、分析することができます。 p.35 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 35.
    ここまでコンピュートサービスの監視方法について解説してきました。これらの説明からわかるように、現時点で は、コンピュートサービスの監視 API は、比較的剥き出しのような状態で、残念ながら、使いやすいツール類が充 実しているとは言い難い状況です。3rdparty 製ツールとしては Cerebrata 社の Azure Diagnostics Manager などのツールが出てきていますが、コンピュートサービスの監視については、今しばらくは手作業で行う必要があ ります。ただ、Diagnostic Monitor ランタイムの基本動作やその考え方については、今のうちにきっちり理解して おいた方がいいため、一度触ってみることを推奨します。 p.36 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 36.
    第3章 Windows Azure 運用環境への展開 いよいよ本章では、作成した Web アプリケーションを Azure 上へ展開していきます。 まず、展開作業に入る前の Azure を使用するための準備として以下 2 つを行います。 ・ Windows Azure サービスの購入(3.1) ・ 各種サービスの初期化(3.2) Azure を使用する準備が整ったら、次にデータベース、ストレージ、アプリケーションの順番で Azure 上(Staging 環境)へ移行していきます。 ・ SQL Azure データベースサービスへの移行(3.3) ・ Windows Azure ストレージサービスへの移行(3.4) ・ Windows Azure コンピュートサービスへの移行(3.5) そしてアプリケーションの移行が完了したら、最後に本番(Production)環境に展開します(3.6)。 それでは、Windows Azure サービスの購入手順から説明していきます。 3.1 Windows Azure の購入 2010 年 6 月 25 日現在 、Windows Azure Platform サービスでは、初期特別提供プランとして、Azure の 25 時間分の無償使用を含む「Windows Azure Platform 導入特別プラン」が提供されています。今回はこちらを利用 して検証作業を行います。なお、このプランは範囲内での試用は無償ですが、無償枠を超えてサービスを利用すると 従量課金のレートで課金が発生しますのでご注意ください。 Windows Azure Platform 導入特別プラン http://www.microsoft.com/japan/windowsazure/offers/popup.aspx?lang=ja&locale=ja-JP&offer=MS-AZR-0001P 下記手順では、クレジットカード払いによる購入手順を説明します。 ・ Step 1 - Microsoft Online Services カスタマー ポータル プロファイル登録 ・ Step 2 - Microsoft Online Services カスタマー ポータルから Azure の購買 ・ Step 3 - Azure のアクティブ化 3.1.1 Step 1 - Microsoft Online Services カスタマー ポータル プロファイル登録 実際の Windows Azure の購入は、Microsoft Online Services カスタマーポータルサイト(略称:MOCP)か ら行います。最初の Step では、Microsoft Online Services カスタマー ポータルを使用するためのプロファイル 登録を行います。 p.37 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 37.
    A. Microsoft OnlineServices カスタマーポータルへのログイン ・ Internet Explorer で下記 Microsoft Online Services カスタマーポータルにアクセスします。 Microsoft Online Services カスタマーポータル https://mocp.microsoftonline.com/site/default.aspx ・ [サインイン] をクリックすると、Windows Live ID でのログイン画面が表示されますので、Windows Live ID アカウント名 (メール アドレス) とパスワードを入力し、 [Sign in] ボタンをクリックしてくださ い。 B. プロファイルの登録 ・ ログインに成功すると 新規プロファイル登録開始画面が表示されるので、必要な情報を入力します。  既にプロファイル登録済みの場合は、Step 2 にお進みください。 ・ 下記の確認画面が表示されたら、プロファイル情報入力は完了です。 [閉じる] ボタンをクリックしま す。 p.38 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 38.
    最初のプロファイル登録が終わると、カスタマーポータルの画面が表示されます。 3.1.2 Step 2 - Microsoft Online Services カスタマー ポータルから Azure の購買 A. 初期特別提供プランの選択 ・ 画面中央の利用可能なサービスから [Windows Azure Platform] の利用可能なサービスの表示リン クをクリックします。  すると、現在利用可能な Azure の購買メニューが表示されます。 p.39 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 39.
    ここでは [初期特別提供プラン] を選択し、 [今すぐ購入] をクリックします。 ・ 購入の同意事項を確認してチェックボックスを入れ、 [購入手続きへ進む] ボタンをクリックします。 p.40 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 40.
    B. クレジットカードの登録と注文の確定 ・ 支払い方法の入力画面からクレジットカードの情報を登録します12。 ・ 新しいクレジット カードが選択されていることを確認して [次へ] ボタンをクリックします。 12 このプランは、無償範囲の利用であれば課金が発生しません。しかし、無償範囲枠を超えて利用すると、登録したクレジットカードに課 金が発生します。このため、無償範囲に注意しながら検証作業を進めてください。 p.41 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 41.
    必要事項を入力したら、 [次へ] ボタンをクリックします。  すると、オンライン サブスクリプション契約が表示されます。 ・ オンラインサブスクリプション契約をご確認いただき、問題がなければ [次へ] ボタンをクリックします。 以下の 2 点に注意してください。  氏名の署名欄には、上に記載されている文字列の通り入力してください  姓と名の間に半角スペースが必要となりますので注意してください ・ 注文の確認および確定画面が表示されます。内容を確認して [注文の確定] ボタンをクリックします。 p.42 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 42.
    確認画面が表示されれば支払い情報の登録は完了です。この画面から引き続き Azure のアクティブ化を 行います。 3.1.3 Step 3 - Azure のアクティブ化 続いて、購入した権利で Azure を利用するための手続きであるアクティブ化を行います。 A. Azure のアクティブ化 ・ 注文完了画面でアクティブ化ボタンをクリックして、サブスクリプション操作画面を表示します。 p.43 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 43.
    [アクション] のリストから [今すぐアクティブ化] を選択し、[移動] ボタンをクリックします。 ・ サービスのサブスクリプション名を入力し、[次へ] ボタンをクリックします。  サブスクリプション名は Azure で最初のプロジェクトの名称にも使用されます。 p.44 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 44.
    続いてサービス管理者の情報を入力します。  すでに入力しているサービス購買の連絡先情報をコピーすることも可能です。  前述のサービス購買者と、ここで解説するサービス管理者との違いは以下の通りです。  企業で利用する場合は、購入手続きを行う部門と、実際にプロジェクトで利用する部門や 担当者が異なる場合がよくあります。  このような場合に備えて、それぞれ個別に指定ができるようになっています。  なお、Azure では、サービス購買者として登録した ユーザーを「アカウントオーナー (Account Owner)」、サービス管理者として登録したユーザーを「サービスアドミニストレ ーター(Service Administrator)」と呼んで区別しています。  アカウントオーナーとサービスアドミニストレータは、後で示す Windows Azure のポータル画面 上では区別して表示されます。 p.45 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 45.
    概要画面で入力情報を確認したら、[完了] ボタンをクリックします。 確認完了画面が表示されたら手続きは終了です。 B. 作成されたプロジェクトの確認 完了手続きを終えると、登録に利用した Windows Live ID のアカウント宛に完了メールが届きます。これ で Windows Azure デベロッパー ポータルにアクセスできるようになります。 ・ メールに記載されたデベロッパー ポータルのリンクから [Windows Azure] をクリックして、Windows Azure デベロッパー ポータルにアクセスします(または、https://windows.azure.com/ にアクセスし p.46 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 46.
    ます)。  新たに先ほど作成したプロジェクトが追加されていることをご確認ください13。 以上で、Azure の購入とアクティブ化のプロセスが終了となります。 3.2 各種サービスの初期設定と Windows Azure API Certificate の登録 Azure の各サービスを利用するためには、各々のサービスで初期設定を行う必要があります。また、Azure をロー カルのツールから遠隔操作するためには、API 証明書(Windows Azure API Certificate)の登録が必要です。 まず各種サービスの初期設定からご説明します。 3.2.1 SQL Azure データベースサービスの初期設定 以下の手順で、データベースサービスを初期設定します A. SQL Azure プロジェクトの作成 ・ まず、ポータルサイト(https://sql.azure.com/)にアクセスします。  https://windows.azure.com/ のサイトの左側タブの中から [SQL Azure] の項目をクリックし ても構いません。 ・ 使用条件を読み、 [Accept] ボタンをクリックします。 13 下図では、PDC08CTP というプロジェクトが存在しますが、これはβ版の頃から利用していた場合のみ表示されます。現在、新規にこの 作業を行った場合には、作成したプロジェクトひとつだけが表示されます。 p.47 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 47.
    データベースサービスの管理者アカウントのアカウント名とパスワードを入力し、データベースサーバー の場所を選択します。  ここでは、場所に関しては [Southeast Asia] を選択することを推奨します。 ・ [Create Server] ボタンをクリックしサーバーを作成します。 p.48 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 48.
    B. SQL Azureサーバー名の確認 SQL Azure サ ー バ ー の サ ー バ ー 名 が 自 動 作 成 さ れ ま す 。 ( サ ー バ ー 名 の 変 更 は で き ま せ ん ) Management Studio からデータベースサービスに接続する際に必要になりますので、どこかにメモを残して おいてください。 C. ファイアウォール設定の緩和 自分のローカル端末の Management Studio から SQL Azure 上のデータベースを管理するためには、 TCP/IP 1433 ポートでの直結を行う必要があります。以下のようなファイアウォール設定の緩和を行ってくださ い。 p.49 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 49.
    ファイアウォール設定の緩和を行う場所 緩和方法 ローカル側 会社内からアクセスする場合には、貴社の IT 部門にポート 1433(外部発信)を 開けてもらいます14 SQL Azure データベース側 SQL Azure データベースサービス側については、管理サイト (https://sql.azure.com/ )の管理画面から、ファイアウォール設定の緩和を行 います15 データベースサービス側のファイアウォール設定の緩和については、管理サイト (https://sql.azure.com/ )の管理画面から、以下の手順で行います。 ・ 管理サイトから先ほど作成したプロジェクトを選択し、Server Administration の画面を開きます ・ [Firewall Settings] タブを選択し Microsoft Service からのアクセスの許可ルールの有効化チェック ボックスへのチェックと、[Add Rules] ボタンから自分の端末の IP を許可するルールを追加します D. データベースの作成 次に、SQL Azure ポータルサイトからデータベースを作成します。作成時には、データベース名と最大容 量を指定する必要があります。ここでは以下のように作成してください。 ・ データベース名: PUBS ・ エディション: Web ・ サイズ: 1GB 14 実際のシステム開発では、自社側のポート 1433 を開けることが難しいことが多いと思います。このような場合には、(このあとにご説明 する Management Studio での作業も含めて)一時的に自宅から作業するなどの工夫を行ってください。なお将来的には、SQL Server を Web 上から管理できるツールである、SQL Server Web Manager がリリースされる予定です。 15 SQL Azure 側のファイアウォールについては、設定変更の反映に約 5 分ほどの時間がかかります。すぐに設定が反映されなくても、 しばらく待っていただければ設定が反映されます。 p.50 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 50.
    データベース作成後、[Connection Strings] ボタンを押すと、当該データベースにアプリケーションから接 続するのに必要な、接続文字列を確認することができます。 3.2.2 Windows Azure ストレージサービスの初期設定 次にストレージサービスの初期設定を行います。 p.51 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 51.
    A. ストレージサービスの作成 ・ まず、Azure ポータルサイト(https://windows.azure.com/)へアクセスし、 [Windows Azure] リンク をクリックしてください。 ・ 次に [New Service] をクリックし、作成するサービスとして [Storage Account] を選択します。 ・ [Service Label] には任意の名前を付与してください。  ここで指定したラベルはポータルサイト上でのみ利用されるラベルとなるので、適当に付与して 構いません。 [Next] ボタンをクリックしてください。 p.52 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 52.
    [Storage Account] の画面で、アカウント名を付与し、アフィニティグループ16を作成してください。  ここで付与するアカウント名は、このストレージにアクセスする際の URL となるので、わかりやす い名前を付与してください。 ・ アカウント名を付与したら [Create] ボタンをクリックし、ストレージサービスを作成してください。 ・ また、ストレージサービスを作成するデータセンタについては、必ず Southeast など、データベースサ ービスを作成したデータセンタと同じ場所を選択してください17。  異なるデータセンタを選択してしまうと、データセンタまたがりの通信で、課金が発生することにな ります。 16 アフィニティグループは同じグループ内のサービス(コンピュートサービスとストレージサービスなど)を同一センタ内の極力近くに配置す るためのものです。近い場所に配置することを保証するものではありませんが、極力近い場所に配置するよう努力します。 17 なお、データセンタを指定する場合は、地域(Region)を指定する方法と、サブ地域(SubRegion)を指定する方法の 2 つがあります。例 えば、地域として「アジア」を選択した場合、実際にサービスが配置される場所は、「東南アジア(シンガポール)」「東アジア(香港)」のど ちらかになります(どちらになるかは不明)。一方、サブ地域である「東南アジア」「東アジア」を選択すると、そのサブ地域にあるデータセ ンタにサービスが配置されます。サブ地域まで指定すると、確実にそのデータセンタに配置することができますので、こちらの方法での指 定を推奨します。 p.53 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 53.
    B. Key の確認 以上の作業を行うと、ストレージサービスにアクセスするためのキーが 2 つ発行されます。 [Primary Key] と [Secondary Key] 18 と書かれていますが、実際にはこの 2 種類のキーはどちらを使っても同じようにスト レージにアクセスできます。 ・ どちらか好きな方のキーをメモしておいてください。 18 Primary Key と Secondary Key については、様々な使い分けが考えられます。例えば、① 片方の鍵は Web アプリケーション内 に組み込む鍵とし、もう片方の鍵は管理者がツールから使う鍵とする、といった使い分けや、② どちらか一方を普段使いのキーにしてお き、もう片方をスペアキーとしておく(もし普段使いのキーが盗まれた場合には、こちらの鍵のみを再生成し、スペアキーの方については そのままにしておく)、などの使い方が考えられます。 p.54 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 54.
    3.2.3 Windows Azure コンピュートサービスの初期設定 次にコンピュートサービスの初期設定を行います。 A. Hosted Services の作成 ・ ス トレ ー ジサー ビスと 同 様 に、まずポ ータルサイト( https://windows.azure.com/ ) に アク セス し、 [Windows Azure] リンクをクリックしてください。 ・ 次に、[New Service] リンクから [Hosted Services] を選択します。 p.55 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 55.
    [Service Label] には任意の名前を付与してください。  ここで指定したラベルはポータルサイト上でのみ利用されるラベルとなるので、適当に付与して 構いません。 ・ ラベルを付与したら、 [Next] ボタンをクリックしてください。 p.56 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 56.
    次に、サービスの URL を決定するとともに、サービスを配置するデータセンタを選択します。 ・ このとき、ストレージサービス作成時に作成したデータセンタと、アフィニティグループ名を指定します。 p.57 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 57.
    B. 作成されたサービスの確認 以上の作業により、コンピュートサービスが作成されます。サービスを作成すると、アプリケーションをアップ ロードするための 2 つの環境が用意されます。ひとつは “Production” 環境(運用環境)、もうひとつが “Staging” 環境(最終動作確認環境)です。 3.2.4 API Certificate の登録 Azure では、「Windows Azure Service Management API」(以下 Management API)という管理用の API が公開されています。この Management API は、HTTP-REST 方式によって呼び出すことが可能な Web サー ビスとして提供されています。これを使用すると、コンピュートサービスやストレージサービスをローカルのツールか ら遠隔操作19することが可能です。 しかし、この API はインターネットに晒されているため、セキュリティ上の安全性を保つ必要があります。このため、 この API を使用するには、事前に Azure ポータルサイトから証明書をアップロードしておく必要があります。以下 で、証明書の作成とアップロードの手順をご説明します。 A. 証明書の作成 証明書を以下の手順で作成してください。 ・ Visual Studio コマンドプロンプト(2010)を管理者特権つきで起動する ・ 証明書を作成するディレクトリへ移動する 19 今回のサンプルでは Visual Studio から Windows Azure 上へアプリケーションをアップロードするためにも使用します。アプリケーショ ンのアップロード後サービスの管理も可能となります。この他にも Windows Azure MMC (http://code.msdn.microsoft.com/windowsazuremmc)でもサービスの管理が可能です。 p.58 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 58.
    下記コマンドを実行する "C:Program FilesMicrosoft SDKsWindowsv7.0Abinmakecert" -r -pe -a sha1 -n "CN=Windows Azure Authentication Certificate" -ss My -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 "AzureMgmt.cer" このコマンドにより以下 2 つが実行されます。 ・ カレントディレクトリに自己署名証明書(AzureMgmt.cer)が作成される ・ 作成された証明書が現在ログオンしているユーザーの”個人”証明書ストアへ保存される B. Windows Azure への証明書の登録 次に、作成された証明書を Azure へ登録します。 ・ まず、ポータルサイト(https://windows.azure.com/)にアクセスし、プロジェクトを選択します。 ・ 次に[Account] タブを開きます。[Manage My API Certificates] リンクから [API Certificates] 画 面を開きます。 p.59 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 59.
    [参照…] ボタンから、先ほど作成した証明書を選択し、[Upload] ボタンでアップロードします。 p.60 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 60.
    これで証明書の登録が完了となります。この証明書は、後で Visual Studioから Azure 上へアプリケーショ ンをデプロイする際に使用します。 以上で、Azure を使用する準備が整いました。次に、Azure 上へアプリケーションを移行していきます。 3.3 SQL Azure データベースサービスへの移行 ではまず、データベースサービスへの移行から解説します。 3.3.1 SQL Server Management Studio からの接続 まず、SQL Server Management Studio から SQL Azure データベースに接続します20。接続の際には、 以下 3 点に注意してください。 ① サーバー名として、先のサーバー名(xxx.database.windows.net)を使用 ② SQL Server 認証を使用 ③ オプション画面において、接続先とするデータベースの選択 ③の作業(接続時に接続先のデータベースを選択する)は極めて重要です。一般に、通常の SQL Server で は、どこかのデータベースに接続した後、use コマンドを利用して、同一インスタンス内の別データベースに切り替 えることができましたが、データベースサービスではこれができません。これは SQL Azure データベースサービ ス特有の制限事項のため、注意してください。 20(参考)利用する SQL Server Management Studio のバージョンにより、利用できる機能範囲が変わります。2008 R2 November CTP 以降では、サーバーエクスプローラーを使用し、テーブル一覧などを表示できるようになりましたが、それ以前のバージョンのものだ と、クエリの発行しかできません。サーバーエクスプローラーなどを使用するには、最新の Management Studio をお使いください。 p.61 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 61.
    3.3.2 テーブルの作成 次に、データベースサービス上にテーブルを作成します。クエリウィンドウから CREATE TABLE 命令などを 発行し、テーブルを作成してください。(今回は簡単のため、authors テーブル、publishers テーブル、titles テーブル、titleauthor テーブルの 4 つだけ作成することにします。) なお、SQL Azure データベースはアーキテクチャ的な特徴から、SQL Server データベースに比べてテーブ ルに関しては、仕様上の制限がいくつかあります。例えば以下 2 つなどです。 ・ ユーザー定義型が使えない ・ クラスタ化インデックスを持たないテーブル(ヒープと呼ばれます)は作成できない 今回、サンプルで利用している PUBS データベースはこれらの制限に一部ひっかかるところがあり、そのまま では SQL Azure データベース上に移行することができません。このため、スキーマなどを一部修正したテーブ ルを利用します。作成時は以下のスクリプトを利用してください。 CREATE TABLE authors ( au_id varchar(11) CHECK (au_id like '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]') CONSTRAINT UPKCL_auidind PRIMARY KEY CLUSTERED, au_lname varchar(40) NOT NULL, au_fname varchar(20) NOT NULL, phone char(12) NOT NULL DEFAULT ('UNKNOWN'), address varchar(40) NULL, city varchar(20) NULL, state char(2) NULL, zip char(5) NULL CHECK (zip like '[0-9][0-9][0-9][0-9][0-9]'), contract bit NOT NULL ) GO CREATE TABLE publishers ( pub_id char(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED CHECK (pub_id in ('1389', '0736', '0877', '1622', '1756') OR pub_id like '99[0-9][0-9]'), pub_name varchar(40) NULL, p.62 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 62.
    city varchar(20) NULL, state char(2) NULL, country varchar(30) NULL DEFAULT('USA') ) GO CREATE TABLE titles ( title_id varchar(6) CONSTRAINT UPKCL_titleidind PRIMARY KEY CLUSTERED, title varchar(80) NOT NULL, type char(12) NOT NULL DEFAULT ('UNDECIDED'), pub_id char(4) NULL REFERENCES publishers(pub_id), price money NULL, advance money NULL, royalty int NULL, ytd_sales int NULL, notes varchar(200) NULL, pubdate datetime NOT NULL DEFAULT (getdate()) ) GO CREATE TABLE titleauthor ( au_id varchar(11) REFERENCES authors(au_id), title_id varchar(6) REFERENCES titles(title_id), au_ord tinyint NULL, royaltyper int NULL, CONSTRAINT UPKCL_taind PRIMARY KEY CLUSTERED(au_id, title_id) ) GO 3.3.3 データの移行 データベースが作成できたら、各テーブルのデータを SQL Azure データベース上にコピーします。データコ ピーの方法は SSIS (SQL Server Integration Service)などを使用するのが正しいやり方ですが、ここでは簡 単のため、非接続型データアクセスを使ったコンソールアプリケーションを書き、アップロードします。以下のような コードを使って、データをコピーしてください。(※ サーバー名などは適宜、ご自身のものに変更してください。) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { // 手元のファイルアタッチデータベースの SQL Server 上の // データを、SQL Azure 上にコピーする SqlConnection sqlcon1 = new SqlConnection(@"Persist Security Info=False;Integrated Security=true;Initial Catalog=PUBS;Server=mmasuda2sqlexpress"); SqlConnection sqlcon2 = new SqlConnection(@"Server=tcp:uevf0i1ffa.database.windows.net;Database=pubs;User ID=mmasuda@uevf0i1ffa;Password=xxxxxxxx;Trusted_Connection=False;"); DataSet ds = new DataSet(); // データ読み取り SqlDataAdapter sqlda1 = new SqlDataAdapter("SELECT * FROM publishers", sqlcon1); SqlDataAdapter sqlda2 = new SqlDataAdapter("SELECT * FROM titles", sqlcon1); SqlDataAdapter sqlda3 = new SqlDataAdapter("SELECT * FROM authors", sqlcon1); SqlDataAdapter sqlda4 = new SqlDataAdapter("SELECT * FROM titleauthor", sqlcon1); p.63 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 63.
    sqlda1.Fill(ds, "publishers"); sqlda2.Fill(ds, "titles"); sqlda3.Fill(ds, "authors"); sqlda4.Fill(ds, "titleauthor"); // データ書き込み SqlDataAdapter sqlda5 = new SqlDataAdapter("SELECT * FROM publishers", sqlcon2); SqlDataAdapter sqlda6 = new SqlDataAdapter("SELECT * FROM titles", sqlcon2); SqlDataAdapter sqlda7 = new SqlDataAdapter("SELECT * FROM authors", sqlcon2); SqlDataAdapter sqlda8 = new SqlDataAdapter("SELECT * FROM titleauthor", sqlcon2); // 更新クエリ生成 SqlCommandBuilder scb5 = new SqlCommandBuilder(sqlda5); SqlCommandBuilder scb6 = new SqlCommandBuilder(sqlda6); SqlCommandBuilder scb7 = new SqlCommandBuilder(sqlda7); SqlCommandBuilder scb8 = new SqlCommandBuilder(sqlda8); // 行ステータスを変更 foreach (DataTable table in ds.Tables) { foreach (DataRow row in table.Rows) { row.SetAdded(); } } // データアダプタ経由で INSERT 処理を実施 sqlda5.Update(ds.Tables["publishers"]); sqlda6.Update(ds.Tables["titles"]); sqlda7.Update(ds.Tables["authors"]); sqlda8.Update(ds.Tables["titleauthor"]); Console.WriteLine("データをコピーしました。"); } } } 3.3.4 アプリケーションの接続文字列を変更 先ほど作成した Web アプリケーションは、ファイルアタッチデータベースを利用しています。データベースサー ビスを利用するように変更するには、接続文字列を書き換えるだけで済みます。以下のように web.config ファイル 内の接続文字列を書き換えてください。 <configuration> ... (前略) ... <!-- 変更前 --> <!--<connectionStrings> <add name="pubsConnectionString1" connectionString="Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|pubs.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" /> </connectionStrings>--> <connectionStrings> <add name="pubsConnectionString1" connectionString="Server=tcp:mbkz89u87g.database.windows.net;Database=PUBS;User ID=mmasuda@mbkz89u87g;Password=xxxxxxxx;Trusted_Connection=False;" providerName="System.Data.SqlClient" /> </connectionStrings> ... (後略) ... </configuration> 3.3.5 動作確認 以上を行ったあとでクラウドサービスプロジェクトを Ctrl + F5 により実行し、WebForm2.aspx ページを呼び出 すと、SQL Azure データベースからデータを読み出し、画面に表示するようになります。 p.64 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 64.
    3.4 Windows Azure ストレージサービスへの移行 次に、ストレージサービスへの移行を説明します。 3.4.1 ストレージ接続文字列の設定 まず、ストレージ接続文字列を修正します。 ・ クラウドサービスプロジェクトの、プロパティ画面の [Settings] タブを開き、Diagnostic Monitor の接続 先となるストレージを、開発用ストレージ(development storage)から、運用環境の方に変更します。 ・ 下図のように、 [Account Name] と [Account Key] を設定し、さらに接続方法として HTTPS プロト コルを設定してください。 p.65 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 65.
    以 上 の 設 定 の 後 、 [OK] ボ タ ン を ク リ ッ ク す る と 、 Azure ス ト レ ー ジ 接 続 文 字 列 が 作 成 さ れ 、 ” DiagnosticsConnectionString” という名称で保存されます。 ・ 以下のような文字列になりますが、この文字列を次に利用しますので、コピーしておいてください。  ” DefaultEndpointsProtocol=https;AccountName=nakama;AccountKey= … ( == と い う 文 字で終了する文字列)…” 3.4.2 Blob コンテナ・テーブルの作成 次に、Diagnostic Monitor で利用する、Blob コンテナやテーブルを、ストレージサービス内に作成します。前 章の「Diagnostic Monitor によるアプリケーション監視」の、「Windows Azure ストレージ側の事前準備」の項で 説明したサンプルコードを一部修正し、本番環境へ Blob コンテナやテーブルを作成します。 以下にフルソースコードを示しますが、修正するのは下記ソースコード中のマーカーされた行のみです。ここに、 先に作成した接続文字列をペーストしてください。 コードを修正し、コンソールアプリケーションを実行すると、本番環境に Diagnostic Monitor 用の Blob コンテ ナやテーブルなどが作成されます。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // 開発環境の場合(運用環境の場合には適宜コードを修正) //CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount; // 運用環境の場合 CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=azuretest;AccountKey=xxxxxxxx"); p.66 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 66.
    // 作成するコンテナ、テーブル、キューの名称一覧 string[] containerNamesToCreate = new string[] { "wad-iis-failedreqlogfiles", "wad-iis-logfiles", "wad-crash-dumps" }; string[] tableNamesToCreate = new string[] { "WADLogsTable", "WADDiagnosticInfrastructureLogsTable", "WADPerformanceCountersTable", "WADWindowsEventLogsTable", "WADDirectoriesTable" }; string[] queueNamesToCreate = new string[] { }; // コンテナ、テーブル、キューを作成 CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); foreach (string containerName in containerNamesToCreate) { CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName); bool created = blobContainer.CreateIfNotExist(); if (created) Console.WriteLine("{0} : コンテナを作成しました。", containerName); } CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); foreach (string tableName in tableNamesToCreate) { bool result = tableClient.CreateTableIfNotExist(tableName); if (result) Console.WriteLine("{0} : テーブルを作成しました。", tableName); } CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); foreach (string queueName in queueNamesToCreate) { CloudQueue queue = queueClient.GetQueueReference(queueName); bool result = queue.CreateIfNotExist(); if (result) Console.WriteLine("{0} : キューを初期化しました。", queueName); } } } } 以上の作業で、利用するストレージが、開発用ストレージから運用環境のストレージサービスへと変更されます。 クラウドサービスプロジェクトを Ctrl + F5 キーで実行し、動作確認をしてみてください。先ほどと特に見た目は変 わりませんが、内部の動作は以下のように変更されます。 各種のログファイルが、正しくストレージサービスに、データ出力できているか否かを確認するには、マイクロソフ トのサンプルアプリケーションである myAzureStorage (http://myazurestorage.cloudapp.net/)を使ってい ただくと簡単です。このツールは、Blob や Table ストレージの中をブラウジングできる Web アプリケーションにな p.67 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 67.
    っており、簡単にストレージサービスの中身を確認することができます21。 3.5 Windows Azure コンピュートサービスへの移行 最後に、コンピュートサービスを移行していきます。 基本的に、コンピュートサービスへアプリケーションを展開する場合には、まず Staging 環境にアプリケーションを 配置して、最終動作確認を行ったのち、これを Production 環境と入れ替えます。まずは Staging 環境へのアプリ ケーションのアップロード方法について、以下に解説します。 3.5.1 インスタンス数の変更 まず、サーバーへのアップロードを行う前に、いったん仮想マシンのインスタンス数を 1 に減らしておきます。後 で解説しますが、コンピュートサービスでは、利用した仮想マシンの台数分だけ課金が発生します。このため、最 初の段階ではインスタンス数を 1 に減らして配置を行い、動作確認が取れてからインスタンス数を増やすのが鉄 則になります。 21 (参考) このツールは Microsoft が提供する非常に手軽なツールですが、開発用ストレージの中を見ることができない、データのダウ ンロードやアップロードができないなど、実際に利用するには、機能不足というのが正直なところです。取り急ぎでざっくりデータを確認し たい、という場合に利用すると便利です。 p.68 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 68.
    3.5.2 クラウドサービスのパッケージングと Azure 上への配置 次にクラウドサービスを発行し、それを、Windows Azure 上へと配置する手順を説明します。 ・ クラウドサービスプロジェクトを右クリックして、 [発行] をクリックしてください。  すると、サービスパッケージの作成(パッケージング)のみか、Azure 上へのサービスパッケージの 配置も行うか、聞かれます。  Visual Studio でパッケージングのみを行い、ポータルから手動でサービスパッケージを配置する ということも可能です。  しかし今回は、Visual Studio でパッケージングと配置の両方を行う方法をとります22。 ・ まず、[Deploy your Cloud Service to Windows Azure] を選択します。 ・ そして、[Credentials:] のドロップダウンリストから、<Add…>を選択します。 ・ [Cloud Service Management Authentication] の画面が表示されます。 ・ [1. Create or select an existing certificate for authentication:] ドロップダウンリストで、先ほど作成 した証明書を選択します。 ・ 次に、[3. Copy the subscription ID for your account from the Developer Portal: ] のテキストボッ クスに、メモしておいた Subscription ID23を貼り付けます。 ・ そして、[Name these credential: ] のテキストボックスに、適当な証明書の名前を付与し、[OK] ボタン をクリックします。 22 Visual Studio から配置が行えるのは、Azure 開発ツールキットのバージョンが 1.2 からになっております。以前のバージョンを使用する 場合には Visual Studio で発行を行い、ポータルから、手動で配置する必要があります。 23 ポータルサイト(http://windows.azure.com)からプロジェクトを選択し、 [Account] タブから取得できます。 p.69 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 69.
    すると、[Publish Cloud Service] 画面に戻ります。 ・ デプロイするサービススロットとして Staging 環境を選択し、Storage Account を選択します。 ・ 最後に、ラベルにアプリケーションのバージョン番号(ビルド番号) 24を付与し、 [OK] ボタンをクリックし てください。 すると、クラウドサービス(Web アプリケーション)が発行され、Azure 上に配置されます。その配置の進行状況 や作業のログは、Visual Studio から確認することができます。 24 今回は 2010 年 7 月 1 日の最初のバージョンということで ”1.0.00701.0” を付与します。管理上、わかりやすい名前を付与してください。 デフォルトで付与されている名前をそのまま使っていただいても問題ありません。 p.70 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 70.
    ポータルサイトからも進行状況が変化していくのが確認できます。 Visual Studioからは[Complete]と表示されたら、ポータルサイトからはステータスが Ready となったら、Azure 上への配置が終了となります。 以下では、パッケージングと配置の処理で、具体的にはどのようなことが行われているか解説します。 A. パッケージング パッケージング処理により、Visual Studio から、以下 2 つのファイルが出力されます。 ・ サービスパッケージファイル(CloudService1.cspkg)  実際の Web アプリケーションが含まれるパッケージファイルです。 ・ サービス構成設定ファイル(ServiceConfiguration.cscfg)  配置後も変更可能な構成設定データが記述されたテキストファイル(XML ファイル)です。 B. 配置 配置では、以下 3 つの処理が行われます。 ・ コンピュートサービスのハードウエアインフラ上に、仮想マシンのイメージ(この例の場合には、Web ロー ルの VM イメージ)がコピーされる ・ この仮想マシンに対して、指定した VM サイズのリソース(この場合には Small なので 1 個の CPU と 1.75GB のメモリ)が割り当てられる ・ この仮想マシンに、アップロードしたアプリケーションパッケージが配置され、実行される p.71 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 71.
    3.5.3 Windows Azure コンピュートサービスの動作確認 しばらくすると、コンピュートサービスが起動します。Staging 環境では、配置されたアプリケーションにダミーの URL が付与されます。画面上にある URL にアクセスして、Web アプリケーションの動作を確認してください。 以上で、コンピュートサービス環境への Web アプリケーションの配置と、基本的な動作確認は終了です。しかし p.72 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 72.
    ながら、このままではいくつかの問題があります。 A. 現在時刻の表示 表示されている時刻が、現在時刻とずれてしまっています。これは、コンピュートサービスのコンピュータが、 UTC 時刻(グリニッジ標準時)で動作しているためです。UTC と東京時刻には 9 時間の時差があるため、表 示時刻は 9 時間ずれて表示されてしまいます。 B. コントロールの英語表記 GridView の [選択] ボタンが英語表記の ”Select” となってしまっています。これは、コンピュートサービ スのサーバーOS が、データカルチャ、UI カルチャともに”en-us”(英語)で動作しているためです。このため、 例えば int a = 30;というデータを通過表記すると、¥30 ではなく$30 となってしまいます。 このように、コンピュートサービスの本番環境は、ローカルコンピューターの開発用ファブリックとは、いくつか環 境的に異なるところがあります。このため、実際に既存のアプリケーションを Azure 上に移植する場合、あるいは 新規に Azure 用のアプリケーションを開発する場合には、このような環境の違い(特に国際化対応の問題)を意識 する必要があります。 3.6 アプリケーションの修正と Azure 環境への再配置 それでは、実際にアプリケーションを修正し、コンピュートサービスの環境に適応させてみることにします。 3.6.1 開発用ファブリックと本番環境の相違点 開発用ファブリックと Azure 本番環境では様々な相違点があります。Azure 本番環境で問題となりやすい制 限事項としては、以下のようなものがあります。 この中でも、国際化対応に関連する問題は、よくひっかかりやすいポイントになります。例えば、以下のような簡 単な処理でも、Azure 環境では、開発環境とは異なる動きをします。 p.73 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 73.
    3.6.2 アプリケーションの修正 これらについては、基本的に以下の対策を行うとよいでしょう。 A. web.config ファイルへの、データカルチャと UI カルチャの修正設定の追加 .NET ランタイムは、内部的に、データの国際化対応と UI メッセージの国際化対応の 2 つの機能を持って います。これらは、web.config ファイルで切り替えることが可能です。日本語圏と同じように動作させたければ、 以下のように指定を行います。 <configuration> <system.web> <globalization culture="ja-jp" uiCulture="ja-jp" /> </system.web> </configuration> B. アプリケーション中の時刻処理を、タイムゾーンを意識したコードに変更 DateTime.Now プロパティによって取得される時刻は、Azure 環境では UTC 時刻となります。このため、 日本の時刻を取得したい場合には、時差補正を行う必要があります。具体的には、以下のようにコードを修正 してください。 // 従来であれば、以下のように実装していたコードを、 DateTime now = DateTime.Now; // 以下のように修正します。 DateTime now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now.ToUniversalTime(),"Tokyo Standard Time"); 3.6.3 アップグレード これらの修正を加えたら、Azure 上の Web アプリケーションをアップグレードします。アップグレードについては Visual Studio 2010 + Azure Tools 1.2 から直接操作できないため、Visual Studio からパッケージング作業を 行い、ポータルサイトからアップグレードします。以下の手順でアップグレードしてください。 ・ まず、先ほどと同様に CloudService1 プロジェクトを右クリックし、[発行] を選択します。 ・ そして、発行のみを行う [Create Service Package Only] を選択し、[OK] をクリックしてください。  すると、Visual Studio から、サービスパッケージファイル(CloudService1.cspkg)とサービス構成 ファイル(ServiceConfiguration.cscfg)が出力されます。 p.74 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 74.
    次に、ポータルサイトの Staging 環境の [Upgrade…] ボタンをクリックし、発行された 2 つのファイルを アップロードしてください。  配置の際には、ラベルとして、先とは異なる名称を付与しておくとよいでしょう。その他の項目 (Operating System Settings など)は既定値のままで構いません。 p.75 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 75.
    3.6.4 解決されない問題 以上の作業を行った上で、再度アプリケーションの動作を確認すると、以下のようになります。 ・ 日時表示は正しい表示に変更され、東京の日時が表示される ・ しかし、GridView の選択ボタンについては、依然として [Select] 表示のままである 前者については問題ないと思いますが、後者については疑問を覚える方もいると思います。尐し補足すると、 一般に、GridView の選択ボタンの表記文字や、例外に含まれる詳細メッセージなどには、.NET Framework ランタイムの中に含まれる、日本語リソースファイルが使われています。しかし、現在のコンピュートサービスの環 境には、日本語のリソースファイルが含まれていません。<globalization> タグで uiCulture を “ja-jp” にして おくと、本来は、日本語リソースファイルが利用されるようになります。しかし、そもそもこのリソースファイルが Azure 上にインストールされていないため、英語メッセージになってしまう、ということになります。 このため、今回の GridView の選択ボタンのようなものを日本語表記にしたい場合には、以下のように対応する 必要があります。 ・ テンプレート列を作成し、LinkButton コントロールを配置する ・ 手作業でこれに “選択” という文字を設定し、CommandName プロパティに “Select” を指定する 尐し面倒な作業ですが、現在の Azure プラットフォームの制約として覚えておく必要があります。 p.76 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 76.
    3.6.5 構成設定の変更 次に、ポータルサイトから構成設定を変更してみます。 ・ ポータルサイト上で、[Configure…] ボタンをクリックしてください。  サービス構成設定ファイルを編集できます。 ・ このファイルの中ほどに、<Instances count=”1” /> という設定があるので、これを適宜増やします。  ここでは 3 にしてみることにします。 ・ 修正後、”Save” ボタンをクリックしてください。  インスタンス数増加には多尐時間がかかります。しばらくお待ちください。 p.77 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 77.
    しばらくすると、インスタンス数が 3 になります。 ・ この状態で動作確認してみてください。  インスタンス ID が時折切り替わることが確認できると思います。 3.6.6 本番環境への展開 最後に、いよいよこのアプリケーションを本番環境(”Production”)へと展開しましょう。このためには、ポータル サイトのスワップ機能(入れ替え機能)を利用します。この画面の真ん中のボタンを押すと、二つの環境が入れ替 わり、運用環境にアプリケーションが配置されます。Staging 環境ではダミーの URL が付与されていますが、 Production 環境に移すことにより、通常の URL(http://<アカウント名>.cloudapp.net)アドレスでアクセスするこ とができるようになります。 p.78 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 78.
    Staging 環境と Production環境の入れ替えは、ロードバランサのみで行われるため、すぐに終了します。 作業が終了したら、運用環境用の URL(http://<アカウント名>.cloudapp.net)にアクセスを行い、Web アプリ ケーションが動作することを確認してください。 p.79 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 79.
    3.6.7 サービスの停止 アプリケーションの動作を確認し、テストが完了したら、サービスを停止します。具体的には、Windows Azure ポータルサイトの画面内にて、以下の作業を行ってください。 ・ ポータルサイト上の”Suspend”のボタンを押す。 ・ さらに、ポータルサイト上の”Delete”のボタンを押す。 以上の作業により、コンピュートサービスが停止し、コンピュートサービスの利用にかかわる課金が停止します。 注意すべき点として、アプリケーションを”Suspend”させるだけではコンピュートサービスの課金が停止しません。 これは、Suspend 状態であっても、仮想マシンがリソースを占有し続けているためです。課金を停止させるために、 利用が終了したら必ずサービスを”Delete”するようにしてください。 以上で、Windows Azure Platform 上でのアプリケーション開発の演習は終了です。 3.6.8 アカウントの削除 Windows Azure Platform のアカウントが今後もう必要ない、ということであれば、Windows Azure アカウント の削除を行ってください。アカウントを削除するには、Windows Azure のカスタマーサポートに電話し、削除して もらいます。 なお、課金状況は MOCP サイト(Microsoft Online Services Customer Portal サイト)から確認できます。 課金情報はリアルタイムではなく遅れがあるため、注意してください。 MOCP サイト https://mocp.microsoftonline.com/site/default.aspx p.80 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 80.
    第4章 Windows Azure 運用環境における課金 最後に本章では、Windows Azure の課金を安く抑えるためのコツについて解説します。 前提として、ここに書かれている情報は、2010 年 6 月 25 日時点での情報をまとめたものであり、また、あくまで参考 情報となっております。必ず、オフィシャルサイトの最新情報をご参照ください。 Windows Azure Platform オフィシャルサイト(日本語) http://www.microsoft.com/japan/windowsazure/ 4.1 Windows Azure 運用環境における課金を安く抑える方法 Azure の課金の詳細については、Windows Azure のサイト(上記)に詳しくまとめられていますが、なかなかとっつ きにくいのも確かだと思います。そこでここでは、課金に関するポイントを解説します。 Windows Azure プラットフォームでは、基本的に、「サービス」と「トラフィック」が課金対象になります。 サービスに対する課金に関しては、各サービスで課金方式が異なるため、注意が必要です。特に、開発中に課金 が膨らみやすいのはコンピュートサービスとなっています。そのため、コンピュートサービスの利用方法には、特に注 意してください。 4.1.1 トラフィックの課金 トラフィック課金については、以下の点に注意する必要があります。 A. 同一拠点(≠ 同一地区)の Azure データセンタ内の通信に関しては課金対象ではない 同一データセンタ内に配置されたサーバー間の通信は課金対象とはなりません。例えば、コンピュートサー ビス(Web ロールなど)と SQL Azure が同一のデータセンタ(例えばシンガポールなど)に存在する場合、そ の間の通信に関しては課金がかかりません。しかし、コンピュートサービスが香港、SQL Azure がシンガポー ルにあると、その間の通信に関してはトラフィック課金がかかります(この場合、両方のデータセンタで課金が 発生します)。 B. トラフィック課金の単価は、データセンタの場所によって異なる クライアントユーザがどこにいるかではなく、サービスがどのデータセンタに配置されているのかによって課 p.81 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 81.
    金が決まります。(アジアはトラフィック課金の単価が高めなため、注意してください25。) C. 運用時はトラフィック課金が比較的膨らみやすい 単価だけ見ると尐額ですが、実際の Web サイトではそれなりの金額になります。例えば、約 500kB の Web ページが 5,000 回/日のペースで呼び出されたとしても、500kB x 5,000 回 x 30 日 = 75GB の転送量 になり、決して無視できないデータ転送量になるため、注意が必要です。 D. 開発中のトラフィックはそれほど大きくならないが、巨大なデータ転送には注意する 開発時はユーザー数が尐ないでしょうから、通常は数 GB もあれば十分であり、数百円程度で済むでしょぅ。 ただし、初期データのアップロードなど、巨大データの転送には注意してください。 4.1.2 Windows Azure コンピュートサービスの課金 コンピュートサービスの課金は、「物理マシンリソースの占有量」と「トラフィック量」に応じて決まります。 A. マシン占有課金=単価×サイズ×デプロイ時間×インスタンス数 マシン占有に対する課金は、「CPU の利用時間」ではなく、「サーバリソースの占有量と時間」により課金が 決まるところがポイントです。コンピュートサービスでは、アプリケーションをアップロードした時点から”Delete” されるまでの時間が課金の対象となります。なぜなら、“Suspend”や“Stopped”などの状態のように、サービス が停止していた状態であっても、リソースを占有しているためです。実際の利用時には、“Suspend”状態でサ ーバーを放置せず、使用後は必ず “Delete” し、空の状態にするようにしてください。 B. “Production” 環境と “Staging” 環境の課金単価は同一 Staging 環境といっても、ここにアップロードしたアプリケーションは、しっかりと Windows Azure インフラの CPU やメモリリソースを占有しています。このため、”Staging” 環境に置いたアプリケーションについても、課 金が行われます。 通常、Staging 環境は、Production 環境のアプリケーションをアップグレードする前の、最 終動作確認環境として利用されますが、利用が済んだら、これも必ず “Delete” するようにしてください。 C. 課金時間は、「デプロイ~削除」までを 1 時間単位で繰り上げ計算 つまり、数分しか配置していなかったとしても、1 時間分の課金が行われる、ということになります。よって、 以下のような操作は避けてください。 25 北アメリカやヨーロッパに配置すると通信料はやや安くなりますが、開発中はそれほどトラフィックが多くならないため、必ずしもメリットは 大きくないでしょう。 p.82 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 82.
    新規アプリケーションパッケージをデプロイしたあと、すぐに削除する  この場合でも、1 時間分の課金がされます。 ・ 最初から大量のインスタンス数でデプロイする  一度に 30 インスタンスでデプロイをすると、万が一デプロイに失敗した場合には、削除してやり 直すことになりますが、この場合、30 時間分の請求が発生するため、注意が必要です。 ・ 開発中に、既存アプリケーションをアップグレードする際に、"Upgrade" せずに、"Delete" してから "New" で新規配置する  Upgrade の場合には、時間数計算が連続します。  また、配置に要する時間も、Upgrade の方が短く済みます。 以上のことをきちんと押さえておくと、Production 環境のアプリケーションをアップグレードする正しい方法が 分かってきます。具体的にまとめると、以下のような手順になります。 ・ 正しいアップグレード手順 ① まず Staging 環境に、インスタンス数 = 1 で新規デプロイする ② 動作確認し、問題なければ、Staging 環境でインスタンス数を増やす ③ Production と Staging を入れ替える ④ しばらく様子を見る(※ 問題があった場合にはロールバックするため) ⑤ 問題がなければ、Staging 環境を削除(Delete)し、インスタンスを消す うっかり放置すると、Small インスタンス 1 つであっても、1 か月あたり 8,000 円程度の課金になってしまい ます。決して安い金額ではないので、十分注意しながら利用してください。 4.1.3 Windows Azure ストレージサービスの課金 ストレージサービスに関しては、トラフィック課金に特に注意してください。ストレージサービスでは、「ストレージ 利用量」、「トランザクション数」、および「トラフィック量」の 3 つにより課金が決まります。2010 年 6 月 25 日時点 での単価は、以下のようになっています。 ・ ストレージ利用課金: 14.70 円/GB・月 ・ トランザクション課金: 10,000 トランザクションあたり 0.98 円 ・ トラフィック課金: アジア地域からのダウンロードの場合 29.40 円/GB これらの数字から考えると、ストレージサービスの課金の大半は、トラフィック課金になるはずです。特に、マル チメディアファイルなどの、巨大な BLOB データを、ストレージに置いて配信するような場合には、十分な注意が 必要です。 p.83 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 83.
    4.1.4 SQL Azure データベースサービスの課金 データベースサービスの課金については、以下に注意してください。 A. サービスの課金は、データベースの数とエディションと実際のデータ量により決定 例えば下図の例の場合には、Business Edition のデータベースが 1 つ、Web Edition のデータベースが 1 つで、それぞれに対して課金が発生します。データベースサービスの場合、容量制限があるためにデータ ベースの数を増やしたくなるわけですが、むやみに増やせば、それ相応に課金額も増えていく、ということに 注意してください。 なお、2010 年 6 月末に、データベースサービスの最大容量が拡大され、実容量を加味した課金方式に変 更されました。例えば、Web Edition のデータベースに対して、ある日、3GB のデータが入っていた場合に は、¥4,895.10 の日割りが課金され、次の日、データが 0.8GB に減った場合には、¥979.02 の日割りが課 金されるようになっています。詳細は Web ページの情報をご確認ください。 最大容量 Web Business 1GB 979.02/月 (9,799.02/月) 5GB 4,895.10/月 (9,799.02/月) 10GB - 9,799.02/月 20GB - 19,598.04/月 30GB - 29,397.06/月 40GB - 39,196.08/月 50GB - 48,995.10/月 B. オンプレミス SQL Server などとの連携を行う場合は、トラフィック課金に注意 特に、データベースのデータの一括転送などは、どうしても容量がかさみがちになります。トラフィック課金が かなりの額になることも想定されるため、十分に注意してください。 4.1.5 課金状況の確認 なお、上記のいずれに関しても、課金状況は MOCP サイト(Microsoft Online Services Customer Portal サイト)から確認できますが、課金情報はリアルタイムではなく遅れがあるため、注意してください。 MOCP サイト https://mocp.microsoftonline.com/site/default.aspx また、本セクションで解説した課金ロジックは実際の課金ロジックを単純化したものです。実際の課金ロジックは p.84 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。
  • 84.
    かなり複雑になっておりますので、より詳細を知りたい方は、以下の情報を参照してください。 課金情報サイト http://www.microsoft.com/windowsazure/support/understandbill/ 4.1.6 課金の予測 さて、ここまで課金の仕組みなどについて、ざっと解説してきました。ここで、実際にご自身のアプリケーションの 場合にどの程度の課金となるのか気になると思います。しかし、これに関しては、case-by-case としか言いようが ありません。Web アプリケーションの中身は千差万別であり、必要なサーバー台数も、データ転送量も、本当にま ちまちというのが実態です。 もし実際に Azure プラットフォームを使う前に、課金がどの程度になるかを知りたいようであれば、既存の類似 アプリケーションについて、以下のようなポイントを考えてみたり、調べてみたりするとよいでしょう。 ・ ネットワークトラフィックはどの程度あるのか?(これは IIS ログから調べられます) ・ 現在の Web サーバーのマシンスペックと台数はどの程度か?(Azure プラットフォームでは Small イ ンスタンスの CPU が 1.6GHz 相当なので、これからざっくりとした計算はできます) ・ 必要となる SQL Azure データベースの容量はどの程度か? サーバー台数の見積もりなどは、原理的に机上での評価が難しい領域になります。そういう観点からも、プロトタ イピングなどを通して実機検証を行い、見積もり精度を高めていくことを推奨します。 p.85 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。