このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
Java による Azure サービス ランタイムの概要

Java による Azure サービス ランタイムの概要

更新日: 2015年2月

Azure サービス ランタイム ライブラリは、Azure 環境との対話をアプリケーションに許可する機能を提供します。また、その機能は、アプリケーションがロール、ロール インスタンス、およびロール環境に関する情報を特定するのを許可します。サービス ランタイムで使用する場合の例については、次のとおりです。

  • 構成設定、ローカル リソース、およびロールに関連する情報を特定する。

  • ロール環境の変更 (たとえば、構成設定の変更) に応答する。

  • ロール インスタンスのリサイクルを要求する。

RoleEnvironmentRoleInstance、およびRoleクラスは、サービス ランタイムの主なクラスです。

RoleEnvironment クラスは、ロール インスタンスが実行されている Azure 環境を表します。このクラスを使用して、構成値の取得、構成の変更に関する通知の受け取り、リサイクルの要求、またはロールおよびロール インスタンスに関する情報の取得を行います。

RoleEnvironment.isAvailable メソッドは、Azure 環境でロール インスタンスが実行されているかどうかを通知します。このメソッドは、コード パスが Azure で実行されることもあれば、Azure と独立して実行されることもあるという場合に便利です。Azure のコンピューティング エミュレーターか、または Azure 自体でロールが実行されている場合、RoleEnvironment.isAvailabletrue を返します。RoleEnvironment.isAvailablefalse (使用不可であることを示す) を返した場合、RoleEnvironment クラスの他のメンバーを呼び出さないでください。ロール環境が利用できないにもかかわらず、RoleEnvironment.isAvailable 以外の RoleEnvironment メソッドを呼び出そうとすると、RoleEnvironmentNotAvailableException 型の例外がスローされます。

RoleEnvironment.isEmulated メソッドは、ロールが Azure コンピューティング エミュレーターで実行されているのか、Azure 自体で実行されているのかを通知します。Azure コンピューティング エミュレーターまたは Azure のどちらでインスタンスが実行されているのかによってロールのニーズが異なる場合、このプロパティを使用します。

ロール インスタンスの停止と再起動を要求するには、RoleEnvironment.requestRecycle メソッドを呼び出します。

RoleEnvironment.getRoles メソッドは、ロール インスタンスが表示される一連のロールを (Role オブジェクトとして) 返します。ロール自体は、.csdef で定義されます。RoleEnvironment.getCurrentRoleInstance メソッドは、ロールが実行されているロール インスタンスを RoleInstance オブジェクトとして返します。Roles および CurrentRoleInstance プロパティの詳細については、このトピックの後の方で説明します。

RoleEnvironment.getDeploymentId メソッドはロール インスタンスのデプロイ ID を返します。この ID は、デプロイを識別する一意の文字列であり、ログを調べる場合に役立ちます。ロール インスタンスが Azure コンピューティング エミュレーターで実行されている場合、RoleEnvironment.getDeploymentId の戻り値の値は "deployment (nn)" の形式になります。ここで nn は整数を表します。ロール インスタンスが Azure (コンピューティング エミュレーターではなく) で実行されている場合、RoleEnvironment.getDeploymentId の戻り値は GUID となります。この GUID は、Azure 管理ポータルのデプロイ プロパティ ウィンドウで確認することもできます。

RoleEnvironment.getLocalResources メソッドは、ロール インスタンスが実行されている仮想マシンのファイル システムで予約されている一連のローカル ストレージ リソースを返します。このメソッドは、一連のローカル リソースを java.util.Map コレクションとして返します。コレクションには、このトピックの後の方で説明する LocaResource オブジェクトが含まれます。たとえば、Java の場合、ローカル リソースを次のように列挙することができます。

Map<String, LocalResource> mapLocalResources = RoleEnvironment.getLocalResources();
Set set = mapLocalResources.entrySet(); 

Iterator itr = set.iterator();
LocalResource localResource;

while (itr.hasNext())
{
    Map.Entry entry = (Map.Entry)itr.next();

    localResource = (LocalResource) entry.getValue(); 

    System.out.println("Local resource:");
    System.out.println("\tName = " + localResource.getName());
    System.out.println("\tMax size in MBs = " + localResource.getMaximumSizeInMegabytes());
    System.out.println("\tRoot path = " + localResource.getRootPath());

};

