重要
Cloud Services (クラシック) は、2024 年 9 月 1 日をもって、すべてのお客様に対して非推奨になりました。 実行中の既存のデプロイはすべて Microsoft によって停止およびシャットダウンされ、2024 年 10 月以降、そのデータは永久に失われます。 新しいデプロイでは、新しい Azure Resource Manager ベースのデプロイ モデル Azure Cloud Services (延長サポート) を使用する必要があります。
クラウド サービスは、サービス定義 (.csdef)、サービス構成 (.cscfg)、サービス パッケージ (.cspkg) の 3 つのコンポーネントから作成されます。 ServiceDefinition.csdef ファイルと ServiceConfig.cscfg ファイルはどちらも XML ベースであり、クラウド サービスとその構成の構造を記述します。モデルと総称されます。 ServicePackage.cspkg は、ServiceDefinition.csdef から生成される zip ファイルであり、特に、必要なすべてのバイナリ ベースの依存関係が含まれています。 Azure では、 ServicePackage.cspkg と ServiceConfig.cscfg の両方からクラウド サービスが作成されます。
クラウド サービスが Azure で実行されたら、 ServiceConfig.cscfg ファイルを使用してクラウド サービスを再構成できますが、定義を変更することはできません。
何についてもっと知りたいですか?
- ServiceDefinition.csdef ファイルと ServiceConfig.cscfg ファイルの詳細を知りたい。
- 私はそれについてすでに知っています。私が構成できるいくつかの例を教えてください。
- ServicePackage.cspkg を作成します。
- Visual Studio を使用しているのですが...
ServiceDefinition.csdef
ServiceDefinition.csdef ファイルは、クラウド サービスを構成するために Azure によって使用される設定を指定します。 Azure サービス定義スキーマ (.csdef ファイル) は、サービス定義ファイルに使用できる形式を提供します。 次の例は、Web ロールと Worker ロールに定義できる設定を示しています。
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1" vmsize="Medium">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="HttpIn" endpointName="HttpIn" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="HttpIn" protocol="http" port="80" />
<InternalEndpoint name="InternalHttpIn" protocol="http" />
</Endpoints>
<Certificates>
<Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" />
</Certificates>
<Imports>
<Import moduleName="Connect" />
<Import moduleName="Diagnostics" />
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<LocalResources>
<LocalStorage name="localStoreOne" sizeInMB="10" />
<LocalStorage name="localStoreTwo" sizeInMB="10" cleanOnRoleRecycle="false" />
</LocalResources>
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" />
</Startup>
</WebRole>
<WorkerRole name="WorkerRole1">
<ConfigurationSettings>
<Setting name="DiagnosticsConnectionString" />
</ConfigurationSettings>
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="tcp" port="10000" />
<InternalEndpoint name="Endpoint2" protocol="tcp" />
</Endpoints>
</WorkerRole>
</ServiceDefinition>
ここで使用する XML スキーマの理解を深めるために 、サービス定義スキーマ を参照できますが、いくつかの要素の簡単な説明を次に示します。
サイト
には、IIS7 でホストされている Web サイトか Web アプリケーションの定義が含まれています。
入力エンドポイント
には、クラウド サービスにアクセスするために使用されるエンドポイントの定義が含まれています。
内部エンドポイント
には、互いに通信するために、ロール インスタンスが使用されるエンドポイントの定義が含まれています。
ConfigurationSettings
には、特定のロールの機能に対する設定の定義が含まれています。
証明 書
には、ロールに必要な証明書の定義が含まれています。 上記のコード例は、Azure Connect の構成に使用される証明書を示します。
LocalResources
には、ローカル ストレージ リソースの定義が含まれています。 ローカル ストレージ リソースは、ロールのインスタンスが実行されている仮想マシンのファイル システム内の予約されたディレクトリです。
インポート
には、インポートされたモジュールの定義が含まれています。 上記のコード例は、リモート デスクトップ接続と Azure Connect のモジュールを示します。
スタートアップ
には、ロールの開始時に実行されるタスクが含まれています。 タスクは、.cmd ファイルか実行可能ファイルで定義されます。
ServiceConfiguration.cscfg
クラウド サービスの設定の構成は、 ServiceConfiguration.cscfg ファイルの値によって決まります。 このファイル内の各ロールにデプロイするインスタンスの数を指定します。 サービス定義ファイルで定義した構成設定の値は、サービス構成ファイルに追加されます。 クラウド サービスに関連付けられている管理証明書のサムプリントは、ファイルにも追加されます。 Azure サービス構成スキーマ (.cscfg ファイル) は、サービス構成ファイルの許容形式を提供します。
サービス構成ファイルは、アプリケーションとともにパッケージ化されてはいません。 構成は、別個のファイルとして Azure にアップロードされ、クラウド サービスの構成に使用されます。 クラウド サービスを再デプロイしなくても、新しいサービス構成ファイルをアップロードできます。 クラウド サービスの実行中にクラウド サービスの構成値を変更できます。 次の例は、Web ロールと Worker ロールに定義できる構成設定を示しています。
<?xml version="1.0"?>
<ServiceConfiguration serviceName="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="WebRole1">
<Instances count="2" />
<ConfigurationSettings>
<Setting name="SettingName" value="SettingValue" />
</ConfigurationSettings>
<Certificates>
<Certificate name="CertificateName" thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption"
thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
ここで使用する XML スキーマを理解するには、 サービス構成スキーマ を参照してください。ただし、要素の簡単な説明を次に示します。
インスタンス
は、ロールの実行するインスタンスの数を設定します。 アップグレード中にクラウド サービスが利用できなくなる可能性を防ぐために、Web に接続されたロールのインスタンスを複数デプロイすることを推奨します。 複数のインスタンスをデプロイすることで、 Azure Compute Service Level Agreement (SLA) のガイドラインに従います。これにより、1 つのサービスに対して複数のロール インスタンスがデプロイされるときに、インターネットに接続するロールに対して 99.95% 外部接続が保証されます。
ConfigurationSettings
ロールの実行中のインスタンスの設定を構成します。
<Setting>
要素の名前は、サービス定義ファイルの設定の定義と一致する必要があります。
証明 書
は、サービスによって使用される証明書を構成します。 上記のコード例は、RemoteAccess モジュールの証明書を定義する方法を示します。
拇印属性の値は、使用する証明書の拇印に設定する必要があります。
注
証明書のサムプリントを構成ファイルに追加するには、テキスト エディターを使用します。 または、Visual Studio のロールの [プロパティ] ページの [証明書] タブで値を追加できます。
ロール インスタンスのポートを定義する
Azure では、Web ロールに 1 つのエントリ ポイントのみを使用できます。 これは、1 つの IP アドレスからのすべてのトラフィックが発生したことを意味します。 ホスト ヘッダーを構成することによって、Web サイトを構成してポートを共有し、正しい場所に要求を送信できます。 またアプリケーションを構成して、IP アドレス上の既知のポートをリッスンすることもできます。
次の例では、Web サイトと Web アプリケーションとの Web ロールの構成を示します。 Web サイトは、ポート 80 の既定のエントリの場所として構成されます。 Web アプリケーションは、"mail.mysite.cloudapp.net" という別のホスト ヘッダーから要求を受信するように構成されます。
<WebRole>
<ConfigurationSettings>
<Setting name="DiagnosticsConnectionString" />
</ConfigurationSettings>
<Endpoints>
<InputEndpoint name="HttpIn" protocol="http" port="80" />
<InputEndpoint name="Https" protocol="https" port="443" certificate="SSL"/>
<InputEndpoint name="NetTcp" protocol="tcp" port="808" certificate="SSL"/>
</Endpoints>
<LocalResources>
<LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="100" />
</LocalResources>
<Site name="Mysite" packageDir="Sites\Mysite">
<Bindings>
<Binding name="http" endpointName="HttpIn" />
<Binding name="https" endpointName="Https" />
<Binding name="tcp" endpointName="NetTcp" />
</Bindings>
</Site>
<Site name="MailSite" packageDir="MailSite">
<Bindings>
<Binding name="mail" endpointName="HttpIn" hostHeader="mail.mysite.cloudapp.net" />
</Bindings>
<VirtualDirectory name="artifacts" />
<VirtualApplication name="storageproxy">
<VirtualDirectory name="packages" packageDir="Sites\storageProxy\packages"/>
</VirtualApplication>
</Site>
</WebRole>
ロールの構成を変更する
クラウド サービスは、Azure で実行されている間、サービスをオフラインにせずに構成を更新できます。 構成情報を変更するには、新しい構成ファイルをアップロードするか、構成ファイルを編集して、実行中のサービスに適用します。 次の変更がサービスの構成に適用されます。
-
構成設定の値の変更
構成設定を変更すると、ロール インスタンスはインスタンスのオンライン中に変更を適用するか、インスタンスを適切に再利用し、インスタンスのオフライン中に変更を適用するかを選択できます。 -
ロール インスタンスのサービス トポロジの変更
トポロジの変更は、インスタンスが削除される場合を除いて、実行中のインスタンスには影響しません。 残りのすべてのインスタンスは、通常、リサイクルする必要がありません。ただし、トポロジの変更に応じてロール インスタンスをリサイクルできます。 -
証明書の拇印の変更
ロール インスタンスがオフラインのときのみ、証明書を更新できます。 ロール インスタンスがオンラインの間に、証明書が追加、削除、変更されると、Azure はインスタンスを適切にオフラインにして、証明書を更新します。 変更が完了したら、Azure がオンラインに戻します。
サービス ランタイム イベントを使用して構成変更を処理する
Azure ランタイム ライブラリには、ロールから Azure 環境と対話するためのクラスを提供する Microsoft.WindowsAzure.ServiceRuntime 名前空間が含まれています。 RoleEnvironment クラスは、構成変更の前後に発生する次のイベントを定義します。
-
イベントの変更
これは、指定したロール インスタンスに構成の変更が適用される前に、必要な場合にロール インスタンスを停止する機会を提供します。 -
変更された イベント
指定したロール インスタンスに構成の変更が適用された後に発生します。
注
証明書の変更は、常にロール インスタンスをオフラインにするため、RoleEnvironment.Changing や RoleEnvironment.Changed イベントは発生しません。
ServicePackage.cspkg
注
デプロイできる最大パッケージ サイズは 600 MB です
Azure のクラウド サービスとしてアプリケーションをデプロイするには、まず適切な形式でアプリケーションをパッケージ化する必要があります。 CSPack コマンド ライン ツール (Azure SDK と共にインストール) を使用して、Visual Studio の代わりにパッケージ ファイルを作成できます。
CSPack は、サービス定義ファイルとサービス構成ファイルの内容を使用して、パッケージの内容を定義します。
CSPack は、 Azure portal を使用して Azure にアップロードできるアプリケーション パッケージ ファイル (.cspkg) を生成します。 既定では、パッケージの名前は [ServiceDefinitionFileName].cspkg
ですが、/out
の オプションを使用して別の名前を指定することもできます。
CSPack は次の場所にあります。
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\
注
CSPack.exe (ウィンドウ上) は、SDK と共にインストールされている Microsoft Azure コマンド プロンプト ショートカットを実行することで使用できます。
CSPack.exe プログラムを実行して、必要なすべてのスイッチとコマンドについてのドキュメントをご覧ください。
ヒント
Microsoft Azure コンピューティング エミュレーターでクラウド サービスをローカルで実行し、/copyonly オプションを使用します。 このオプションは、アプリケーションのバイナリ ファイルをディレクトリ レイアウトにコピーします。コンピューティング エミュレーターでは、そのディレクトリ レイアウトからファイルを実行できます。
クラウド サービスをパッケージ化するコマンド例
次の例では、Web ロールの情報を含むアプリケーション パッケージを作成します。 このコマンドは、使用するサービス定義ファイル、バイナリ ファイルがあるディレクトリ、パッケージ ファイルの名前を指定します。
cspack [DirectoryName]\[ServiceDefinition]
/role:[RoleName];[RoleBinariesDirectory]
/sites:[RoleName];[VirtualPath];[PhysicalPath]
/out:[OutputFileName]
アプリケーションに Web ロールと worker ロールの両方が含まれている場合は、次のコマンドを使用します。
cspack [DirectoryName]\[ServiceDefinition]
/out:[OutputFileName]
/role:[RoleName];[RoleBinariesDirectory]
/sites:[RoleName];[VirtualPath];[PhysicalPath]
/role:[RoleName];[RoleBinariesDirectory];[RoleAssemblyName]
変数が定義されている場所は次のとおりです。
変数 | 価値 |
---|---|
[DirectoryName] | Azure プロジェクトの .csdef ファイルを含むルート プロジェクト ディレクトリの下のサブディレクトリです。 |
[サービス定義] | サービス定義ファイルの名前。 既定では、このファイルの名前は ServiceDefinition.csdef です。 |
[OutputFileName] | 生成されたパッケージ ファイルの名前。 通常、この変数は、アプリケーションの名前に設定されます。 ファイル名が指定されていない場合は、アプリケーション パッケージは、[ApplicationName] .cspkg として作成されます。 |
役割名 | サービス定義ファイルに定義されているロールの名前です。 |
[RoleBinariesDirectory] | ロールのバイナリ ファイルの場所です。 |
[VirtualPath] | サービス定義ファイルの Sites セクションで定義されている各仮想パスの物理ディレクトリです。 |
[フィジカルパス] | サービス定義ファイルの [サイト] ノードで定義されている各仮想パスの内容の物理ディレクトリです。 |
[RoleAssemblyName] | ロールのバイナリ ファイルの名前です。 |
次のステップ
クラウド サービス パッケージを作成しているのですが...
Visual Studio を使用しているのですが...