84
Windows Azure 用アプリケーション開発 Step-by-Step チュートリアルガイド マイクロソフト株式会社 コンサルティングサービス統括本部 © 2010 Microsoft Corporation. All rights reserved. / Microsoft Consulting Services Japan 本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

Windows azure stepbystep_tutorialguide

Embed Size (px)

DESCRIPTION

これみてAzure開発環境作り直す!Win7評価版を使うのだ~

Citation preview

Windows Azure 用アプリケーション開発

Step-by-Step チュートリアルガイド

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

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

p.3

© 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.4

© 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.5

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

本ガイドは、Windows Azure Platform について実際にご自身の手で開発を体験いただくためのチュートリアル

ガイドとなっております。Windows Azure と SQL Azure を使った、サンプルWebアプリケーションを Azure用のア

プリケーションにカスタマイズし、実際にデプロイするまでを、順を追って解説していきます。

本ガイドでは ASP.NET、SQL Serverなどに関する、基本的な開発スキルを前提として解説していきます。もし、こ

れらに不安がある場合には、まず ASP.NETや SQL Serverに関する書籍を学習した上で、本ガイドをご参照くださ

い。

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 ・・・ ハード、ミドルおよびアプリまで全て他社に任せてしまう

第1章

はじめに

1.1 本書の目的と前提条件

1.2 Windows Azure Platform 概要

p.6

© 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.7

© 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.8

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

定義されており、そのデータ構造ごとに3種類のストレージがあります。それぞれのストレージにはURIが付い

ていて、HTTP-RESTプロトコル1によるアクセスができるようになっています。

種類 データ 用途 URI

BLOB

ストレージ

バイナリ

データ

巨大バイナリデータを種類問わずに格納でき

るストレージになっています。そのため、マル

チメディア系のファイル

(.wmv、.wav、.mp3、.jpg など)や巨大なデータ

ファイル(.vhd、.zipなど)などの格納に最適で

す。

http://<アカウント名

>.blob.core.windows.net/<コンテナ名

>/<Blob名>

Table

ストレージ

Key-Value

データ

プロパティ値のみを持つようなオブジェクトを、

二つのキーにより一意化し、分散保有する設

計になっています。そのため、キーを上手に

設計することにより、巨大なデータ検索処理を

効率よく実行することができるようになります。

http://<アカウント名

>.table.core.windows.net/<Table 名

>?$filter=<Blob 名>

Queue

ストレージ

メッセージキュー

データ

Web/Worker Role サーバー間の通信には

HTTPまたは TCPによる直接型通信を行いま

す。この通信を非同期で行いたい場合にのみ

Queue ストレージを使用します。

http://<アカウント名

>.queue.core.windows.net/<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.9

© 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.10

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

このような背景から、Azureに適したアプリケーションと不向きなアプリケーションとがあります。

A. Azure に適しているアプリケーション

・ 一般的なインターネットアプリケーション

・ トラフィックが時期や時間帯により、大きく変動するアプリケーション

・ ASPサービスとして展開しているアプリケーション

・ 自社でインフラを持たないソフトウエア会社が、開発するアプリケーション

B. Azure に不向きなアプリケーション

・ セキュリティポリシー上、社外に持ち出すことのできないデータを取り扱っているイントラネットアプリケー

ション

・ Azureの SLAでは不十分な、ミッションクリティカルシステム

・ SPや QFEなどの、ソフトウェアバージョンを固定したいアプリケーション

全てのアプリケーションが、Azure に適しているというわけではないということにご注意ください。このような注意

点を理解した上で、Azure用のアプリケーションを開発する必要があります。

p.11

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

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

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」をクリックしてください

第2章

簡単なサンプルを用いた Azure アプリケーションの開発

2.1 開発環境の構築

p.12

© 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.13

© 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上で動作するアプリケーションの開発が可能となります。

さて、いよいよ 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つを作成し

ます。

2.2 ローカルでの Webアプリケーション開発

p.14

© 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.15

© 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.16

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

2.2.4 ASP.NET開発サーバー上での動作確認

