Een bestaand uitvoerbaar bestand verpakken en implementeren in Service Fabric

Wanneer u een bestaand uitvoerbaar bestand inpakt als een uitvoerbare gast, kunt u ervoor kiezen om een Visual Studio-projectsjabloon te gebruiken of om het toepassingspakket handmatig te maken. Met Visual Studio worden de structuur en manifestbestanden van het toepassingspakket voor u gemaakt door de nieuwe projectsjabloon.

Tip

De eenvoudigste manier om een bestaand uitvoerbaar Windows-bestand in een service te verpakken, is door Visual Studio te gebruiken en op Linux om Yeoman te gebruiken

Visual Studio gebruiken om een bestaand uitvoerbaar bestand te verpakken en te implementeren

Visual Studio biedt een Service Fabric-servicesjabloon om u te helpen bij het implementeren van een uitvoerbaar bestand voor gasten in een Service Fabric-cluster.

  1. Kies Bestand>Nieuw project en maak een Service Fabric-toepassing.
  2. Kies Uitvoerbare gast als servicesjabloon.
  3. Klik op Bladeren om de map met het uitvoerbare bestand te selecteren en vul de rest van de parameters in om de service te maken.
    • Gedrag van codepakketten. Kan worden ingesteld om alle inhoud van uw map te kopiëren naar het Visual Studio-project. Dit is handig als het uitvoerbare bestand niet wordt gewijzigd. Als u verwacht dat het uitvoerbare bestand wordt gewijzigd en de mogelijkheid wilt hebben om nieuwe builds dynamisch op te halen, kunt u in plaats daarvan een koppeling naar de map maken. U kunt gekoppelde mappen gebruiken bij het maken van het toepassingsproject in Visual Studio. Hiermee wordt vanuit het project een koppeling naar de bronlocatie gemaakt, zodat u het uitvoerbare bestand van de gast in de bronbestemming kunt bijwerken. Deze updates worden onderdeel van het toepassingspakket tijdens de build.
    • Programma geeft het uitvoerbare bestand op dat moet worden uitgevoerd om de service te starten.
    • Argumenten geeft de argumenten op die moeten worden doorgegeven aan het uitvoerbare bestand. Dit kan een lijst met parameters met argumenten zijn.
    • WorkingFolder geeft de werkmap op voor het proces dat wordt gestart. U kunt drie waarden opgeven:
      • CodeBase geeft aan dat de werkmap wordt ingesteld op de codemap in het toepassingspakket (Code map die wordt weergegeven in de voorgaande bestandsstructuur).
      • CodePackage geeft aan dat de werkmap wordt ingesteld op de hoofdmap van het toepassingspakket (GuestService1Pkg weergegeven in de voorgaande bestandsstructuur).
      • Work geeft aan dat de bestanden worden geplaatst in een submap met de naam werk.
  4. Geef de service een naam en klik op OK.
  5. Als uw service een eindpunt voor communicatie nodig heeft, kunt u nu het protocol, de poort en het type toevoegen aan het ServiceManifest.xml-bestand. Bijvoorbeeld: <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />.
  6. U kunt nu het pakket gebruiken en de actie publiceren op uw lokale cluster door fouten op te sporen in de oplossing in Visual Studio. Wanneer u klaar bent, kunt u de toepassing publiceren naar een extern cluster of de oplossing inchecken voor broncodebeheer.
  7. Lees Uw actieve toepassing controleren om te zien hoe u de uitvoerbare gastservice kunt weergeven die wordt uitgevoerd in Service Fabric Explorer.

Zie Uw eerste uitvoerbare gasttoepassing maken met Visual Studio voor een voorbeeldscenario.

Meerdere uitvoerbare bestanden verpakken met Visual Studio

