Webアプリを創る 😊クリエイティブWeb

カテゴリー: クラウド・サーバー

SQL Azure を使ってみる

2009年8月26日

SQL Azure のCTP版の提供が8月18日から開始されていましたが、SQL Azure CTP のinvitation code が送られてきたので、Windows Azure とSQL Azureを試しています。ストレージとして、SQL Sever のみを使っているアプリケーションの場合は容易に Windows Azure 用にに変換して公開することが可能です。

SQL Azure は、SQL Server 2008 をベースにしていますが、SQL Server Management Studio(SSMS) のオブジェクト エクスプローラ等のGUIツールは、まだ利用できないということで、クエリのみが利用できるという状況です。今後のツール類の整備に期待したいと思います。

マニュアルは、現状では Windows Azure Platform Training Kit(August 2009 Update) を見ろということのようです。SQL Azure の使い方について少しメモ書きをしておきます。

1.SQL Azure への接続

1-1.SSMS を起動します。サーバーへの接続画面が表示されますがキャンセルボタンをクリックします。
1-2.「 新しいクエリ」ボタンをクリックします。SQL Azure へ接続する場合は、常にクエリからになります。
image
1-3 サーバーへの接続画面が表示されるので、管理者でサーバーに接続します。
サーバー名は、server_name.ctp.database.windows.net server_nameは、管理画面のServer Name: で表示されるサーバー名です。
認証は、SQL Server 認証 を選択します。
ログインは、管理画面のServer Admin: に表示される管理者を入力します。
パスワードは、登録したパスワードを使用します。管理画面には「Reset Password」ボタンがあるのでいつでも変更ができます。
image 
1-4 接続できると以下のエラーメッセージが表示されますが無視します。
image 

2. データベースとユーザーの作成

SSMSで使えるのは、クエリの画面だけなので、作業はすべてコマンドベースで行います。
2-1. データベースの作成
CREATE DATABASE データベース名
2-2. データベースの一覧の表示
SELECT * FROM sys.databases
2-3. ユーザーの作成
CREATE LOGIN ユーザー名 WITH PASSWORD=’パスワード’

3. データベースへのユーザー権限の設定

Azure SQL では、USE コマンドを使ったデータベースの移動ができません。別のデータベースにアクセスしたい場合は、接続をし直す必要があります。サーバーへの接続画面で、オプションボタンをクリックして、「接続プロパティ」タブを選択して、「データベースへの接続」の項目にユーザー権限の設定をしたいデータベースの名前を入力します。
image

3-1. データベースへのログインを可能にする
CREATE USER ユーザー名 FOR LOGIN ユーザー名
3-2. データベースに所有者権限を付与する。
EXEC sp_addrolemember ‘db_owner’, ‘ユーザー名’
以上で作成したユーザーで、新規データベースにログインして、作業ができるようになります。

4. データベースの移行

既存のデータベースをSQL Azure にインポートしたい場合は、SSMS でエクスポートしたいデータベースのスクリプトを作成して、それでSQL Azure にインポートします。
4-1. スクリプトの作成
SSMSでエクスポートしたいデータベースを選択して、右クリックをして、「タスク」の「スクリプトの生成」を選択します。
image
スクリプト作成ウィザードが起動されます。ウィザードにしたがって入力しますが、スクリプトオプションの設定では次の設定を変更します。
データのスクリプトを作成 True (データもエクスポートしたいため)
UDDTs を基本データ型に変換 True (SQL Azure では、ユーザー定義型は利用できない)
USE DATABASE のスクリプトを作成 False (SQL Azure では、USE は利用できない)
拡張プロパティのスクリプトを作成 False (SQL Azure では、拡張プロパティは利用できない)

4-2 スクリプトを SQL Azure 用に修正
SQL Azure は、SQL Server 2008 のサブセットであるため、SQL Azure で定義されていない機能を削除していきます。作成したスクリプトファイルをSSMS に読み込んで、以下の変更を行います。

    • スクリプトの最初にあるユーザー定義の削除
      /****** Object:  User [NT SERVICE]    Script Date: 08/26/2009 19:53:45 ******/
      CREATE USER [NT SERVICE] FOR LOGIN [NT SERVICE\MSSQL$SQLEXPRESS]
      GO
    • CREATE TYPE の削除
    • ON [PRIMARY] の削除
    • NOT FOR REPLICATON の削除
    • WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) を
      WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) で置き換える
    • XML SCHEMA COLLECTION 文の削除
    • CREATE PRIMARY XML INDEXPress 文の削除
    • ROWGUIDCOL の削除
    • SET ANSI_NULLS の削除

  