以上の作業が終了したら、Ctrl + F5キーでアプリケーションを起動し、実行してください。すると、ASP.NET開

発サーバーが起動し、下図のようにアプリケーションが動作します。

p.17

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

それでは引き続き、このアプリケーションを 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] プロジェクトを追加する。

2.3 クラウドサービスプロジェクトの追加

p.18

© 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.19

© 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.20

© 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.21

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

ここでは、もっとも簡単な設定として、[WebApplication1] プロジェクトを動作させる仮想マシンを、3 つに変更

しておきます6。

ここまで設定が終了したら、いよいよWindows Azureエミュレータ上で、このアプリケーションを動作させてみましょ

う。

2.4.1 動作確認

[CloudService1] プロジェクトをスタートアッププロジェクトに変更し、Ctrl + F5キーで実行します。その際、サ

ーバーエクスプローラーが PUBS.MDFを握っていると、エラーが発生するため、デタッチしてから実行してくださ

い。すると、タスクトレイ上に “Development Fabric” と呼ばれる Azure エミュレータ環境が起動し、この中でア

プリケーションが起動します。

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

ョンが動作しています。これについて以下に解説します。

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

に引き上げると、その分だけ課金が増えることになります。

2.4 開発用ファブリック上での動作確認

p.22

© 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.23

© 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.24

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

C. ポート番号

・ 開発環境では、運用環境とはロードバランサからのリクエストのルーティング方法が異なります。

上図を見てわかる通り、運用環境では、各VMマシンに対して、プライベート IPアドレスと、乱数

によるポートが定められ、フロントエンドのロードバランサからのリクエストがルーティングされま

す。

これに対して開発用ファブリック(開発環境)では、各ワーカープロセスに対して乱数によるポート

が定められ、フロントエンドのロードバランサからリクエストがルーティングされます。

・ ポート番号は、運用環境で利用する予定のポート番号とはずれてしまうことがあるのでご注意ください。

例えば、このサンプルアプリケーションを動作させると、ブラウザはポート番号 81 上でこのアプリ

ケーションを呼び出します。

これは、開発マシン上では、すでにポート番号 80が IIS 7.5にアサインされているため、使用で

きないからです。

このため、DFloadbalancer.exeは 80の代わりに 81(次の空きポート)を利用し、これをリスンす

る、という形になっています。

p.25

© 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.26

© 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.27

© 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 による監視が必要になりま

す。

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

グする機能を追加していきます。

サーバーをモニタリングするためのツールである、Diagnostic Monitor を使用したアプリケーション監視の方法に

ついて説明します。

2.5 Diagnostic Monitor によるアプリケーション監視

p.28

© 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.29

© 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.30

© 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.31

© 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.32

© 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.33

© 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.34

© 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.35

© 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.36

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

ここまでコンピュートサービスの監視方法について解説してきました。これらの説明からわかるように、現時点で

は、コンピュートサービスの監視 API は、比較的剥き出しのような状態で、残念ながら、使いやすいツール類が充

実しているとは言い難い状況です。3rd party製ツールとしては Cerebrata社の Azure Diagnostics Manager

などのツールが出てきていますが、コンピュートサービスの監視については、今しばらくは手作業で行う必要があ

ります。ただ、Diagnostic Monitor ランタイムの基本動作やその考え方については、今のうちにきっちり理解して

おいた方がいいため、一度触ってみることを推奨します。

p.37

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

いよいよ本章では、作成した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サービスの購入手順から説明していきます。

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 カスタマー ポータルを使用するためのプロファイル

登録を行います。

第3章

Windows Azure 運用環境への展開

3.1 Windows Azure の購入

p.38

© 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.39

© 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.40

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ ここでは [初期特別提供プラン] を選択し、 [今すぐ購入] をクリックします。

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

p.41

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

B. クレジットカードの登録と注文の確定

・ 支払い方法の入力画面からクレジットカードの情報を登録します12。

・ 新しいクレジット カードが選択されていることを確認して [次へ] ボタンをクリックします。