U kunt Visual Studio gebruiken om een toepassingspakket te maken dat meerdere uitvoerbare gastbestanden bevat. Nadat u het eerste uitvoerbare bestand voor gasten hebt toegevoegd, klikt u met de rechtermuisknop op het toepassingsproject en selecteert u de service Add-New> Service Fabric om het tweede uitvoerbare gastproject toe te voegen aan de oplossing.

Notitie

Als u ervoor kiest om de bron in het Visual Studio-project te koppelen, zorgt u ervoor dat uw toepassingspakket up-to-date is met wijzigingen in de bron.

Yeoman gebruiken om een bestaand uitvoerbaar bestand in Linux te verpakken en implementeren

De procedure voor het maken en implementeren van een uitvoerbaar bestand voor gasten in Linux is hetzelfde als het implementeren van een C#- of Java-toepassing.

  1. Typ in een terminal yo azuresfguest.
  2. Geef uw toepassing een naam.
  3. Geef de service een naam en geef de details op, waaronder het pad van het uitvoerbare bestand en de parameters waarmee het bestand moet worden aangeroepen.

Yeoman maakt een toepassingspakket met de juiste toepassings- en manifestbestanden, samen met installatie- en verwijderingsscripts.

Meerdere uitvoerbare bestanden verpakken met Yeoman in Linux

Voer de volgende stappen uit als u nog een service wilt toevoegen aan een toepassing die al is gemaakt met yo:

  1. Stel de directory in op de hoofdmap van de bestaande toepassing. Bijvoorbeeld cd ~/YeomanSamples/MyApplication als MyApplication de toepassing is die is gemaakt door Yeoman.
  2. Voer uit yo azuresfguest:AddService en geef de benodigde details op.

Een bestaand uitvoerbaar bestand handmatig verpakken en implementeren

Het proces voor het handmatig verpakken van een uitvoerbaar bestand voor gasten is gebaseerd op de volgende algemene stappen:

  1. Maak de pakketmapstructuur.
  2. Voeg de code- en configuratiebestanden van de toepassing toe.
  3. Bewerk het servicemanifestbestand.
  4. Bewerk het manifestbestand van de toepassing.

De pakketmapstructuur maken

U kunt beginnen met het maken van de mapstructuur, zoals beschreven in Een Azure Service Fabric-app verpakken.

De code en configuratiebestanden van de toepassing toevoegen

Nadat u de mapstructuur hebt gemaakt, kunt u de code en configuratiebestanden van de toepassing toevoegen onder de code- en configuratiemappen. U kunt ook extra mappen of submappen maken onder de code of configuratiemappen.

Service Fabric voert een xcopy van de inhoud van de hoofdmap van de toepassing uit, dus er is geen vooraf gedefinieerde structuur die kan worden gebruikt, behalve het maken van twee hoofdmappen, code en instellingen. (U kunt desgewenst verschillende namen kiezen. Meer informatie vindt u in de volgende sectie.)

Notitie

Zorg ervoor dat u alle bestanden en afhankelijkheden opneemt die de toepassing nodig heeft. Service Fabric kopieert de inhoud van het toepassingspakket op alle knooppunten in het cluster waar de services van de toepassing worden geïmplementeerd. Het pakket moet alle code bevatten die de toepassing moet uitvoeren. Ga er niet van uit dat de afhankelijkheden al zijn geïnstalleerd.

Het servicemanifestbestand bewerken

De volgende stap is het bewerken van het servicemanifestbestand om de volgende informatie op te nemen:

  • De naam van het servicetype. Dit is een id die Service Fabric gebruikt om een service te identificeren.
  • De opdracht die moet worden gebruikt om de toepassing te starten (ExeHost).
  • Elk script dat moet worden uitgevoerd om de toepassing in te stellen (SetupEntrypoint).