上記以外にも定義されていない機能があるので、SQL Azure に接続して、「解析」ボタンをクリックして、結果を確認してスクリプトを修正していきます。なお、「解析」を実行してもデータベースの更新はおこなわれません。  image

4-3. SQL Azure にインポート

SQL Azure に接続して、スクリプトを実行すれば、SQL Azure のデータベースにテーブル等がインポートされます。

  1. テーブル一覧の取得 SELECT * FROM sys.objects
  2. 照合順序の変更(ALTER DATABASE は使用できないため、列単位で指定)
    ALTER TABLE テーブル名 ALTER COLUMN 列名 列型 COLLATE Japanese_CI_AS
5. SQL Azure を使ったアプリケーションの作成

ローカルのSQL Server を使ってアプリケションを作成後、Web.config の接続文字列を修正する。Web.config の修正をする場合は以下の接続文字列を参考にして修正します。アプリケーションでの接続は、簡単でした。

<add name="AdventureWorksLT2008ConnectionString" connectionString="Initial Catalog=HoLTestDB;Data Source=REPLACE_SERVER_NAME.ctp.database.windows.net;encrypt=true;User ID=HoLTestUser;Password=REPLACE_HoLTestUser_PASSWORD;TrustServerCertificate=true;" providerName="System.Data.SqlClient" />

ActiveWebにUmbracoをインストール その2

2009年8月23日

以前 「ActiveWebにUmbracoをインストール」で、「管理画面で、Stylesheets、Templates、Scripts、XSLT を保存するときに、javascriptエラー「umbraco is not defined」が発生して保存ができない」と書きましたが、原因がわかりました。Web.config の設定ミスでした。「ActiveWebにUmbracoをインストール」の方を修正しておきました。また、トップページがIE6で見た場合かなり問題があったのですがそれも修正できました。これで、ActiveWeb で Umbraco をインストールして利用するのに問題はないので Umbraco の利用が増えればいいなと思っています。Umbraco については、バージョン4.1で仮想ディレクトリに対応するそうです。少し先のことですがそうなれば、さらに利用しやすくなると思っています。

Windows Azure を使ってみる

2009年8月7日

Microsoft 社が提供するクラウドサービス Windows Azure の概要と価格が7月14日に公表されたので実際にWindows Azure CTPを使用してみました。Microsoft のAzure のページから申し込むと3日後にinvitation code が送られてきて使用できるようになりました。Visual Studio にWindows Azure Tools for Microsoft Visual Studioを導入すれば、ストレージに関する部分を除いてはスムーズに移行することができました。
SQL Azure については、今春に仕様変更をした関係で、近くCTP版が使用できるようになるようです。SQL Azure は、SQL Server 2008 をベースにしており互換性が高く、既存のSQL Server ベースのアプリケーションをAzure上に容易に展開できるようなので、SQL Azure のCTP版が公開されたら本格的に使ってみようと思っています。

価格の方ですが、CPU 1時間あたり0.12ドル、ストレージ1ヶ月1GBあたり0.15ドル、ストレージトランザクションが1万回あたり0.01ドル、帯域幅が1GBあたり発信で0.15ドル、受信で0.1ドルです。Google App Engine と比較すると無料分がなく単価もやや割高です。どの程度割高か、無料分をWindows Azure を使用した場合の料金を試算してみると、Google App Engine では、比較的効率のよいアプリケーションで月500万ページビューを無料で処理できるということなので、AzureのCPU時間の計算をAmazon EC2 のCPU時間の計算と同じだと仮定して試算してみると、以下のように月額で1万円程度になります。小規模なホストでは、Google App Engine とではかなりのコスト差になると思われます。

項目 価格(ドル) 備考
CPU 86.40 24時間×30日×0.12ドル/時間
ストレージ 0.15 1GB×0.15ドル/GB
帯域幅(発信) 4.50 1GB×30日×0.15ドル/GB
帯域幅(受信) 0.90 発信帯域幅の20%と仮定
ストレージトランザクション 5.00 500万×1回×0.01ドル/1万回
1ページビューで1ストレージトランザクションと仮定
96.95  