12 このプランは、無償範囲の利用であれば課金が発生しません。しかし、無償範囲枠を超えて利用すると、登録したクレジットカードに課

金が発生します。このため、無償範囲に注意しながら検証作業を進めてください。

p.42

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ 必要事項を入力したら、 [次へ] ボタンをクリックします。

すると、オンライン サブスクリプション契約が表示されます。

・ オンラインサブスクリプション契約をご確認いただき、問題がなければ [次へ] ボタンをクリックします。

以下の 2点に注意してください。

氏名の署名欄には、上に記載されている文字列の通り入力してください

姓と名の間に半角スペースが必要となりますので注意してください

・ 注文の確認および確定画面が表示されます。内容を確認して [注文の確定] ボタンをクリックします。

p.43

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

確認画面が表示されれば支払い情報の登録は完了です。この画面から引き続き Azure のアクティブ化を

行います。

3.1.3 Step 3 - Azure のアクティブ化

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

A. Azure のアクティブ化

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

p.44

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ [アクション] のリストから [今すぐアクティブ化] を選択し、[移動] ボタンをクリックします。

・ サービスのサブスクリプション名を入力し、[次へ] ボタンをクリックします。

サブスクリプション名は Azure で最初のプロジェクトの名称にも使用されます。

p.45

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ 続いてサービス管理者の情報を入力します。

すでに入力しているサービス購買の連絡先情報をコピーすることも可能です。

前述のサービス購買者と、ここで解説するサービス管理者との違いは以下の通りです。

企業で利用する場合は、購入手続きを行う部門と、実際にプロジェクトで利用する部門や

担当者が異なる場合がよくあります。

このような場合に備えて、それぞれ個別に指定ができるようになっています。

なお、Azure では、サービス購買者として登録したユーザーを「アカウントオーナー

(Account Owner)」、サービス管理者として登録したユーザーを「サービスアドミニストレ

ーター(Service Administrator)」と呼んで区別しています。

アカウントオーナーとサービスアドミニストレータは、後で示すWindows Azureのポータル画面

上では区別して表示されます。

p.46

© 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.47

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

ます)。

新たに先ほど作成したプロジェクトが追加されていることをご確認ください13。

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

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 というプロジェクトが存在しますが、これはβ版の頃から利用していた場合のみ表示されます。現在、新規にこの

作業を行った場合には、作成したプロジェクトひとつだけが表示されます。

3.2 各種サービスの初期設定と Windows Azure API Certificate の登録

p.48

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ データベースサービスの管理者アカウントのアカウント名とパスワードを入力し、データベースサーバー

の場所を選択します。

ここでは、場所に関しては [Southeast Asia] を選択することを推奨します。

・ [Create Server] ボタンをクリックしサーバーを作成します。

p.49

© 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.50

© 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.51

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

データベース作成後、[Connection Strings] ボタンを押すと、当該データベースにアプリケーションから接

続するのに必要な、接続文字列を確認することができます。

3.2.2 Windows Azure ストレージサービスの初期設定

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

p.52

© 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.53

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ [Storage Account] の画面で、アカウント名を付与し、アフィニティグループ16を作成してください。

ここで付与するアカウント名は、このストレージにアクセスする際の URL となるので、わかりやす

い名前を付与してください。

・ アカウント名を付与したら [Create] ボタンをクリックし、ストレージサービスを作成してください。

・ また、ストレージサービスを作成するデータセンタについては、必ず Southeast など、データベースサ

ービスを作成したデータセンタと同じ場所を選択してください17。

異なるデータセンタを選択してしまうと、データセンタまたがりの通信で、課金が発生することにな

ります。

16 アフィニティグループは同じグループ内のサービス(コンピュートサービスとストレージサービスなど)を同一センタ内の極力近くに配置す

るためのものです。近い場所に配置することを保証するものではありませんが、極力近い場所に配置するよう努力します。

17 なお、データセンタを指定する場合は、地域(Region)を指定する方法と、サブ地域(SubRegion)を指定する方法の 2つがあります。例

えば、地域として「アジア」を選択した場合、実際にサービスが配置される場所は、「東南アジア(シンガポール)」「東アジア(香港)」のど