Hier volgt een voorbeeld van een ServiceManifest.xml bestand:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="NodeApp" Version="1.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true"/>
   </ServiceTypes>
   <CodePackage Name="code" Version="1.0.0.0">
      <SetupEntryPoint>
         <ExeHost>
             <Program>scripts\launchConfig.cmd</Program>
         </ExeHost>
      </SetupEntryPoint>
      <EntryPoint>
         <ExeHost>
            <Program>node.exe</Program>
            <Arguments>bin/www</Arguments>
            <WorkingFolder>CodePackage</WorkingFolder>
         </ExeHost>
      </EntryPoint>
   </CodePackage>
   <Resources>
      <Endpoints>
         <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
      </Endpoints>
   </Resources>
</ServiceManifest>

In de volgende secties worden de verschillende onderdelen van het bestand beschreven die u moet bijwerken.

ServiceTypes bijwerken

<ServiceTypes>
  <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
  • U kunt elke gewenste naam kiezen voor ServiceTypeName. De waarde wordt in het ApplicationManifest.xml bestand gebruikt om de service te identificeren.
  • Geef UseImplicitHost="true" op. Dit kenmerk vertelt Service Fabric dat de service is gebaseerd op een zelfstandige app. Service Fabric hoeft deze dus alleen te starten als een proces en de status ervan te controleren.

CodePackage bijwerken

Het element CodePackage geeft de locatie (en versie) van de code van de service op.

<CodePackage Name="Code" Version="1.0.0.0">

Het Name -element wordt gebruikt om de naam van de map op te geven in het toepassingspakket dat de code van de service bevat. CodePackage heeft ook het version kenmerk. Dit kan worden gebruikt om de versie van de code op te geven en kan mogelijk ook worden gebruikt om de code van de service te upgraden met behulp van de infrastructuur voor levenscyclusbeheer van toepassingen in Service Fabric.

Optioneel: Update SetupEntrypoint

<SetupEntryPoint>
   <ExeHost>
       <Program>scripts\launchConfig.cmd</Program>
   </ExeHost>
</SetupEntryPoint>

Het element SetupEntryPoint wordt gebruikt om uitvoerbare bestanden of batchbestanden op te geven die moeten worden uitgevoerd voordat de code van de service wordt gestart. Het is een optionele stap, dus deze hoeft niet te worden opgenomen als er geen initialisatie is vereist. SetupEntryPoint wordt uitgevoerd telkens wanneer de service opnieuw wordt gestart.

Er is slechts één SetupEntryPoint, dus installatiescripts moeten worden gegroepeerd in één batchbestand als de installatie van de toepassing meerdere scripts vereist. SetupEntryPoint kan elk type bestand uitvoeren: uitvoerbare bestanden, batchbestanden en PowerShell-cmdlets. Zie SetupEntryPoint configureren voor meer informatie.

In het voorgaande voorbeeld voert SetupEntryPoint een batchbestand met de naam LaunchConfig.cmd uit dat zich in de scripts submap van de codemap bevindt (ervan uitgaande dat het element WorkingFolder is ingesteld op CodeBase).

EntryPoint bijwerken

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
  </ExeHost>
</EntryPoint>

Het EntryPoint element in het servicemanifestbestand wordt gebruikt om op te geven hoe de service moet worden gestart.

Het ExeHost -element geeft het uitvoerbare bestand (en de argumenten) op die moeten worden gebruikt om de service te starten. U kunt desgewenst het IsExternalExecutable="true" kenmerk toevoegen aan om aan te ExeHost geven dat het programma een extern uitvoerbaar bestand is buiten het codepakket. Bijvoorbeeld <ExeHost IsExternalExecutable="true">.

  • Program geeft de naam op van het uitvoerbare bestand dat de service moet starten.
  • Arguments hiermee geeft u de argumenten op die moeten worden doorgegeven aan het uitvoerbare bestand. Dit kan een lijst met parameters met argumenten zijn.
  • WorkingFolder hiermee geeft u de werkmap op voor het proces dat wordt gestart. U kunt drie waarden opgeven:
    • CodeBase geeft aan dat de werkmap wordt ingesteld op de codemap in het toepassingspakket (Code map in de voorgaande bestandsstructuur).
    • CodePackage geeft aan dat de werkmap wordt ingesteld op de hoofdmap van het toepassingspakket (GuestService1Pkg in de voorgaande bestandsstructuur).
      • Work geeft aan dat de bestanden worden geplaatst in een submap met de naam werk.

