MSDNの Channel9 における人気番組 Cloud Cover。
今回はいつもの Wade と Steve に加え、SQL Server / Azure のエバンジェリスト Roger Doherty をゲストに迎え、オンプレミスな SQL Server から SQL Azure への移行と、データベースの更新の方法についてお届けします。
まずはいつものようにニュースから。
◆ Our Datacenters are Awesomeness in a Box
「うちのデータセンターは “Awesomeness(すごい)” が詰まっているんだぜ」、といった感じで、マイクロソフトのクラウドサービスの基盤となるデータセンター自慢(?)のブログエントリー(ビデオが中心)。
ちなみに、マイクロソフトの Windows Azure や O365、あるいは Windows Live といったクラウドサービスの基盤は、Global Foundation Service (GFS) という部門が担当しています。
◆ Blob Download Bug in Windows Azure SDK 1.5
Windows Azure SDK 1.5 を使用した際に、Blob のダウンロードでエラーが発生することがある(コネクションが切れた場合)、というバグに関する情報です。
このバグはすでに修正されており、新規に SDK をインストールする場合は修正済みのモジュールが、修正前の SDK を利用されている場合は、上書きインストールによって問題が修正されます(修正前SDKのアンインストールは必要ありません)。
なお、修正前のバージョンは SDK version 1.5.20830.1814 です。修正後のバージョンは1.5.20928.1904 ですので、コントロールパネルの「プログラムと機能」からご確認ください。
◆ Windows Azure Marketplace Now Available in 26 Countries
Windows Azure 用に作成したアプリケーションを販売するためのオンラインストアである Windows Azure Marketplace が 26 の国で利用可能になっています。もちろん、日本でも利用可能です(ただし、申し込み等は英語で行っていただく必要があります)。
ざっくりいえば、CSV(Cloud Service Vendar) が SaaS 形式でアプリケーションを提供する際の、課金のための基盤を提供する仕組みになります。販売価格の 20% がマイクロソフトへ支払われ、残りの 80% を CSV が得ることができる配分形式になっています。
Windows Azure では、課金状況を確認するための仕組みが用意されているため、クラウドサービス利用者(CSV が用意した SaaS の利用者)の購買状況に合わせて、サービスを提供することが可能になります。
Widnows Azure Marketplace の具体的な利用方法等は、App Publishing Kit にまとめられていますので、「Windows Azure を基盤に Saas で一儲け」、という場合にはぜひ。
なお、Marketplace は課金しない(Free) で、アプリケーションの登録のみをすることもできます。まだ見ぬ世界(現時点で26か国)に向けて、アプリケーションを発信、といった際にもご利用いただけますので、そちらの用途でもぜひご検討ください。
◆ Microsoft Expands Data Platform with SQL Server 2012, New Investments for Managing Any Data, Any Size, Anywhere
米国における SQL Server のコミュニティ PASS において、SQL Server の次期バージョン(コードネーム Denali (デナリ))が、正式に 「SQL Server 2012」、となることが発表され、合わせて多くの機能強化についてアナウンスされました。
そして、重要な点として、SQL Server 2012 と SQL Azure は、エンジンを共有しており、SQL Server 2012 のリリースに先駆けて SQL Azure にも新機能が提供されつつある、ということが挙げられます。
ということで、いよいよ本日の本題 SQL Azure の話題へ。
SQL Azure は継続的にサービス改善が行われており、夏ごろには SQL Azure 管理ポータルのアップデートや、スケーラビリティの強化やツールの改善、あるいは SQL Server 2012 の新機能の一つであるクエリ結果のページングの機能や T-SQL におけるエラーの再スロー、などが先行して利用可能になっています。
※ SQL Server 2012 の新機能に関しては、SQL Server 2012 (コードネーム “Denali”) の自習書シリーズで非常にわかりやすく解説されています。Azure で先行して利用できる機能として Roger が言及しているページングとエラーの再スローについては、「SQL Server "Denali" CTP3 新機能ダイジェスト」にて説明が行われています。
また、開発生産性の強化にも力を入れています。最近のデータベースアプリケーションの開発者があまり T-SQL での開発を行っていない、ということも理解しており、今回の SQL Server 2012、および SQL Azure では、開発ツールの強化にも力を入れ、よりモダンなデータベースアプリケーションの開発エクスペリエンスの提供を目指しています。
開発ツールの機能強化に関しては、コードネーム “Juneau” (ジュノー) として開発が行われています。
"Juneau" のリリースにおける正式名称は、 SQL Server Data Tool となり、SQL Server 2012 の機能としてリリースされる予定です。このツールを使用することで、オンプレミスの SQL Server から SQL Azure へのデータベース移行や、SQL Azure のスキーマ更新等を効率的に行うことが可能になります。
ということで、このツールのデモ、として登場したのは Roger が Ugly (アグリー) なサンプルと謙遜する ASP.NET & SQL Server なオンプレミス Web アプリケーション。
このアプリケーションをターゲットとして、SQL Server Data Tool でどのように開発できるか見ていきたいと思います。
SQL Server Data Tool は、Visual Studio をベースにした SQL Server および SQL Azure 対応のデータベースアプリケーションの開発支援機能です。
今回デモで利用する Web アプリケーションですが、さくっと Kinect Bike のデータを追加したり、レポーティング機能を使って、在庫状況を確認したりできるアプリケーションになっています。
この Web アプリケーション、およびデータベースを SQL Azure へ移行させていきます。
早速 Viusla Studio の Data Tool でデータベースの情報を見ていきたいと思います。
まず①が、データベースのスキーマ情報です。
テーブルごとに テーブル名.sql といったファイルが用意されています。中身としては create table 等の DDL (Data Difinition Language) で書かれたスキーマ情報が格納されています。この情報は、Team Foundation Server 等の構成管理ツールで管理を行えるので、スキーマの変更情報を記録することが可能です。
次に②の部分が、現在接続しているデータベース サーバーの生のデータベースに関する情報です。データベースごとのテーブル情報等を確認できるほか、実際に格納されているデータを見ることもできます(③)。
さて、このスキーマ情報、ダック、と呼ばれる単位で抜き出すことが可能です。
ダック、とは “DAC”、Data Tier Application Component の略で、データベースのスキーマ情報(先ほどの Visual Studio の画面ショットにおける ① の部分の情報)をまとめたものです。
※ DAC に関する日本語での情報は、蒼の王座の「DACフレームワークで簡単なデータのインポート&エクスポート」も参照ください。
もう一つ、非常に似た言葉で、バックパック(bacpac) というのが出てきます。bacpac は、スキーマとデータを合わせた情報になります。
今回 Roger が使用しているコマンドは、彼が作成したスクリプトで、オンプレミスの SQL Server から bacpac を作成し、SQL Azure へのデータベース移行を自動で行ってくれるスクリプトになっています。
ちなみに以下が、このスクリプト実行の最中に実際に作成された bacpac 情報。
さて、Roger は今回 SQL Server から SQL Azure への移行に先立って2つの作業を行っています。一つは、Windows Azure 上に (先ほど ugly と言っていた) Web アプリケーションを用意すること。もう一つは、Reporting 用の機能を Azure 上で準備しておくこと、です。
Windows Azure のポータルから、(この夏に更新が行われ、新しくなった)SQL Azure の管理ポータルへ移動し、データベースの状態を確認してみると、テーブルやデータが移行されているのを確認することができます。
次はデータベースのスキーマ更新の作業を見ていきたいと思います。先の画面ショットで①として説明した個所から始めましょう。
右側にある “テーブル名.sql” なファイル(画面右の枠囲み)をクリックすると、テーブルのスキーマ情報がビジュアルなデザイナの中で(画面中央上部の枠囲み)、あるいは DDL な情報(画面中央下部の枠囲み)として表示されます。
このスキーマ情報は、Visual Studio 上でデザイナからでも DDL 情報からでも編集を行うことが可能です。試しにデザイナ上からカラムを一つ削除してみます。
すると、Visual Studio が現状のスキーマ情報をチェックし、参照エラーになる旨報告してきました。
エラーをダブルクリックすると、削除したカラムを参照している View の定義文が出てきます。こちらの View の定義における参照をさくっと、削除しましょう。
この変更は、スキーマ情報の定義に対して行った変更であり、実際のデータベースに対して行った変更ではありません。
次にこのスキーマの変更を、実際のデータベースに対して適用しましょう。まずは、適用するデータベースのプラットフォームを選択します。今回は先ほど移行した SQL Azure のデータベースに対して、変更を適用します。
この時点で、プラットフォーム依存により動かない可能性のあるスキーマ情報に対しては、Visual Studio がエラーを出してくれます(今回 Roger が行った変更では特に出てきません)。
以上の作業を通じて、DAC 情報をまとめた dacpac というファイルができます(ややこしいですが、dacpac はスキーマ情報のみを持っています)。
この dacpac をデータベース管理者に渡して、稼働中のデータベースのスキーマのアップグレード作業を行ってもらいます。この作業は SQL Server Management Studio から、該当データベースに対して “Update Data-tier Application..” のコマンドを実行することで可能です。以下は、SQL Azure にある Roger のデータベースに対して DAC 更新を行っているところです。
立ち上がってきたウィザードで先ほど作成した dacpac の情報を渡すと、既存のデータベースに対して変更を行った際の注意点等が上がってきます。今回はカラムを削除する変更のため、既存のデータがなくなる可能性を指摘されていますが、デモということでそのままスキーマ変更を進めます。
以上で、SQL Server 上のデータベースを SQL Azure へ移行し、また、SQL Azure に対してデータベーススキーマを更新する作業が終了しました。
この SQL Server Data Tool ですが、現在 bacpac の機能(スキーマ+データ)に関しては、プレリリース(正式リリースではない)となっていますが、dacpac の機能(スキーマ)に関しては正式版となっています。DAC においてサポートされる SQL Server オブジェクトや SQL Server のバージョンなどは「SQL Server オブジェクトとバージョンの DAC サポート」を確認してください。
最後に Web アプリケーションを確認しましょう。
Windows Azure で稼働する、SQL Azure を使った ugly な Web アプリケーションが下記のように動作しています。
レポーティングの機能もしっかり動いていますね。
ということで、以上で SQL Server Data Tool の紹介は終了です。
では最後に恒例の Tip of the Week
Steve の Blog 「Skipping Windows Azure Startup Tasks When Running in the Emulator」から、エミュレーター上で Windows Azure アプリケーションを実行する際に、スタートアップタスクを省略するための方法の紹介です。
エミュレーター環境においては、本番環境と環境が異なるため、すべてのスタートアップタスクの実行が必要となるわけではありません。
SDK 1.5 では、アプリケーションが Windows Azure 環境で動作しているのか、あるいはエミュレーター上で動作しているのかを知る方法として、.NET のコードからであれば RoleEnvironment.IsEmulated を使って確認することが可能になりました。
RoleEnvironment.IsEmulated を使って
また、スタートアップタスクなど、.NET のコードでない場合は、スタートアップタスクでランタイムの設定情報を環境変数として取得することが可能になっています。これを利用することで、エミュレータ環境では必要のないスタートアップタスクの実行を省略することが可能になります。
今回は上記の目的のために IsEmulated の値を取得していますが、その他にもさまざまな値が取得可能です。利用可能な値については、“xPath Values in Windows Azure” および “WebRole Schema” を参照ください。
今回のクラウドカバーは以上です。
それでは!