2010年4月25日 (日)

SQL Azureに接続する場合の注意点

SQL Azureに接続する方法は、①Windows Azure上に配置したアプリケーションから接続する方法と、②ローカルの開発環境などAzure以外の環境から接続する方法の2通りがあります。

今回①の方でちょっとだけひっかかりました。うまくSQL Azureに接続できないのです。

本当はどちらの場合も同じで、AzureのWeb画面に表示される接続文字列を指定してアクセスするだけなのですが、注意点として以下の2つがあります。

注意点1.SQL Azure側のFirewallの設定で、クライアント側(※1)のIPアドレスを許可すること。

注意点2.普通は接続文字列から「Encrypt=True;」は省くこと。

※1:アプリケーションが動作している環境のこと。ブラウザが動作している環境ではないです。

②のローカルの開発環境から接続する場合はこれでやっていましたが、①は「SQL AzureとWindows AzureのAzure同士なんだからいけるだろう」と勝手に思い込んで、見事にエラーになってしまいました。

で、Windows Azureに配置するものはリリースビルドなのでエラーメッセージとかもでないようにしてあります。だから①の設定が必要なんだと気が付くのにちょっと(10分くらい)時間がかかりました。

このことに気が付けば簡単かというとそうではなく、「じゃあWindows AzureのIPアドレスって何?」という問題になります。

一度デバッグビルドをAzureに配置するなどしてエラーメッセージを見ればエラーメッセージ中に親切に許可すべきIPアドレスが表示されるのでわかるのですが、再配置するとIPアドレスが変ってしまいます。

どうすればいいんでしょうか?私はとりあえず、自分のAzureのURLにローカルからPingをうってみました。Ping自体は拒否されるようですが、IPアドレスは表示されたのでなんとかなりました。

もっとスマートな方法がありそうな気がします。

ちなみにSQL Azureのファイアーウォールの設定は変更後5分程度待たないと反映されないときがあるというようなメッセージがでますが、いまのところ、5秒~20秒くらいですぐ反映されるようです。

■補足

●注意点①を守らなかった場合のエラーメッセージ

一部 xxx にしてあります。

Cannot open server 'xxxxxxxxxx' requested by the login. Client with IP address 'xxx.xxx.xxx.xxx' is not allowed to access the server.  To enable access, use the SQL Azure Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range.  It may take up to five minutes for this change to take effect.
Login failed for user 'xxxxxxxx'.

●注意点②を守らなかった場合のエラーメッセージ

サーバーとの接続を正常に確立しましたが、ログイン前のハンドシェイク中にエラーが発生しました。 (provider: SSL プロバイダ, error: 0 - 証明書の CN 名が渡された値と一致しません。)

| | コメント (0) | トラックバック (0)

2010年4月24日 (土)

キリマンジャロはSQL Azureを救う

以前からひきつづき掲示板プログラムのAzure環境への移行をやってます。

今回はいよいよSQL Azureにデータベースを移行しようとしたのですが、いやいや面倒です。

というか、現時点ではツールがでそろってないです。2010年5月にSQL Server 2008 R2がリリースされればだいぶ楽になりそうでした。

というのもSQL Azureのデータベース作成はWeb画面から簡単にできて、その画面にはプログラムから接続する場合の接続文字列まで表示してくれるので、「これは楽勝でいけるかな?」と思っていたのですが、いざ、テーブルを作成したりデータを移行する段階になると手段がよくわからないのです。

まず、手元にあったSQL Server 2008のManagement StudioではSQL Azureに接続できませんでした。エラーになります。Webで検索すると実はエラーがでても接続自体はできていてクエリ機能だけは使えるらしいのですがこれでは不便です。

次にVisual Studio 2010のサーバーエクスプローラで接続してみたところ、うまくいったように見えましたが、こちらのクエリウィンドウはSELECT文が前提になっており非常に使いにくいです。

で、結局どうしたかというと、SQL Server 2008 R2 ベータ版(正確には2009年11月のCTP版)のManagement Studioを落としてきてそこから接続しました。これならいけます。

…が、普通のSQL Serverよりはできることが少ないみたいです。SQL Azure自体がSQL Serverより機能が少ないということもありますが、それよりもManagement StudioがSQL Azureに対応していない部分が多い印象でした。たとえば、テーブルのデザイン変更がGUIでできないです…。5月リリースの製品版ではいけるんでしょうか?