ローカル リソースは、.csdef で定義されます。上記の例では、LocalResource クラスに属する 3 つのメソッドを示しています。LocalResource.getName (ローカル リソースの名前を返す) と、LocalResource.getMaximumSizeInMegabytes (ローカル リソースの最大サイズを返す) と、LocalResource.getRootPath (ローカル リソースの完全なパスを返す) の 3 つです。LocalResource クラスには LocalResource.toString メソッドも含まれます。このメソッドは、getNamegetMaximumSizeInMegabytes、および getRootPath の各メソッドによって返された値を含む連結文字列を返します。ローカル リソースの詳細については、「ローカル ストレージ リソースを構成する」を参照してください。

RoleEnvironment.getConfigurationSettings メソッドは、ロール インスタンスの一連の構成設定を返します。このメソッドは、一連の構成設定を java.util.Map コレクションとして返します。例として、Java の場合は、次のように構成設定を取得できます。

Map<String, String> mapConfigSettings = RoleEnvironment.getConfigurationSettings();
String myValue = mapConfigSettings.get("mySettingName");

構成設定の名前は .csdef で定義され、その値は .cscfg で定義されます。

ServiceRuntime ライブラリには、RoleEnvironment クラスを使用して登録可能な 3 つリスナー インターフェイスが含まれています。1 つ目のリスナー インターフェイスは RoleEnvironmentStoppingListener であり、シャットダウン コードの実行のタイミングをロール インスタンスが認識できるようにします。残りの 2 つのリスナー インターフェイスは RoleEnvironmentChangingListenerRoleEnvironmentChangedListener です。RoleEnvironmentChangingListener は、サービス構成の変更が適用されようとしていることを伝える通知をロールが受信できるようにします。RoleEnvironmentChangedListener は、サービス構成の変更が発生したことを伝える通知をロールが受信できるようにします。イベント リスナーの登録または登録解除は、add または remove メソッドを介して行います。たとえば、RoleEnvironment.addRoleEnvironmentStoppingListenerRoleEnvironmentStoppingListener をロール インスタンスに追加します。一方、RoleEnvironment.removeRoleEnvironmentStoppingListenerRoleEnvironmentStoppingListener をロール インスタンスから削除します。次の例は、RoleEnvironmentStoppingListener をアプリケーションに追加する方法を示しています。

final class MyStoppingListener implements RoleEnvironmentStoppingListener
{

    // Method to handle the role environment stopping event.
    public void roleEnvironmentStopping()
    {
        // The stopping event is occurring.
        // This example just displays the role instance ID.
        System.out.println( "roleEnvironmentStopping has been called for "
            + RoleEnvironment.getCurrentRoleInstance().getId());

        // Take other shutdown action as needed by your application.

    }
}

MyStoppingListener stoppingListener = new MyStoppingListener();

// Add the listener to the role environment.
RoleEnvironment.addRoleEnvironmentStoppingListener(stoppingListener);

次の例は、アプリケーションから RoleEnvironmentStoppingListener を削除する方法を示しています。

// Remove the listener from the role environment.
RoleEnvironment.removeRoleEnvironmentStoppingListener(stoppingListener);

RoleEnvironment クラスには、RoleEnvironment.setStatus (ロール インスタンスの状態を設定する) と RoleEnvironment.clearStatus (ロール インスタンスの状態を解除する) の 2 つのメソッドも含まれています。これらのメソッドについては、「ロール インスタンスの状態」のセクションで説明します。

RoleEnvironment.getRoles メソッドは、サービスに対して定義されている一連のロールを Role オブジェクトとして返します。RoleEnvironment.getCurrentRoleInstance メソッドは、現在コードが実行されているロール インスタンスを RoleIntance オブジェクトとして返します。

RoleEnvironment クラスは静的クラスなので、このクラスのインスタンスをインスタンス化しなくても、そのメンバーを使用することができます。たとえば、デプロイ ID を取得する場合、次のような Java コードを使用できます。

String deploymentId = RoleEnvironment.getDeploymentId();

RoleInstance クラスは、特定のロール インスタンスを表します。このクラスには、ロール インスタンスの ID を返す getId メソッドと、ロール インスタンスに関連付けられたロールを返す getRole メソッドが含まれます。RoleInstance クラスには、getFaultDomain メソッドと getUpdateDomain メソッドも含まれています。前者は、このロール インスタンスが置かれているフォールト ドメインを示す整数を返し、後者はこのロール インスタンスが置かれているアップグレード ドメインを返します。アプリケーションのフォールト ドメインの番号を指定することはできませんが、アップグレード ドメインの番号は .csdef 内に指定できます。それには、<ServiceDefinition> 要素の upgradeDomainCount 属性を設定します。アップグレード ドメイン数は最大で 5 つです。RoleInstance クラスには、ロール インスタンスに関連付けられた一連のエンドポイントを getInstanceEndpoints オブジェクトとして返す RoleInstanceEndpoint メソッドも含まれています。RoleInstanceEndpoint クラスは、このトピックの後の方で説明します。