ちらかになります(どちらになるかは不明)。一方、サブ地域である「東南アジア」「東アジア」を選択すると、そのサブ地域にあるデータセ

ンタにサービスが配置されます。サブ地域まで指定すると、確実にそのデータセンタに配置することができますので、こちらの方法での指

定を推奨します。

p.54

© 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.55

© 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.56

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ [Service Label] には任意の名前を付与してください。

ここで指定したラベルはポータルサイト上でのみ利用されるラベルとなるので、適当に付与して

構いません。

・ ラベルを付与したら、 [Next] ボタンをクリックしてください。

p.57

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ 次に、サービスの URL を決定するとともに、サービスを配置するデータセンタを選択します。

・ このとき、ストレージサービス作成時に作成したデータセンタと、アフィニティグループ名を指定します。

p.58

© 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.59

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ 下記コマンドを実行する

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\makecert" -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.60

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ [参照…] ボタンから、先ほど作成した証明書を選択し、[Upload] ボタンでアップロードします。

p.61

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

これで証明書の登録が完了となります。この証明書は、後で Visual Studioから Azure上へアプリケーショ

ンをデプロイする際に使用します。

以上で、Azure を使用する準備が整いました。次に、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 をお使いください。

3.3 SQL Azure データベースサービスへの移行

p.62

© 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.63

© 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=mmasuda2\sqlexpress"); 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.64

© 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.65

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

次に、ストレージサービスへの移行を説明します。

3.4.1 ストレージ接続文字列の設定

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

・ クラウドサービスプロジェクトの、プロパティ画面の [Settings] タブを開き、Diagnostic Monitorの接続

先となるストレージを、開発用ストレージ(development storage)から、運用環境の方に変更します。

・ 下図のように、 [Account Name] と [Account Key] を設定し、さらに接続方法として HTTPS プロト

コルを設定してください。

3.4 Windows Azure ストレージサービスへの移行

p.66

© 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.67

© 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.68

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

っており、簡単にストレージサービスの中身を確認することができます21。

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

基本的に、コンピュートサービスへアプリケーションを展開する場合には、まず Staging 環境にアプリケーションを

配置して、最終動作確認を行ったのち、これを Production 環境と入れ替えます。まずは Staging 環境へのアプリ

ケーションのアップロード方法について、以下に解説します。

3.5.1 インスタンス数の変更

まず、サーバーへのアップロードを行う前に、いったん仮想マシンのインスタンス数を 1 に減らしておきます。後

で解説しますが、コンピュートサービスでは、利用した仮想マシンの台数分だけ課金が発生します。このため、最

初の段階ではインスタンス数を 1 に減らして配置を行い、動作確認が取れてからインスタンス数を増やすのが鉄

則になります。

21 (参考) このツールは Microsoft が提供する非常に手軽なツールですが、開発用ストレージの中を見ることができない、データのダウ

ンロードやアップロードができないなど、実際に利用するには、機能不足というのが正直なところです。取り急ぎでざっくりデータを確認し

たい、という場合に利用すると便利です。

3.5 Windows Azure コンピュートサービスへの移行

p.69

© 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.70

© 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.71

© 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.72

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

3.5.3 Windows Azure コンピュートサービスの動作確認

しばらくすると、コンピュートサービスが起動します。Staging 環境では、配置されたアプリケーションにダミーの

URLが付与されます。画面上にある URLにアクセスして、Webアプリケーションの動作を確認してください。

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

p.73

© 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.1 開発用ファブリックと本番環境の相違点

開発用ファブリックと Azure 本番環境では様々な相違点があります。Azure 本番環境で問題となりやすい制

限事項としては、以下のようなものがあります。

この中でも、国際化対応に関連する問題は、よくひっかかりやすいポイントになります。例えば、以下のような簡

単な処理でも、Azure 環境では、開発環境とは異なる動きをします。

3.6 アプリケーションの修正と Azure 環境への再配置

p.74

© 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.75

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

