Windows Azure

Windows Azure SDK 1.2からWindows Azure SDK 1.3へアップグレードすると、Windows Azure上で動作するアプリケーションで、ログ送信が止まってしまう可能性があります。問題が発生している事例をいくつか発見しています。
しかし、この問題は必ず発生するものではありませんが、もし、この問題に遭遇した場合は、MonAgentHostのイベントログを確認する必要があります。下のようなログが記録されているかもしれません。

[Diagnostics]: Checking for configuration updates 11/30/2010 02:19:09 AM.
[MonAgentHost] Error: MA EVENT: 2010-11-30T07:21:35.149Z
[MonAgentHost] Error:   2
[MonAgentHost] Error:   4492
[MonAgentHost] Error:   8984
[MonAgentHost] Error:   NetTransport
[MonAgentHost] Error:   0
[MonAgentHost] Error:   x:\rd\rd_fun_stable\services\monitoring\shared\nettransport\src\netutils.cpp
[MonAgentHost] Error:   OpenHttpSession
[MonAgentHost] Error:   686
[MonAgentHost] Error:   0
[MonAgentHost] Error:   57
[MonAgentHost] Error:   The parameter is incorrect.
[MonAgentHost] Error:   WinHttpOpen: Failed to open manually set proxy <null>; 87
[MonAgentHost] Error: MA EVENT: 2010-11-30T07:21:35.249Z
[MonAgentHost] Error:   2
[MonAgentHost] Error:   4492
[MonAgentHost] Error:   8984
[MonAgentHost] Error:   NetTransport
[MonAgentHost] Error:   0
[MonAgentHost] Error:   x:\rd\rd_fun_stable\services\monitoring\shared\nettransport\src\netutils.cpp
[MonAgentHost] Error:   OpenHttpSession
[MonAgentHost] Error:   686
[MonAgentHost] Error:   0
[MonAgentHost] Error:   57
[MonAgentHost] Error:   The parameter is incorrect.
[MonAgentHost] Error:   WinHttpOpen: Failed to open manually set proxy <null>; 87
[Diagnostics]: Checking for configuration updates 11/30/2010 02:20:11 AM.

このエラーは、Diagnostic Monitor がテーブルストレージにログを送信しようとするたびに、DiagnosticsAgent.exe(Windows SDK 1.2までは、MonAgentHost.exe)が書き込んでいます。

*. ScheduledTransferPeriod()ファンクションで使用するdiagnostics monitorツールからログを送信しようとした時に発生します。

回避策

この問題を解決するには、ServiceDefinition.csdef の<sites></sites>セクションを削除するかコメントアウトします。

<?xml version="1.0" encoding="utf-8"?>

<ServiceDefinition name="Your_Service_Name" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">

  <WebRole name="MyWebRole" enableNativeCodeExecution="true">

    <!–<Sites>

      <Site name="Web">

        <Bindings>

          <Binding name="Endpoint1" endpointName="Endpoint1" />

        </Bindings>

      </Site>

    </Sites>–>

    <Endpoints>

      <InputEndpoint name="Endpoint1" protocol="http" port="80" />

    </Endpoints>

    <Imports>

      <Import moduleName="Diagnostics" />

    </Imports>

  </WebRole>

</ServiceDefinition>

注意点

注意すべき点は、<sites></sites>セクションをサービス定義ファイルから削除orコメントアウトすると、アプリケーションをHWCで動作させることになります。これは、フルIISロールw3wp.exeの代わりにWaWebHost.exeプロセス上で動作させます。

定義ファイルに、<sites></sites>セクションがあるとフルIISWebロールでアプリケーションが動作します。、<sites></sites>セクションをコメントアウトすると、アプリケーションは、webロールベースのWindows Azure SDK 1.2でアプリケーションを動作させていることになります。

元情報

Handling problem: Diagnostics Monitor is not sending diagnostics logs to Azure Storage after upgrading Windows Azure SDK from 1.2 to 1.3を意訳したエントリーです。誤訳があるかもしれませんので、正確な情報は元記事を参照してください。

Windows Azure

Windows Azure SDK 1.2からWindows Azure SDK 1.3へアップグレードすると、Windows Azure上で動作するアプリケーションで、ログ送信が止まってしまう可能性があります。問題が発生している事例をいくつか発見しています。
しかし、この問題は必ず発生するものではありませんが、もし、この問題に遭遇した場合は、MonAgentHostのイベントログを確認する必要があります。下のようなログが記録されているかもしれません。