RoleInstance オブジェクトは、次のコードを使用して取得できます。

RoleInstance myRoleInstance = RoleEnvironment.getCurrentRoleInstance();

あるいは、Role.getInstances メソッドを使用して、RoleInstance オブジェクトを取得することもできます。

Role クラスは、アプリケーション内のロールを表します。Web ロールまたはワーカー ロールなどのロールは、.csdef で定義されます。Role クラスには Role.getNameRole.getInstances の 2 つのメソッドが含まれています。Role.getName はロールの名前を返します (.csdef で定義されたとおりに)。Role.getInstances は、ロールが認識している一連のロール インスタンスを RoleInstance オブジェクトとして返します。ロールでは、実行時に一連のロール インスタンスを認識するために 1 つ以上の内部エンドポイントを定義する必要があります。

Role オブジェクトは、次のコードを使用して取得できます。

Role myRole = RoleEnvironment.getCurrentRoleInstance().getRole();

あるいは、RoleEnvironment.getRoles メソッドを使用して、Role オブジェクトを取得することもできます。

RoleEnvironmentRole、および RoleInstance のクラスは、次のように関連しています。

  • RoleEnvironment.getCurrentRoleInstance メソッドは、現在のロール インスタンスを RoleInstance オブジェクトの形式で返します。RoleEnvironment.getCurrentRoleInstance を使用して現在のロール インスタンスを取得すると、フォールト ドメイン、アップグレード ドメイン、インスタンスのエンドポイント、インスタンスが定義されたロールなどの項目を調べることができます。

  • RoleEnvironment.getRoles メソッドは、サービスに対して定義されたロールのコレクションを返します。

  • RoleInstance.getRole メソッドは、ロール インスタンスに関連付けられたロールを返します。たとえば、Java の場合、現在のロール インスタンスに関連付けられたロールの名前を次のようにして取得することが可能です。

    System.out.println("The name of the role is " 
        + RoleEnvironment.getCurrentRoleInstance().getRole().getName());
    
    
  • Role.getRoleInstances メソッドは、ロールに対して実行中のロール インスタンスのコレクションを返します。

RoleInstanceEndpoint クラスは、ロール インスタンスのエンドポイントを表します。このクラスには、エンドポイントの IP アドレスとポート番号を返す RoleInstanceEndpoint.getIpEndPoint メソッドが含まれています。RoleInstanceEndpoint クラスには、RoleInstanceEndpoint.getProtocol メソッド (エンドポイントのプロトコルを返す) と RoleInstanceEndpoint.getRoleInstance メソッド (エンドポイントに関連付けられたロール インスタンスを返す) も含まれています。ロール インスタンスの RoleInstanceEndpoint オブジェクトを取得するには、RoleInstance.getInstanceEndpoints メソッドを呼び出します。

RoleEnvironmentChangedEvent クラスは、サービス構成に変更が生じたことを示すイベントを表します。このクラスに含まれるメソッドは、RoleEnvironmentChangedEvent.getChanges だけであり、このイベントの一部として生じた変更のコレクションを返します。変更は RoleEnvironmentConfigurationSettingChange または RoleEnvironmentTopologyChange オブジェクトで表現されます。RoleEnvironmentConfigurationSettingChangeRoleEnvironmentTopologyChange は両方とも RoleEnvironmentChange クラスのサブクラスです。RoleEnvironmentConfigurationSettingChange クラスに含まれるメソッドは getConfigurationSettingName だけであり、変更された構成設定を示します。RoleEnvironmentTopologyChange クラスに含まれるメソッドは getRoleName だけであり、変更の影響を受けるロールを示します。

RoleEnvironmentChangedEvent の場合と同様に Role クラスは、サービス構成が変更されようとしていることを示すイベントを表します。RoleEnvironmentChangedEvent と同様に RoleEnvironmentChangingEvent には getChanges メソッドが含まれていますが、これは行われようとしている変更を示します。RoleEnvironmentChangingEvent クラスには、cancel メソッドも含まれています。cancel メソッドを実行すると、構成の変更はキャンセルされ、ロール インスタンスがすぐに再起動します。キャンセルされていない構成の変更がある場合は、ロール インスタンスの再起動時に適用されます。

RoleInstanceStatus 列挙体は、BusyReady という 2 つの列挙型定数を定義します。この 2 つの定数によってロールはビジー状態 (要求を処理できない) なのか、それとも準備完了状態 (要求を処理できる) なのかが示されます。この列挙体については、「ロール インスタンスの状態」のセクションで説明します。

