Een bestaand uitvoerbaar bestand in Service Fabric verpakken en implementeren

Wanneer u een bestaand uitvoerbaar bestand als een uitvoerbaar gastbestand inpakt, kunt u ervoor kiezen om een Visual Studio-projectsjabloon te gebruiken of het toepassingspakket handmatig te maken. Met Visual Studio worden de structuur en manifestbestanden van de 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 en Linux te gebruiken 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 gastbestand in een Service Fabric-cluster.

  1. Kies Bestand>nieuw project en maak een Service Fabric-toepassing.
  2. Kies Uitvoerbaar gastbestand als de servicesjabloon.
  3. Klik op Bladeren om de map met uw uitvoerbare bestand te selecteren en vul de rest van de parameters in om de service te maken.
    • Gedrag van codepakket. Kan worden ingesteld om alle inhoud van uw map te kopiëren naar het Visual Studio-project, wat handig is als het uitvoerbare bestand niet verandert. Als u verwacht dat het uitvoerbare bestand wordt gewijzigd en de mogelijkheid om nieuwe builds dynamisch op te halen, kunt u ervoor kiezen om in plaats daarvan een koppeling naar de map te maken. U kunt gekoppelde mappen gebruiken bij het maken van het toepassingsproject in Visual Studio. Dit is een koppeling naar de bronlocatie vanuit het project, zodat u het uitvoerbare gastbestand in de bronbestemming kunt bijwerken. Deze updates worden onderdeel van het toepassingspakket op de build.
    • Het programma geeft het uitvoerbare bestand op dat moet worden uitgevoerd om de service te starten.
    • Argumenten specificeren de argumenten 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 nodig heeft voor communicatie, 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 actie publiceren op uw lokale cluster door fouten in de oplossing in Visual Studio op te sporen. Wanneer u klaar bent, kunt u de toepassing publiceren naar een extern cluster of de oplossing inchecken voor broncodebeheer.
  7. Lees de actieve toepassing om te zien hoe u de uitvoerbare gastservice kunt weergeven die wordt uitgevoerd in Service Fabric Explorer.

Zie Uw eerste uitvoerbare toepassing voor gasten maken met Visual Studio voor een voorbeeld.

Meerdere uitvoerbare bestanden verpakken met Visual Studio

U kunt Visual Studio gebruiken om een toepassingspakket te produceren dat meerdere uitvoerbare gastbestanden bevat. Nadat u het eerste uitvoerbare gastbestand 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 te implementeren

De procedure voor het maken en implementeren van een uitvoerbaar gastbestand 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 uw service een naam en geef de details op, inclusief het pad van het uitvoerbare bestand en de parameters waarmee deze moet worden aangeroepen.

Yeoman maakt een toepassingspakket met de juiste toepassings- en manifestbestanden, samen met het installeren en verwijderen van scripts.

Meerdere uitvoerbare bestanden verpakken met Behulp van 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 yo azuresfguest:AddService de benodigde gegevens uit en geef deze op.

Een bestaand uitvoerbaar bestand handmatig verpakken en implementeren

Het proces voor het handmatig verpakken van een uitvoerbaar gastbestand 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 anders moet worden gebruikt dan 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. Neem niet aan dat de afhankelijkheden al zijn geïnstalleerd.

Het servicemanifestbestand bewerken

De volgende stap bestaat uit het bewerken van het servicemanifestbestand met de volgende informatie:

  • 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.ServiceTypeName De waarde wordt in het ApplicationManifest.xml bestand gebruikt om de service te identificeren.
  • Geef UseImplicitHost="true" op. Met dit kenmerk wordt aan Service Fabric aangegeven dat de service is gebaseerd op een zelfstandige app, dus alles wat Service Fabric moet doen, is het starten als proces en de status ervan bewaken.

CodePackage bijwerken

Het CodePackage-element 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 ook worden gebruikt om de code van de service bij te werken met behulp van de infrastructuur voor levenscyclusbeheer van toepassingen in Service Fabric.

Optioneel: SetupEntrypoint bijwerken

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

Het element SetupEntryPoint wordt gebruikt om een uitvoerbaar bestand of batchbestand op te geven dat moet 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 vereist is. SetupEntryPoint wordt telkens uitgevoerd wanneer de service opnieuw wordt opgestart.

Er is slechts één SetupEntryPoint, dus installatiescripts moeten in één batchbestand worden gegroepeerd 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 vorige voorbeeld voert SetupEntryPoint een batchbestand uit LaunchConfig.cmd dat zich in de scripts submap van de codemap bevindt (ervan uitgaande dat het WorkingFolder-element 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 om aan te ExeHost geven dat het programma een extern uitvoerbaar bestand buiten het codepakket is. Bijvoorbeeld <ExeHost IsExternalExecutable="true">.

  • Program hiermee geeft u de naam op van het uitvoerbare bestand dat de service moet starten.
  • Arguments geeft de argumenten op die moeten worden doorgegeven aan het uitvoerbare bestand. Het kan een lijst met parameters met argumenten zijn.
  • WorkingFolder hiermee geeft u de werkmap 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 in een submap met de naam werk worden geplaatst.

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 voorgaande 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.

Daarnaast kunt u Service Fabric vragen dit eindpunt naar de Naamgevingsservice te publiceren, zodat andere services het eindpuntadres naar deze service kunnen detecteren. Hierdoor kunt u communiceren tussen services die uitvoerbare gastbestanden zijn. Het gepubliceerde eindpuntadres is van het formulier UriScheme://IPAddressOrFQDN:Port/PathSuffix. UriScheme en PathSuffix zijn optionele kenmerken. IPAddressOrFQDN is het IP-adres of de volledig gekwalificeerde domeinnaam van het knooppunt waarop dit uitvoerbare bestand wordt geplaatst en 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/ gepubliceerd 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

Zodra 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 wilt opnemen in de app. Er wordt naar services verwezen, ServiceManifestNamewaarmee de naam wordt opgegeven van de map waar 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 kunnen zien om erachter te komen of de toepassings- en configuratiescripts fouten weergeven. 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 failover van de toepassing. 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 het instellen of uitvoeren van de toepassing in het Service Fabric-cluster.

FileRetentionCount bepaalt hoeveel bestanden worden opgeslagen in de werkmap. 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 op welke locatie de bestanden zich bevinden, gebruikt u Service Fabric Explorer om te bepalen op welk knooppunt de service wordt uitgevoerd en op welke werkmap wordt gebruikt. Dit proces wordt verderop in dit artikel behandeld.

Implementatie

De laatste stap is het implementeren van uw toepassing. Het volgende PowerShell-script laat zien hoe u uw toepassing implementeert in het lokale ontwikkelcluster 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 heeft. 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 kan zo worden geïmplementeerd 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 heeft één (en slechts één) exemplaar van de service voor elk knooppunt in het cluster.

Dit is een handige configuratie voor front-endtoepassingen (bijvoorbeeld een REST-eindpunt), omdat clienttoepassingen verbinding moeten maken met een van de knooppunten in het cluster om het eindpunt te 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 deze uitgevoerd op Node1:

Node where service is running

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

Location on disk

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

Location of log

Volgende stappen

In dit artikel hebt u geleerd hoe u een uitvoerbaar gastbestand inpakt en implementeert in Service Fabric. Zie de volgende artikelen voor gerelateerde informatie en taken.