[Diagnostics]: Checking for configuration updates 11/30/2010 02:19:09 AM.
[MonAgentHost] Error: MA EVENT: 2010-11-30T07:21:35.149Z
[MonAgentHost] Error: 2
[MonAgentHost] Error: 4492
[MonAgentHost] Error: 8984
[MonAgentHost] Error: NetTransport
[MonAgentHost] Error: 0
[MonAgentHost] Error: x:\rd\rd_fun_stable\services\monitoring\shared\nettransport\src\netutils.cpp
[MonAgentHost] Error: OpenHttpSession
[MonAgentHost] Error: 686
[MonAgentHost] Error: 0
[MonAgentHost] Error: 57
[MonAgentHost] Error: The parameter is incorrect.
[MonAgentHost] Error: WinHttpOpen: Failed to open manually set proxy <null>; 87
[MonAgentHost] Error: MA EVENT: 2010-11-30T07:21:35.249Z
[MonAgentHost] Error: 2
[MonAgentHost] Error: 4492
[MonAgentHost] Error: 8984
[MonAgentHost] Error: NetTransport
[MonAgentHost] Error: 0
[MonAgentHost] Error: x:\rd\rd_fun_stable\services\monitoring\shared\nettransport\src\netutils.cpp
[MonAgentHost] Error: OpenHttpSession
[MonAgentHost] Error: 686
[MonAgentHost] Error: 0
[MonAgentHost] Error: 57
[MonAgentHost] Error: The parameter is incorrect.
[MonAgentHost] Error: WinHttpOpen: Failed to open manually set proxy <null>; 87
[Diagnostics]: Checking for configuration updates 11/30/2010 02:20:11 AM.

このエラーは、Diagnostic Monitor がテーブルストレージにログを送信しようとするたびに、DiagnosticsAgent.exe(Windows SDK 1.2までは、MonAgentHost.exe)が書き込んでいます。

*. ScheduledTransferPeriod()ファンクションで使用するdiagnostics monitorツールからログを送信しようとした時に発生します。

回避策

この問題を解決するには、ServiceDefinition.csdef の<sites></sites>セクションを削除するかコメントアウトします。

<?xml version="1.0" encoding="utf-8"?>

<ServiceDefinition name="Your_Service_Name" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">

  <WebRole name="MyWebRole" enableNativeCodeExecution="true">

    <!–<Sites>

      <Site name="Web">

        <Bindings>

          <Binding name="Endpoint1" endpointName="Endpoint1" />

        </Bindings>

      </Site>

    </Sites>–>

    <Endpoints>

      <InputEndpoint name="Endpoint1" protocol="http" port="80" />

    </Endpoints>

    <Imports>

      <Import moduleName="Diagnostics" />

    </Imports>

  </WebRole>

</ServiceDefinition>

注意点

注意すべき点は、<sites></sites>セクションをサービス定義ファイルから削除orコメントアウトすると、アプリケーションをHWCで動作させることになります。これは、フルIISロールw3wp.exeの代わりにWaWebHost.exeプロセス上で動作させます。

定義ファイルに、<sites></sites>セクションがあるとフルIISWebロールでアプリケーションが動作します。、<sites></sites>セクションをコメントアウトすると、アプリケーションは、webロールベースのWindows Azure SDK 1.2でアプリケーションを動作させていることになります。

元情報

Handling problem: Diagnostics Monitor is not sending diagnostics logs to Azure Storage after upgrading Windows Azure SDK from 1.2 to 1.3を意訳したエントリーです。誤訳があるかもしれませんので、正確な情報は元記事を参照してください。

SQL Azure

SQL Azureのデータベース一覧の取得

select name from sys.databases

masterデータべーすを含めて、サーバに関連づけられているデータベース一覧を取得することができます。
データベースIDは、「database_id」カラムで取得可能。

SQL Azureデータベースのエディションと最大サイズ

select
DATABASEPROPERTYEX(‘test‘,’Edition‘),
DATABASEPROPERTYEX(‘test‘,’MaxSizeInBytes‘)

上記の例では、testデータベースのエディションと最大サイズを取得しています。
エディションは、「Web」か「Business」が返ってきます。
最大サイズは、「1073741824」、「5368709120」、「10737418240」、「21474836480」、「32212254720」、「42949672960」、「53687091200」、「NULL」が返ってきます。

参考:DATABASEPROPERTYEX (SQL Azure Database)

SQL Azureデータベースの現在サイズの取得

SELECT SUM(reserved_page_count)*8.0/1024 FROM sys.dm_db_partition_stats