サービス ランタイムには、LocalResource クラスも含まれています。これについては、前の方の「RoleEnvironment クラス」のセクションで説明しました。サービス ランタイムには、3 つのリスナー インターフェイス (RoleEnvironmentStoppingListenerRoleEnvironmentChangingListener、およびRoleEnvironmentChangedListener) が含まれています。これについても「RoleEnvironment クラス」のセクションで説明しました。

RoleEnvironmentNotAvailableException クラスは、ロール環境を使用できないときにコードがそのロール環境との対話を試みた場合にスローされる例外を示します。ロール環境を使用できるかどうかを判定するには、RoleEnvironment.isAvailable メソッドを呼び出します。

サービス ランタイムのクラスとインターフェイスに関する完全なドキュメントについては、Azure サービス ランタイムのライブラリ ドキュメントを参照してください。

ロール インスタンス内では、さまざまなプロセスが実行されることがあります。ただし、ロール インスタンスは、Azure でロール インスタンス全体を示す統合された状態が使用されるようにする必要があります。Azure 内では、アプリケーション単位のドメイン/ネイティブ プロセスのレベルで状態が決まります。RoleEnvironment.setStatus メソッドを使用すると、状態を Azure に送信することができます。Azure では、ロール インスタンスの現在の状態を判断する必要がある場合、クライアントによって送信された (たとえば、RoleEnvironment.setStatus を介して) 状態を調べます。setStatus メソッドの最初のパラメーターは、RoleInstanceStatus 列挙体からの値であり、RoleInstanceStatus.Busy または RoleInstanceStatus.Ready のいずれかとなります。setStatus の 2 番目のパラメーターは、有効期限の日付と時刻です。以前に setStatus を呼び出して設定した状態を解除するには、RoleEnvironment.clearStatus メソッドを呼び出します。clearStatus メソッドはパラメーターを受け取りません。setStatus を介して以前に設定されている状態を解除します。

次の表は、ロール インスタンスの状態に影響する各種メソッドの結果をまとめたものです。

 

メソッド ロール インスタンスの状態への影響

RoleEnvironment.setStatus

Azure は、最初のパラメーターによってロール インスタンスがビジー状態化か準備完了状態かを判断します。最初のパラメーターが RoleInstanceStatus.Busy である場合、Azure はロール インスタンスが使用できない状態 (ビジー状態) にあると見なし、ロール インスタンスに要求を送信しません。最初のパラメーターが RoleInstanceStatus.Ready である場合、Azure はロール インスタンスが使用できる状態 (準備完了状態) にあると見なし、ロール インスタンスに要求を送信します。setStatus を呼び出す場合は、setStatus メソッドの 2 番目のパラメーターとして指定された有効期限が切れる前に、次の操作のいずれかを実行してください。

  • 別に RoleEnvironment.setStatus の呼び出しを行う。

  • RoleEnvironment.clearStatus を呼び出す。

noteメモ
前に行った setStatus 呼び出しの有効期限が切れる前に上記のいずれかの操作を行えなかった場合、Azure はロール インスタンスが応答不能状態にあると見なします。

RoleEnvironment.clearStatus

setStatus の前の呼び出しは、Azure によって破棄され、ロール インスタンスの状態の判定に使用されなくなります。

Azure に状態をレポートするのでなければ、setStatus を呼び出す必要はありません。たとえば、ロール インスタンスにバック グラウンド処理またはスタートアップ タスクの依存関係がない場合、ロール インスタンスは setStatus の呼び出しを必要とすることなく「開始」から「準備完了」へ移行します (コードの実行が成功したと仮定)。これは、.csdef 内で、<RoleEntryPoint> 要素の setReadyOnProcessStart 属性が true に設定されていることを前提とします。ただし、Azure からの要求の受信を開始すること、またはそれを継続することを適切としない何らかの処理を、ロール インスタンスで実行する必要がある場合は、setStatus を呼び出してロール インスタンスがビジー状態であることを Azure に通知し、さらに clearStatus メソッドを呼び出して前の setStatus 呼び出しの有効期限を Azure に通知します。

このトピックでは、ロール インスタンスの状態に影響を与える、Azure ServiceRuntime ライブラリ内のメソッドに注目しました。ロール インスタンスの状態に影響するその他のアイテムとしては、Azure 管理ポータルからの UI 操作 (たとえば、リサイクルの要求またはロール インスタンスの停止) や、サービス管理 REST API からの操作 (たとえば、Reboot Role Instance 操作 の呼び出し) などが挙げられます。

表示:
© 2015 Microsoft