リモートデスクトップ
Windows Azureへデプロイした個別のロールインスタンスにリモートデスクトップ接続が可能になりました。
これにより、個別のインスタンスへログオンしてOSの状況確認や障害調査、さらにはOSの構成変更操作も行うことができます。ただし、これらの変更は、ゲストOSのアップグレード、VMの停止による自動リカバリなど外的要因によって再起動したタイミングで失われてしまいます。したがって、デプロイ後に構成変更を行い運用するといった用途にはお勧めできません。
リモートデスクトップの利用は、検証やテスト、障害調査、ロールインスタンスの状態監視などの利用に限定しましょう。
リモートデスクトップへの接続設定は、デプロイ時に行います(図8)。認証には証明書が必要で、あらかじめリモートデスクトップ接続を行うホストサービスに配置しておく必要があります。
リモートデスクトップの接続は、デプロイ完了後に管理ポータルから行います。接続したいインスタンスを選択し、Connectをクリックすることによってリモートデスクトップ接続が開始されます(図9)。

ゲストOS 2.xにリモートデスクトップ接続をした画面です(図10)。Windows Server 2008 R2 Enterpriseと表示されているのが確認できます。
権限昇格
権限昇格(Elevated Privileges)は、今まで管理者(Admin)モードと呼ばれていた管理者権限を付与する機能です。管理者権限を付与には2通りの方法があります。
スタートアップタスク
ロールインスタンス起動時に任意のコマンドを実行でき、同時に権限を昇格できる仕組みになっています。
これらにより、インストーラの起動、OSやIISの構成変更、レジストリの書き込みなど、管理者権限が必要な操作を実施できるようになります。
スタートアップタスクは、サービス定義ファイル(ServiceDefinition.csdef)のStartup要素に記述できます(リスト1)。管理者権限の有無は、executionContext属性で指定します。elevatedなら管理者権限、limitedなら標準ユーザーの権限で実行されます。taskTypeは実行時の振る舞いを指定し、simpleはコマンドの実行が終了するまで待ち合わせを行う同期実行を、backgroundは待ち合わせをしない非同期実行を意味します。
<WebRole name="WebRole1">
<!-- Startup 要素にTaskを定義する -->
<Startup>
<!-- task1.cmdを管理者権限で同期実行 -->
<Task commandLine="task1.cmd" executionContext="elevated"
taskType="simple"/>
<!-- task2.cmdを標準ユーザー権限で非同期実行 -->
<Task commandLine="task2.cmd" executionContext="limited"
taskType="background"/>
</Startup>
....
</WebRole>
ランタイム
サービス定義ファイル(ServiceDefinition.csdef)のRuntime要素のexecutionContext属性にelevatedを指定することで、RoleEntryPointクラス(※注意)を管理者権限で実行できます(リスト2)。これによって、OnStart/Run/OnStopメソッドで管理者権限の必要な操作を実行できます。
管理権限には直接関係ありませんが、Environment要素で環境変数の定義も可能となっています。
ASP.NETなどのWebアプリケーションは、IISのワーカープロセス上で実行されるため、管理者権限が付与されるわけではありません。
<WebRole name="WebRole1">
<!-- Runtime要素のexecutionContext属性で実行権限を指定できます。-->
<Runtime executionContext="elevated">
<Environment>
<!-- 環境変数も定義できます -->
<Variable name="var1" value="statemachine"/>
<Variable name="var2" value="yyamada"/>
</Environment>
</Runtime>
....
</WebRole>
OnStart/Run/OnStopメソッドが定義されているロールインスタンスの起動クラスです。


