複数のゲスト実行可能ファイルのデプロイDeploy multiple guest executables

この記事では、複数のゲスト実行可能ファイルをパッケージ化して Azure Service Fabric にデプロイする方法について説明します。This article shows how to package and deploy multiple guest executables to Azure Service Fabric. 単一の Service Fabric のパッケージを作成しデプロイする方法については、「Service Fabric へのゲスト実行可能ファイルのデプロイ」を参照してください。For building and deploying a single Service Fabric package read how to deploy a guest executable to Service Fabric.

このチュートリアルは、データ ストアとして MongoDB を使用する Node.js フロントエンドを使用したアプリケーションをデプロイする方法を示していますが、この手順は、別のアプリケーションへの依存関係があるすべてのアプリケーションに適用できます。While this walkthrough shows how to deploy an application with a Node.js front end that uses MongoDB as the data store, you can apply the steps to any application that has dependencies on another application.

Visual Studio を使用して、複数のゲスト実行可能ファイルを含むアプリケーション パッケージを生成することができます。You can use Visual Studio to produce the application package that contains multiple guest executables. Visual Studio を使用した既存のアプリケーションのパッケージ化に関するセクションを参照してください。See Using Visual Studio to package an existing application. 最初のゲスト実行可能ファイルを追加した後は、アプリケーション プロジェクトを右クリックし、 [追加] -> [新しい Service Fabric サービス] を選択して、2 つ目のゲスト実行可能ファイル プロジェクトをソリューションに追加します。After you have added the first guest executable, right click on the application project and select the Add->New Service Fabric service to add the second guest executable project to the solution. 注:Visual Studio プロジェクトでソースをリンクした場合、Visual Studio ソリューションをビルドすると、アプリケーション パッケージは、ソースの変更に応じて常に最新の状態になります。Note: If you choose to link the source in the Visual Studio project, building the Visual Studio solution, will make sure that your application package is up to date with changes in the source.

サンプルSamples

複数のゲスト実行可能アプリケーションを手動でパッケージ化するManually package the multiple guest executable application

別の方法として、ゲスト実行可能ファイルを手動でパッケージ化することができます。Alternatively you can manually package the guest executable. 詳細については、「既存の実行可能ファイルの手動によるパッケージ化とデプロイ」を参照してください。For details, see Manually package and deploy an existing executable.

Node.js アプリケーションのパッケージ化Packaging the Node.js application

この記事は、Service Fabric クラスター内のノードに Node.js がインストールされていないことを前提としています。This article assumes that Node.js is not installed on the nodes in the Service Fabric cluster. そのため、パッケージ化する前に、ノード アプリケーションのルート ディレクトリに Node.exe を追加する必要があります。As a consequence, you need to add Node.exe to the root directory of your node application before packaging. (Express Web フレームワークと Jade テンプレート エンジンを使用する) Node.js アプリケーションのディレクトリ構造は、次のようになります。The directory structure of the Node.js application (using Express web framework and Jade template engine) should look similar to the one below:

|-- NodeApplication
    |-- bin
        |-- www
    |-- node_modules
        |-- .bin
        |-- express
        |-- jade
        |-- etc.
    |-- public
        |-- images
        |-- etc.
    |-- routes
        |-- index.js
        |-- users.js
    |-- views
        |-- index.jade
        |-- etc.
    |-- app.js
    |-- package.json
    |-- node.exe

次の手順として、Node.js アプリケーションのアプリケーション パッケージを作成します。As a next step, you create an application package for the Node.js application. 次のコードは、Node.js アプリケーションが含まれた Service Fabric アプリケーション パッケージを作成します。The code below creates a Service Fabric application package that contains the Node.js application.

.\ServiceFabricAppPackageUtil.exe /source:'[yourdirectory]\MyNodeApplication' /target:'[yourtargetdirectory] /appname:NodeService /exe:'node.exe' /ma:'bin/www' /AppType:NodeAppType

使用されているパラメーターの説明を以下に示します。Below is a description of the parameters that are being used:

  • /source は、パッケージ化するアプリケーションのディレクトリを指しています。/source points to the directory of the application that should be packaged.
  • /target は、パッケージを作成するディレクトリを定義します。/target defines the directory in which the package should be created. このディレクトリは、ソース ディレクトリとは別のディレクトリである必要があります。This directory has to be different from the source directory.
  • /appname は、既存のアプリケーションのアプリケーション名を定義します。/appname defines the application name of the existing application. この名前はマニフェスト内で、Service Fabric のアプリケーション名ではなく、サービス名に変換されることを理解しておくことが重要です。It's important to understand that this translates to the service name in the manifest, and not to the Service Fabric application name.
  • /exe は、Service Fabric が開始する実行可能ファイルを定義します (この例では node.exe)。/exe defines the executable that Service Fabric is supposed to launch, in this case node.exe.
  • /ma は、実行可能ファイルの起動に使用される引数を定義します。/ma defines the argument that is being used to launch the executable. Node.js がインストールされていないため、Service Fabric は、 node.exe bin/wwwを実行して Node.js Web サーバーを起動する必要があります。As Node.js is not installed, Service Fabric needs to launch the Node.js web server by executing node.exe bin/www. /ma:'bin/www' は、パッケージ化ツールに node.exe の引数として bin/www を使用するように指示しています。/ma:'bin/www' tells the packaging tool to use bin/www as the argument for node.exe.
  • /AppType は、Service Fabric アプリケーションの種類の名前を定義します。/AppType defines the Service Fabric application type name.