De WorkingFolder is handig om de juiste werkmap in te stellen, zodat relatieve paden kunnen worden gebruikt door de toepassing of initialisatiescripts.

Eindpunten bijwerken en registreren bij Naming Service voor communicatie

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

In het vorige voorbeeld geeft het Endpoint -element de eindpunten op waarop de toepassing kan luisteren. In dit voorbeeld luistert de Node.js toepassing op http op poort 3000.

Bovendien kunt u Service Fabric vragen om dit eindpunt te publiceren naar de naamgevingsservice, zodat andere services het eindpuntadres voor deze service kunnen detecteren. Hierdoor kunt u communiceren tussen services die uitvoerbare gastbestanden zijn. Het gepubliceerde eindpuntadres heeft de vorm UriScheme://IPAddressOrFQDN:Port/PathSuffix. UriScheme en PathSuffix zijn optionele kenmerken. IPAddressOrFQDN is het IP-adres of de Fully Qualified Domain Name van het knooppunt waarop dit uitvoerbare bestand wordt geplaatst en het wordt voor u berekend.

In het volgende voorbeeld ziet u, zodra de service is geïmplementeerd, in Service Fabric Explorer een eindpunt dat vergelijkbaar is met http://10.1.4.92:3000/myapp/ het gepubliceerde eindpunt voor het service-exemplaar. Of als dit een lokale computer is, ziet http://localhost:3000/myapp/u .

<Endpoints>
   <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000"  UriScheme="http" PathSuffix="myapp/" Type="Input" />
</Endpoints>

U kunt deze adressen gebruiken met omgekeerde proxy om te communiceren tussen services.

Het manifestbestand van de toepassing bewerken

Nadat u het Servicemanifest.xml bestand hebt geconfigureerd, moet u enkele wijzigingen aanbrengen in het ApplicationManifest.xml bestand om ervoor te zorgen dat het juiste servicetype en de juiste naam worden gebruikt.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="NodeAppType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
   </ServiceManifestImport>
</ApplicationManifest>

ServiceManifestImport

In het ServiceManifestImport -element kunt u een of meer services opgeven die u in de app wilt opnemen. Naar services wordt verwezen met ServiceManifestName, waarmee de naam wordt opgegeven van de map waarin het ServiceManifest.xml bestand zich bevindt.

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>

Logboekregistratie instellen

Voor uitvoerbare gastbestanden is het handig om consolelogboeken te bekijken om erachter te komen of er fouten zijn opgetreden in de toepassings- en configuratiescripts. Consoleomleiding kan worden geconfigureerd in het ServiceManifest.xml bestand met behulp van het ConsoleRedirection -element.

Waarschuwing

Gebruik nooit het consoleomleidingsbeleid in een toepassing die in productie is geïmplementeerd, omdat dit van invloed kan zijn op de toepassingsfailover. Gebruik dit alleen voor lokale ontwikkelings- en foutopsporingsdoeleinden.

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
    <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
  </ExeHost>
</EntryPoint>

ConsoleRedirection kan worden gebruikt om console-uitvoer (zowel stdout als stderr) om te leiden naar een werkmap. Dit biedt de mogelijkheid om te controleren of er geen fouten zijn tijdens de installatie of uitvoering van de toepassing in het Service Fabric-cluster.

FileRetentionCount bepaalt hoeveel bestanden in de werkmap worden opgeslagen. Een waarde van 5 betekent bijvoorbeeld dat de logboekbestanden voor de vorige vijf uitvoeringen worden opgeslagen in de werkmap.