Azure のCPU時間の計算は、発行(deploy)してから削除するまでの時間なので、Web ロールのように24時間立ち上げておく場合は、1ヶ月で24時間×30日分が必要になってくると思われます。Web ロールとWorker ロールの両方を使うと2倍の192.8ドルになると思われます。
こうしてみるとコストのほとんどがCPUの料金ということになりますが、割引も導入されると思われます。Google App EngineのCPU時間は、実際にアプリケーションが利用する時間を細かく計算するため、無料分の6.5時間で小規模なホストは無料で処理できるということのようです。

Azureには、SLA(Service Level Agreement)があること、Google App Engineでは利用できない.NET系の言語、PHP等の言語、SQL Azureを利用できるので、どちらのサービスを利用するかは、用途や開発者がどの言語やツールに慣れているかによっても選択されるように思います。月500万ページビューのサーバーが無料や1万円程度で運用でき、追加料金さえ払えば、すぐに大規模なシステムでの運用ができるということで、いずれにしてもクラウドのコストパフォーマンスのよさには圧倒されます。

クラウドを使用することにより、資金がなくてもアイデアとプログラミングの才能さえあれば,短期間で大規模なシステムを運用することが可能になります。ITの世界は今までも変化が非常に激しい世界ですが、クラウドによって、また栄枯盛衰の世の中が見られるように思われます。

Umbraco サイトで他のアプリケーションを実行

2009年6月20日

Umbracoは、サイトのドキュメントルートにインストールする必要がありますが、Umbracoをドキュメントルートにインストールすると、同一サイトのバーチャルディレクトリやサブフォルダにインストールしてあるアプリケーションに下の図のようなエラーが発生して動作しなくなります。エラーが発生する原因は、構成ファイルWeb.configがすべての子ディレクトリに適用されるため、不要なものまでが子ディレクトリに適用されるためです。なお、以下の修正は、IIS7の統合モードを使用している場合で、それ以外のモードを使用している場合は、system.webの修正になります。

参考:
web.config and other IIS applications
入れ子になった ASP.NET アプリケーションを動作させる!

修正方法1 inheritInChildApplications属性を使用して継承をしないようにする

ドキュメントルートのWeb.configのsystem.web及びsystem.webServerセクションを以下のように修正してinheritInChildApplications属性をfalseにして、子ディレクトリへの承継をしないようにする。

<location path=”.” inheritInChildApplications=”false”>
<system.web>

</system.web>
</location>

<location path=”.” inheritInChildApplications=”false”>
<system.webServer>

</system.webServer>
</location>

なお、ActiveWebでは、各バーチャルディレクトリを作成すると生成されるWeb.configの<system.webServer><handlers>…</handlers></system.webServer>の内容については、通常は承継されるので省略できますが、この方法を使用すると承継されなくなるので省略することができなくなります。

修正方法2 clear要素または、remove要素を使用して継承した参照を削除

各バーチャルディレクトリのWeb.configについて、system.webServerセクションのmodulesセクションの承継をclear要素を追加して承継を削除します。ActiveWebでは、Clear要素でうまくいかず、remove要素で、UrlRewriteModule、umbracoRequestModule、viewstateMoverModule、umbracoBaseRequestModuleの4つもモジュールを指定してはずすとうまく動作しました。なお、アプリケーションにより他のモジュールについても承継を削除する必要があります。
<system.webServer>
  <modules>
    <clear />
    ————–
    ————–
  </modules>
</system.webServer>

以上でうまくいかない場合
<system.webServer>
  <modules>
    <remove name=”UrlRewriteModule” />
    <remove name=”umbracoRequestModule” />
    <remove name=”viewstateMoverModule” />
    <remove name=”umbracoBaseRequestModule” />
    —————————————————-
    —————————————————-
  </modules>
</system.webServer>

image

ActiveWebにUmbracoをインストール

2009年6月20日

ActiveWeb共用ホスティングサービスのホストにUmbracoをインストールしました。インストールはできましたが、問題点があって苦労したところもあるので以下にインストールの手順の概要をまとめておきます。なお、Umbraco のweb.configをアップロードした時点で、同一サイトの他のアプリケーションがエラーになって見えなくなってしまうので注意してください。回避方法は、Umbraco サイトで他のアプリケーションを実行に記載しました。