/target パラメーターで指定したディレクトリを参照すると、次に示すように、完全に機能する Service Fabric パッケージがツールによって作成されていることを確認できます。If you browse to the directory that was specified in the /target parameter, you can see that the tool has created a fully functioning Service Fabric package as shown below:

|--[yourtargetdirectory]
    |-- NodeApplication
        |-- C
              |-- bin
              |-- data
              |-- node_modules
              |-- public
              |-- routes
              |-- views
              |-- app.js
              |-- package.json
              |-- node.exe
        |-- config
              |--Settings.xml
        |-- ServiceManifest.xml
    |-- ApplicationManifest.xml

生成された ServiceManifest.xml には、次のコード スニペットに示すような、Node.js Web サーバーを起動する方法が記述されたセクションがあります。The generated ServiceManifest.xml now has a section that describes how the Node.js web server should be launched, as shown in the code snippet below:

<CodePackage Name="C" Version="1.0">
    <EntryPoint>
        <ExeHost>
            <Program>node.exe</Program>
            <Arguments>'bin/www'</Arguments>
            <WorkingFolder>CodePackage</WorkingFolder>
        </ExeHost>
    </EntryPoint>
</CodePackage>

このサンプルでは、Node.js Web サーバーはポート 3000 をリッスンしているため、ServiceManifest.xml ファイルのエンドポイント情報を次に示すように更新する必要があります。In this sample, the Node.js web server listens to port 3000, so you need to update the endpoint information in the ServiceManifest.xml file as shown below.

<Resources>
      <Endpoints>
         <Endpoint Name="NodeServiceEndpoint" Protocol="http" Port="3000" Type="Input" />
      </Endpoints>
</Resources>

MongoDB アプリケーションのパッケージ化Packaging the MongoDB application

これで Node.js アプリケーションをパッケージ化できたので、MongoDB のパッケージ化に進むことができます。Now that you have packaged the Node.js application, you can go ahead and package MongoDB. 既に説明したように、ここで実行する手順は Node.js と MongoDB に固有のものではありません。As mentioned before, the steps that you go through now are not specific to Node.js and MongoDB. 実際には、1 つの Service Fabric アプリケーションとしてまとめてパッケージ化する必要のあるすべてのアプリケーションに適用されます。In fact, they apply to all applications that are meant to be packaged together as one Service Fabric application.

MongoDB をパッケージ化する際は、必ず Mongod.exe と Mongo.exe をパッケージ化してください。To package MongoDB, you want to make sure you package Mongod.exe and Mongo.exe. どちらのバイナリも、MongoDB のインストール ディレクトリの bin ディレクトリにあります。Both binaries are located in the bin directory of your MongoDB installation directory. ディレクトリ構造は次のようになっています。The directory structure looks similar to the one below.

|-- MongoDB
    |-- bin
        |-- mongod.exe
        |-- mongo.exe
        |-- anybinary.exe

Service Fabric は次に示すようなコマンドを使用して MongoDB を開始する必要があるため、MongoDB をパッケージ化する際は /ma パラメーターを使用する必要があります。Service Fabric needs to start MongoDB with a command similar to the one below, so you need to use the /ma parameter when packaging MongoDB.

mongod.exe --dbpath [path to data]

注意

ノードのローカル ディレクトリに MongoDB のデータ ディレクトリを配置すると、ノードに障害が発生した場合にデータが保持されません。The data is not being preserved in the case of a node failure if you put the MongoDB data directory on the local directory of the node. データ損失を防ぐには、耐久性の高いストレージを使用するか、MongoDB レプリカ セットを実装する必要があります。You should either use durable storage or implement a MongoDB replica set in order to prevent data loss.

PowerShell またはコマンド シェルで、次のパラメーターを使用してパッケージ化ツールを実行します。In PowerShell or the command shell, we run the packaging tool with the following parameters:

.\ServiceFabricAppPackageUtil.exe /source: [yourdirectory]\MongoDB' /target:'[yourtargetdirectory]' /appname:MongoDB /exe:'bin\mongod.exe' /ma:'--dbpath [path to data]' /AppType:NodeAppType

MongoDB を Service Fabric アプリケーション パッケージに追加するには、アプリケーション マニフェストと Node.js アプリケーションが配置されているのと同じディレクトリを /target パラメーターが指していることを確認する必要があります。In order to add MongoDB to your Service Fabric application package, you need to make sure that the /target parameter points to the same directory that already contains the application manifest along with the Node.js application. また、同じ ApplicationType 名を使用しているかどうかも確認してください。You also need to make sure that you are using the same ApplicationType name.

ディレクトリを参照して、ツールによって作成された内容を確認してみましょう。Let's browse to the directory and examine what the tool has created.

|--[yourtargetdirectory]
    |-- MyNodeApplication
    |-- MongoDB
        |-- C
            |--bin
                |-- mongod.exe
                |-- mongo.exe
                |-- etc.
        |-- config
            |--Settings.xml
        |-- ServiceManifest.xml
    |-- ApplicationManifest.xml

ご覧のとおり、MongoDB バイナリが格納されたディレクトリに新しいフォルダーである MongoDB が追加されています。As you can see, the tool added a new folder, MongoDB, to the directory that contains the MongoDB binaries. ApplicationManifest.xml ファイルを開くと、Node.js アプリケーションと MongoDB の両方がパッケージに含まれているのがわかります。If you open the ApplicationManifest.xml file, you can see that the package now contains both the Node.js application and MongoDB. 次のコードは、アプリケーション マニフェストの内容を示しています。The code below shows the content of the application manifest.

<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="MyNodeApp" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="MongoDB" ServiceManifestVersion="1.0" />
   </ServiceManifestImport>
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="NodeService" ServiceManifestVersion="1.0" />
   </ServiceManifestImport>
   <DefaultServices>
      <Service Name="MongoDBService">
         <StatelessService ServiceTypeName="MongoDB">
            <SingletonPartition />
         </StatelessService>
      </Service>
      <Service Name="NodeServiceService">
         <StatelessService ServiceTypeName="NodeService">
            <SingletonPartition />
         </StatelessService>
      </Service>
   </DefaultServices>
</ApplicationManifest>  

アプリケーションの発行Publishing the application

最後の手順として、次の PowerShell スクリプトを使用して、ローカル Service Fabric クラスターにアプリケーションを発行します。The last step is to publish the application to the local Service Fabric cluster by using the PowerShell scripts below:

Connect-ServiceFabricCluster localhost:19000

Write-Host 'Copying application package...'
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath '[yourtargetdirectory]' -ImageStoreConnectionString 'file:C:\SfDevCluster\Data\ImageStoreShare' -ApplicationPackagePathInImageStore 'NodeAppType'

Write-Host 'Registering application type...'
Register-ServiceFabricApplicationType -ApplicationPathInImageStore 'NodeAppType'

New-ServiceFabricApplication -ApplicationName 'fabric:/NodeApp' -ApplicationTypeName 'NodeAppType' -ApplicationTypeVersion 1.0  

アプリケーションがローカル クラスターに正常に発行されると、Node.js アプリケーションのサービス マニフェストに入力したポート (たとえば http://localhost:3000) で Node.js アプリケーションにアクセスできます。Once the application is successfully published to the local cluster, you can access the Node.js application on the port that we have entered in the service manifest of the Node.js application--for example http://localhost:3000.

このチュートリアルでは、2 つの既存のアプリケーションを 1 つの Service Fabric アプリケーションとして簡単にパッケージ化する方法について説明しました。In this tutorial, you have seen how to easily package two existing applications as one Service Fabric application. また、高可用性やヘルス システムとの統合など、Service Fabric の機能の一部を活用できるように、Service Fabric にデプロイする方法についても説明しました。You have also learned how to deploy it to Service Fabric so that it can benefit from some of the Service Fabric features, such as high availability and health system integration.

Linux で Yeoman を使用した既存のアプリケーションへのゲスト実行可能ファイルの追加Adding more guest executables to an existing application using Yeoman on Linux

yo を使用して作成したアプリケーションにサービスを追加するには、次の手順を実行します。To add another service to an application already created using yo, perform the following steps:

  1. ディレクトリを既存アプリケーションのルートに変更します。Change directory to the root of the existing application. たとえば、Yeoman で作成したアプリケーションが MyApplication の場合は、cd ~/YeomanSamples/MyApplication です。For example, cd ~/YeomanSamples/MyApplication, if MyApplication is the application created by Yeoman.
  2. yo azuresfguest:AddService を実行し、必要な詳細を指定します。Run yo azuresfguest:AddService and provide the necessary details.

次の手順Next steps