とはいえ、 親切機能もついています。たとえば、スクリプト生成時にSQL Azure向けスクリプトを生成する機能がありました。これは楽チンです。

SQL Server 2008 R2でSQL Azure向けスクリプトの生成

ちなみにManagement Studioを使って、SQL Azureに接続するときのサーバー名は、SQL AzureのWeb画面に表示されているサーバー名のxxxx.database.windows.netです。

ユーザー名とパスワードは自分で設定したものを入力するとして、注意点としてAzure側のファイアーウォールの設定をしていないと接続できません。

さいわい、ファイアーウォールが原因で接続に失敗している場合は、エラーメッセージにIPアドレスが表示されてわかりやすくなっていますので、SQL AzureのWebの設定画面でFirewall Settingsを選び、表示されたIPアドレスを含むIPアドレス範囲を許可してあげます。

たとえば、IPアドレス100.200.210.220がエラーメッセージに表示されている場合、Firewall Settingsには次のような設定をします。

Rule Name    IP Address Range

MicrosoftServices    100.200.210.220 - 100.200.210.220

SQL AzureとSQL Serverでは違いもあるのでプログラム修正が必要になる部分もあります。たとえば時間が全部GMTになるとか、照合順序とか、マルチバイトの文字列を指定する場合は N' ' にするとかです。

忘れてました。参考になるわかりやすい資料をマイクロソフトが公開していますのでリンクしておきます。私もこれを見ました。

http://www.microsoft.com/japan/sqlserver/2008/r2/technology/self-learning.mspx

これの一番下の「SQL Azure 入門」です。

| | コメント (0) | トラックバック (0)

2010年4月18日 (日)

Visual StudioでAzureプログラミングをするときの基本的なエラーメッセージ

いくつか疑問はあるものの、SQL Azureも構築し、順調にAzureの調査は進んでいます。

Visual Studio 2008でテストアプリを作るときに遭遇したメッセージを2つだけですが、メモっておきます。もしはまっている人がいて参考にしてくれればと思います。日本語訳は英語が苦手な私の訳なんであまり期待しないでください。

あと、私もまともに本も読まずかなり適当にAzureをやっていますので、ここで出している情報もまぁそのくらいの品質と思ってください。

■メッセージ1:「管理者として実行」する必要がある。

Windows Azure Tools for Microsoft Visual Studio

The Development Fabric be run elevated. Please restart Visual Studio in elevated administrator mode in order to run the project

日本語訳

開発ファブリックを起動する必要があります。プロジェクトを実行するにはVisual Studioを管理者として実行してください。

意味と解決方法

Windows Azure Cloud Serviceプロジェクトで作成したプログラムを実行するには、Visual Studioを管理者として実行する必要があるようです。このメッセージがでたらVisual Studioを一度終了して、あらためて、Visual Studioのアイコンを右クリックし「管理者として実行」をしてみてください。

■メッセージ2:SQL Server Expressが必要です。

Windows Azure Tools for Microsoft Visual Studio

Failed to initialize the Development Storage service. See output window for more information

日本語訳

開発ストレージサービスの初期化に失敗しました。出力ウィンドウのメッセージを見てください。

意味と解決方法

出力ウィンドウのメッセージによるのだとは思いますが、私の場合はSQL Server Express Editionを起動し忘れていてこのメッセージがでていました。SQL Server Express Editionを実行していないとアプリケーションを開始できないんですね。

ちなみにこのとき出力ウィンドウに表示されていたメッセージです。

Windows Azure Tools: Failed to initialize the Development Storage service. Unable to start Development Storage. Failed to start Development Storage: the SQL Server instance ‘localhost\SQLExpress’ could not be found.   Please configure the SQL Server instance for Development Storage using the ‘DSInit’ utility in the Windows Azure SDK.

| | コメント (0) | トラックバック (0)

2010年4月16日 (金)

Azure挑戦

Visual Basic 中学校の掲示板は私がVBでプログラムしたものなのですが、無料のホスティングサービスが終わってしまったためにWeb上で公開できなくなってしまいました。

再開するには別のサービスを探すか、自分でサーバーを立てる必要があるのですが、ちょうどマイクロソフトが今年からAzure(アジュール)という名のホスティングサービスを開始したのでAzureに初挑戦してみました。