データベースごとに実行する必要があります。戻り値は、メガバイト単位です。
masterデータベースに対して実行すると、「The user does not have permission to perform this action.」っとエラーが発生します。

参考:動的管理ビューを使用した SQL Azure の監視

MVP

1月2日、下のようなメールを受信しました。


おめでとうございます! このたび、2011 Microsoft® MVP アワードを受賞されましたことを、謹んでお知らせ致します。MVPアワードは、実用的で質の高い専門知識を他のユーザーとの間で積極的に共有している、優れたテクニカル コミュニティ リーダーに贈られます。過去1年において、SQL Azureコミュニティに大いに貢献していただきまして誠にありがとうございます。

まだまだ未熟者ではありますが、今後もより一層役立つ情報を提供できるように、自分自身のインプットとアウトプット共に頑張って参ります。

本年も引き続きご愛顧のほど、よろしくお願いします。

Windows Azure

私のアカウントは、まだまだ絶賛VM RoleがPending中なのですが、ローカル環境でできるところまでは、のんびりとやってみました。 以下の投稿は、正直VM Roleを使用するのに必要が無い雑学な話です。
Windows Azure VM Roleを使用する手順には、次の2つがあります。

  1. Windows Azure VM Role統合コンポーネントのインストール
  2. sysprepの実行

Windows Azure 統合コンポーネント

Windows Azure統合コンポーネントは何をするものでしょうか?

Windows Server 2008 R2に規定でインストールされているHyper-V統合コンポーネントをWindows Azure用に置き換えている(っと思う)。
Hyper-Vコンポーネントは、Hyperバイザーとの接続などに使用するドライバーなどの集合体です。Hyper-Vコンポーネントを入れないとハイパーバイザー型の仮想化にならないのでパフォーマンス劣化します。
Windwos Azure統合コンポーネントも各種ドライバーが入って、Azure上でパフォーマンスが出るようにチューニングされる(と思います)。

他には、Windows Azure Integration Componentsが配置される

Windows Azure統合コンポーネントのインストール時に、「C:\Program Files\Windows Azure Integration Components\v1.3」配下に各種ファイルが配置されます。
「Agent」、「Azure Storage」、「Diagnostics」、「Powershell」、「ref」、「RemoteAccess」、「RemoteForwader」が作成されます。名前的に、普通のWindows Server 2008 R2をAzure OSっぽくする為のコンポーネントがどーんと入ります。

ドライバーとかアセンブリキャッシュの登録

各種ドライバーとアセンブリキャッシュに幾つかのファイルの登録が行われます。
例えば、「Microsoft.WindowsAzure.Firewall.Interop」、「Microsoft.WindowsAzure.RoleContainer」のようなAzure用のものが登録されます。

sysprepの応答ファイルの生成

C:\unattend.xml」が生成されます。sysprepの応答ファイルで、sysprepに使用されます。
設定値として、Administratorのパスワードを付与しています。Windows Azureで使用する為に、Administratorのパスワードを初期化しているのだと思います。
タイムゾーンをUTCに設定しています。これは、東京に変えたくなるのですが、不具合原因になるかも・・・?
InputLocale、SystemLocale、UILanguage、UserLocaleをen-usに設定しています。これこそ、ja-jpに変更したいのですが、どうなんでしょ?VM Roleを使用できるようになったら、試してみようと思います。

application.configでライセンス対応

VM Roleで使用するOSのライセンス料は、VM Role課金に含まれることが発表されています。ライセンス認証をしていないOSイメージをそのままアップデートできますし、たとえ認証していてもsysprepをかけた段階で認証がクリアされます。
KMSアクティベーションを使用して、ライセンス認証をしています。application.configに、

<licensing>
  <!– http://technet.microsoft.com/en-us/library/ff793409.aspx –>
  <productKeys>
    <add name="Windows Server 2008 R2 HPC Edition"  key="消去しとく" />
    <add name="Windows Server 2008 R2 Datacenter"   key="消去しとく" />
    <add name="Windows Server 2008 R2 Enterprise"   key="消去しとく" />
    <add name="Windows Server 2008 R2 Standard"     key="消去しとく" />
    <add name="Windows Web Server 2008 R2"          key="消去しとく" />
  </productKeys>
</licensing>

っと言う記述があります。これで、OSのライセンス認証を済ませるはず・・・・です。てことは、Enterprise縛りではないようですね。VM Role。HPC、Datacenter、Enterprise、Stamdard、WebエディションどれでもOK?かもね。
これはクラウドなんだけど、Windows Serverを安い(よね?多分。)料金で使用できるって捉え方が正しいのかな。