1.MSSQLかMySQLどちらかのデーターベースを用意します。

2.umbracoをダウンロードして、解凍する。ActiveWebは、標準ではIIS7の統合モードで動作しているため、CodePlex のダウンロードサイトから、Web.config file to use with .NET 3.5+ をダウンロードしてWeb.config ファイルを置き換えます。

3.通常のようにインストールをしていると、ActiveWebではWebページからのドキュメントルートへの編集を許可していないため、以下のようにインストール中にエラーが発生し、インストールを続行できなくなります。インストールを続行できるように修正したinstall/steps/detect.ascxのバージョンをここからダウンロードして置き換えます。
参考:Installing v4.0.0 on a Plesk shared host
image

4.Web.config ファイルについても修正します。通常は、インストール画面でデータベースの設定ができますが、3に書いた理由でWebページからWeb.configファイルの修正ができません。そのため事前に<appSettings>セクションにあるumbracoDbDSNの設定を手作業で行っておく必要があります。umbracoDbDSNの設定は、以下のようになり、赤字の部分をActiveWebのコントロールパネルで設定したデータベース名、データベースユーザーの名前、パスワードに変更します。

SQL Server を利用する場合
<add key=”umbracoDbDSN” value=”datalayer=SqlServer; server=dwprdb01.dataweb.ne.jp;database=DATABASE;user id=DBUSER;password=PASSWORD” />

MySQL を利用する場合
<add key=”umbracoDbDSN” value=”datalayer=MySQL; server=dwpmysqldb01.dataweb.ne.jp;database=DATABASE;user id=DBUSER;password=PASSWORD” />

また、<system.webServer>セクションに、ActiveWebのドキュメントルート(httpdocs)にある既存のweb.config内の<handlers>…</handlers>をコピーして追加してやります。
(以下、2009/8/23追加)ただし、以下の行については、Umbraco側でも”*.asmx”が定義されていて衝突するので、削除するかコメントアウトします。
<add name=”Plesk_Handler_xxxxxxxxxx” path=”*.asmx” verb=”GET,HEAD,POST,DEBUG” type=”System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” scriptProcessor=”C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll” resourceType=”Unspecified” />

5.ドキュメントルート(httpdocs)の直下に、以上で修正したApp_Browsersほか14のフォルダーとdefault.aspx、site.py、web.configファイルをアップロードします。Umbracoは、バーチャルディレクトリでは、動作しないことに注意してください。

6.コントロールパネルのファイルマネージャを使って、app_code, bin, config, css, data, masterpages, media, python, scripts, umbraco, usercontrols, xsltのフォルダーに対して、Plesk IIS User と Plesk IIS WP User にアクセスパーミッションで編集を許可に設定します。

7.Webサイトにブラウザーでアクセスするとインストールが始まります。画面にしたがってインストールをすすめます。通常のインストールとの違いは、detect.ascxを入れ替えたことにより、データベースの設定画面で「install」ボタンが追加されているので「install」ボタンをクリックするとエラーが発生せずインストールを継続できます。
image

8.インストールの完了の前に以下のようなエラーが発生します。インストールはできていて、web.config ファイルへの書き込みに失敗しているだけなので、web.configファイルを手作業で修正します。修正は、web.configファイルの<appSettings>セクションのumbracoConfigurationStatusの値をインストールしたUmbracoのバージョンにします。

<add key=”umbracoConfigurationStatus” value=”4.0.2.1″ />

image

9.管理画面で、Stylesheets、Templates、Scripts、XSLT を保存するときに、javascriptエラー「umbraco is not defined」が発生して保存ができません。Umburaco のフォローラムによるとIISの設定でwildcard script mapping を使用していることが原因のようですが、ホスト側の設定の問題なのでActveWebで設定してもらうしかありません。原因がはっきりすれば要望を出そうと思っています。現在のところは、ローカルにインストールしたUmbracoで作成・修正して、作成・修正したファイルをアップロードして対応しています。
参考:Cannot save templates or stylesheets: “umbraco is not defined” JavaScript error
(2009/8/23削除、4の追加でWeb.configを修正することにより問題が解消したため)