従来のホスティングサービスとは要は単なるレンタルサーバーのことで、自分がVBで作ったWebアプリケーションをFTPなどでコピーするとそれにURLがついてみんなで使えるようになるというものだったのでAzureも似たようなものだろうと思っていたのですが、ちょっと違いますね。

正直まだ考え方とかがよくわかってなくてつらいです。とりあえずHelloWorld的なアプリケーションを公開するところまでできました。

■契約編

まず最初の契約がわかりにくくて困りました。英語です…。

https://mocp.microsoftonline.com/Site/ProductCatalogPostSignIn.aspx

なんとか契約したものの何から手をつければいいのかも??です。

とりあえず、ホスティング(自分がVBで作ったWebアプリをマイクロソフトが管理しているサーバー上で動かしてURLをつけてWebに公開すること)がしたいので、「New Service」をクリックし「Hosted Service」を選択しました。これで取得したいURLや、サーバーの場所を選択すればとりあえずガラは完成のようです。

※サーバーの場所は日本はないです。一番近そうなEast Asiaにしておきました。たぶん、上海?

■環境構築編

あと、Visual StudioでAzureを簡単に利用するため(?)の追加のツールをインストールする必要があるので注意してください。Visual Studio 2010ならはじめからこのツールが入っていると思います。

http://www.microsoft.com/downloads/details.aspx?familyid=5664019E-6860-4C33-9843-4EB40B297AB6&displaylang=en

念のために書いておきますが、このツールはVisual Studio用のツールなのでVisual Studioが入っていることが前提です。無料版のVisual Web Developer Expressでも使えますが、Visual StudioのStandard Editionはダメらしいです。

OSはVista以上必須です。

あと、もう1つ要件としてSQL Server Express Editionが必要です!

■プログラム編

それで、あとはここに日本語のチュートリアルがあるからなんとかなるかなと思っていました。

http://msdn.microsoft.com/ja-jp/azure/dd172099.aspx

が、ちょっと情報が古い&肝心なところがよくわからないでやや苦労しました。

はじめの「Windows Azure Tools for Microsoft Visual Studio の操作方法の概要」はわかりやすく書いてあり環境さえととのっていれば中学生でもいける感じでした。

ただ1箇所だけ途中ででてくるサンプルの中の RoleManager.WriteToLog はベータ版でのみ有効なものらしくエラーになってしまいます。ここでテンションが下がりました。(書いてあるとおりにやってるのにエラーになるとテンション下がりますよね。)

Webで調べた結果 System.Diagnostics.Trace.WriteLine に置き換えればいいことがわかったのでなんとか突破できました。なお、System.Diagnostics. は省略しちゃだめです。

■配置編

完成したかる~いプログラムをとりあえずAzure上で動かして一般公開してみようとしましたが、う~ん。あまりお手軽ではないですし、チュートリアルの「Windows Azure へのサービスの配置」がすごくわかりにくいです。というかいまだによくわかりません。

とりあえず、こうしたらできたというのを書いておきます。

1.Visual StudioのソリューションエクスプローラーでCloudService1を右クリックして「発行」。発行すると設定用のWeb画面も開くのでログインしておく。

2.設定用Web画面で、Summaryページで設定したHosted Serviceをクリックする。

3.Productionという立方体が表示されるので、その右にある矢印(?)をクリックする。

4.Stagingという立方体が表示されるので、その下にある「Deploy」をクリックする。

5.配置するファイルを選択する画面になるので、上のファイルに拡張子がcspkgのファイル、下のファイルに拡張子がcscfgのファイルを入力、Deployをクリック。(このファイルは1の「発行」時に生成されたもの。このファイルのあるフォルダーは発行時に自動的に開く)

6.ちょっと待つと配置が完了する風の表示が出るので、今度はProductionの方のDeployをクリックする。

7.ちょっと待つと配置が完了する風の表示が出るので、今度はProductionのRunをクリックする。

8.10分くらい待つ。

9.表示がReadyになれば完了!その下にあるURLにアクセスすると自分が作成したアプリにアクセスできる。

■感想

書いて疲れました。早く掲示板を配置したいですがもうちょっとかかりそうな雰囲気です。

| | コメント (0) | トラックバック (0)