FileMaxSizeInKb hiermee geeft u de maximale grootte van de logboekbestanden op.

Logboekbestanden worden opgeslagen in een van de werkmappen van de service. Als u wilt bepalen waar de bestanden zich bevinden, gebruikt u Service Fabric Explorer om te bepalen op welk knooppunt de service wordt uitgevoerd en welke werkmap wordt gebruikt. Dit proces wordt verderop in dit artikel besproken.

Implementatie

De laatste stap is het implementeren van uw toepassing. Het volgende PowerShell-script laat zien hoe u uw toepassing implementeert in het lokale ontwikkelingscluster en een nieuwe Service Fabric-service start.


Connect-ServiceFabricCluster localhost:19000

Write-Host 'Copying application package...'
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath 'C:\Dev\MultipleApplications' -ImageStoreConnectionString 'file:C:\SfDevCluster\Data\ImageStoreShare' -ApplicationPackagePathInImageStore 'nodeapp'

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

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

New-ServiceFabricService -ApplicationName 'fabric:/nodeapp' -ServiceName 'fabric:/nodeapp/nodeappservice' -ServiceTypeName 'NodeApp' -Stateless -PartitionSchemeSingleton -InstanceCount 1

Tip

Comprimeer het pakket voordat u naar het installatiekopiearchief kopieert als het pakket groot is of veel bestanden bevat. Meer informatie is hier beschikbaar.

Een Service Fabric-service kan worden geïmplementeerd in verschillende 'configuraties'. Het kan bijvoorbeeld worden geïmplementeerd als één of meerdere exemplaren, of op een zodanige manier dat er één exemplaar van de service op elk knooppunt van het Service Fabric-cluster is.

De InstanceCount parameter van de New-ServiceFabricService cmdlet wordt gebruikt om op te geven hoeveel exemplaren van de service moeten worden gestart in het Service Fabric-cluster. U kunt de InstanceCount waarde instellen, afhankelijk van het type toepassing dat u implementeert. De twee meest voorkomende scenario's zijn:

  • InstanceCount = "1". In dit geval wordt slechts één exemplaar van de service geïmplementeerd in het cluster. De scheduler van Service Fabric bepaalt op welk knooppunt de service wordt geïmplementeerd.
  • InstanceCount ="-1". In dit geval wordt één exemplaar van de service geïmplementeerd op elk knooppunt in het Service Fabric-cluster. Het resultaat is dat er één (en slechts één) exemplaar van de service is voor elk knooppunt in het cluster.

Dit is een handige configuratie voor front-endtoepassingen (bijvoorbeeld een REST-eindpunt), omdat clienttoepassingen verbinding moeten maken met alle knooppunten in het cluster om het eindpunt te kunnen gebruiken. Deze configuratie kan ook worden gebruikt wanneer bijvoorbeeld alle knooppunten van het Service Fabric-cluster zijn verbonden met een load balancer. Clientverkeer kan vervolgens worden gedistribueerd over de service die wordt uitgevoerd op alle knooppunten in het cluster.

Uw actieve toepassing controleren

Identificeer in Service Fabric Explorer het knooppunt waarop de service wordt uitgevoerd. In dit voorbeeld wordt het uitgevoerd op Node1:

Knooppunt waar de service wordt uitgevoerd

Als u naar het knooppunt navigeert en naar de toepassing bladert, ziet u de essentiële knooppuntinformatie, inclusief de locatie op schijf.

Locatie op schijf

Als u naar de map bladert met Behulp van Server Explorer, kunt u de werkmap en de logboekmap van de service vinden, zoals wordt weergegeven in de volgende schermopname:

Locatie van logboek

Volgende stappen

In dit artikel hebt u geleerd hoe u een uitvoerbaar bestand voor gasten kunt verpakken en implementeren in Service Fabric. Zie de volgende artikelen voor gerelateerde informatie en taken.