・ 次に、ポータルサイトの Staging環境の [Upgrade…] ボタンをクリックし、発行された 2 つのファイルを

アップロードしてください。

配置の際には、ラベルとして、先とは異なる名称を付与しておくとよいでしょう。その他の項目

(Operating System Settings など)は既定値のままで構いません。

p.76

© 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.77

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

3.6.5 構成設定の変更

次に、ポータルサイトから構成設定を変更してみます。

・ ポータルサイト上で、[Configure…] ボタンをクリックしてください。

サービス構成設定ファイルを編集できます。

・ このファイルの中ほどに、<Instances count=”1” /> という設定があるので、これを適宜増やします。

ここでは 3 にしてみることにします。

・ 修正後、”Save” ボタンをクリックしてください。

インスタンス数増加には多尐時間がかかります。しばらくお待ちください。

p.78

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

しばらくすると、インスタンス数が 3になります。

・ この状態で動作確認してみてください。

インスタンス ID が時折切り替わることが確認できると思います。

3.6.6 本番環境への展開

最後に、いよいよこのアプリケーションを本番環境(”Production”)へと展開しましょう。このためには、ポータル

サイトのスワップ機能(入れ替え機能)を利用します。この画面の真ん中のボタンを押すと、二つの環境が入れ替

わり、運用環境にアプリケーションが配置されます。Staging 環境ではダミーの URL が付与されていますが、

Production環境に移すことにより、通常の URL(http://<アカウント名>.cloudapp.net)アドレスでアクセスするこ

とができるようになります。

p.79

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

Staging環境と Production環境の入れ替えは、ロードバランサのみで行われるため、すぐに終了します。

作業が終了したら、運用環境用の URL(http://<アカウント名>.cloudapp.net)にアクセスを行い、Web アプリ

ケーションが動作することを確認してください。

p.80

© 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.81

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

本書の全部または一部の無断複製・転載及び商用利用等を禁じます。

最後に本章では、Windows Azureの課金を安く抑えるためのコツについて解説します。

前提として、ここに書かれている情報は、2010年 6月25日時点での情報をまとめたものであり、また、あくまで参考

情報となっております。必ず、オフィシャルサイトの最新情報をご参照ください。

Windows Azure Platform オフィシャルサイト(日本語)

http://www.microsoft.com/japan/windowsazure/

Azureの課金の詳細については、Windows Azureのサイト(上記)に詳しくまとめられていますが、なかなかとっつ

きにくいのも確かだと思います。そこでここでは、課金に関するポイントを解説します。

Windows Azure プラットフォームでは、基本的に、「サービス」と「トラフィック」が課金対象になります。

サービスに対する課金に関しては、各サービスで課金方式が異なるため、注意が必要です。特に、開発中に課金

が膨らみやすいのはコンピュートサービスとなっています。そのため、コンピュートサービスの利用方法には、特に注

意してください。

4.1.1 トラフィックの課金

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

A. 同一拠点(≠ 同一地区)の Azure データセンタ内の通信に関しては課金対象ではない

同一データセンタ内に配置されたサーバー間の通信は課金対象とはなりません。例えば、コンピュートサー

ビス(Web ロールなど)と SQL Azure が同一のデータセンタ(例えばシンガポールなど)に存在する場合、そ

の間の通信に関しては課金がかかりません。しかし、コンピュートサービスが香港、SQL Azure がシンガポー

ルにあると、その間の通信に関してはトラフィック課金がかかります(この場合、両方のデータセンタで課金が

発生します)。

B. トラフィック課金の単価は、データセンタの場所によって異なる

クライアントユーザがどこにいるかではなく、サービスがどのデータセンタに配置されているのかによって課

第4章

Windows Azure 運用環境における課金

4.1 Windows Azure 運用環境における課金を安く抑える方法

p.82

© 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.83

© 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.84

© 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.85

© 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 データベースの容量はどの程度か?

サーバー台数の見積もりなどは、原理的に机上での評価が難しい領域になります。そういう観点からも、プロトタ

イピングなどを通して実機検証を行い、見積もり精度を高めていくことを推奨します。