Share via


Toepassingspakket maken

In dit artikel wordt beschreven hoe u een Service Fabric-toepassing inpakt en gereed maakt voor implementatie.

Pakketindeling

Het toepassingsmanifest, een of meer servicemanifesten en andere benodigde pakketbestanden moeten worden ingedeeld in een specifieke indeling voor implementatie in een Service Fabric-cluster. De voorbeeldmanifesten in dit artikel moeten worden ingedeeld in de volgende mapstructuur:

tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
    │   ServiceManifest.xml
    │
    ├───MyCode
    │       MyServiceHost.exe
    │
    ├───MyConfig
    │       Settings.xml
    │
    └───MyData
            init.dat

De mappen hebben een naam die overeenkomt met de naamkenmerken van elk bijbehorend element. Als het servicemanifest bijvoorbeeld twee codepakketten bevat met de namen MyCodeA en MyCodeB, bevatten twee mappen met dezelfde namen de benodigde binaire bestanden voor elk codepakket.

SetupEntryPoint gebruiken

Typische scenario's voor het gebruik van SetupEntryPoint zijn wanneer u een uitvoerbaar bestand moet uitvoeren voordat de service wordt gestart of als u een bewerking met verhoogde bevoegdheden moet uitvoeren. Voorbeeld:

  • Omgevingsvariabelen instellen en initialiseren die het uitvoerbare bestand van de service nodig heeft. Het is niet beperkt tot alleen uitvoerbare bestanden die zijn geschreven via de Service Fabric-programmeermodellen. Npm.exe heeft bijvoorbeeld een aantal omgevingsvariabelen nodig die zijn geconfigureerd voor het implementeren van een Node.js-toepassing.
  • Toegangsbeheer instellen door beveiligingscertificaten te installeren.

Zie Het beleid configureren voor een service-installatiepunt voor meer informatie over het configureren van SetupEntryPoint

Configureren

Een pakket bouwen met Visual Studio

Als u Visual Studio hebt gebruikt om uw toepassing te maken, kunt u met de opdracht Pakket automatisch een pakket maken dat overeenkomt met de hierboven beschreven indeling.

Als u een pakket wilt maken, klikt u met de rechtermuisknop op het toepassingsproject in Solution Explorer en kiest u de opdracht Pakket :

Een toepassing verpakken met Visual Studio

Wanneer de verpakking is voltooid, kunt u de locatie van het pakket vinden in het venster Uitvoer . De verpakkingsstap vindt automatisch plaats wanneer u uw toepassing in Visual Studio implementeert of er fouten in opssport.

Een pakket bouwen op opdrachtregel

Het is ook mogelijk om uw toepassing programmatisch te verpakken met behulp van msbuild.exe. Visual Studio voert het uit, zodat de uitvoer hetzelfde is.

D:\Temp> msbuild HelloWorld.sfproj /t:Package

Het pakket testen

U kunt de pakketstructuur lokaal controleren via PowerShell met behulp van de opdracht Test-ServiceFabricApplicationPackage . Met deze opdracht wordt gecontroleerd op problemen met het parseren van manifesten en worden alle verwijzingen gecontroleerd. Met deze opdracht wordt alleen gecontroleerd op de structurele juistheid van de mappen en bestanden in het pakket. Er wordt niet gecontroleerd of de inhoud van het code- of gegevenspakket niet meer is dan controleren of alle benodigde bestanden aanwezig zijn.

Test-ServiceFabricApplicationPackage .\MyApplicationType
False
Test-ServiceFabricApplicationPackage : The EntryPoint MySetup.bat is not found.
FileName: C:\Users\servicefabric\AppData\Local\Temp\TestApplicationPackage_7195781181\nrri205a.e2h\MyApplicationType\MyServiceManifest\ServiceManifest.xml

Deze fout laat zien dat het MySetup.bat-bestand waarnaar wordt verwezen in het servicemanifest SetupEntryPoint ontbreekt in het codepakket. Nadat het ontbrekende bestand is toegevoegd, wordt de verificatie van de toepassing doorgegeven:

tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
    │   ServiceManifest.xml
    │
    ├───MyCode
    │       MyServiceHost.exe
    │       MySetup.bat
    │
    ├───MyConfig
    │       Settings.xml
    │
    └───MyData
            init.dat
Test-ServiceFabricApplicationPackage .\MyApplicationType
True

Als voor uw toepassing toepassingsparameters zijn gedefinieerd, kunt u deze doorgeven in Test-ServiceFabricApplicationPackage voor de juiste validatie.

Als u weet welk cluster de toepassing wordt geïmplementeerd, wordt u aangeraden de ImageStoreConnectionString parameter door te geven. In dit geval wordt het pakket ook gevalideerd op basis van eerdere versies van de toepassing die al in het cluster worden uitgevoerd. De validatie kan bijvoorbeeld detecteren of een pakket met dezelfde versie maar verschillende inhoud al is geïmplementeerd.

Zodra de toepassing correct is verpakt en de validatie is geslaagd, kunt u overwegen het pakket te comprimeren voor snellere implementatiebewerkingen.

Een pakket comprimeren

Wanneer een pakket groot is of veel bestanden heeft, kunt u het comprimeren voor een snellere implementatie. Compressie vermindert het aantal bestanden en de pakketgrootte. Voor een gecomprimeerd toepassingspakket kan het uploaden van het toepassingspakket langer duren in vergelijking met het uploaden van het niet-gecomprimeerde pakket, met name als compressie wordt uitgevoerd als onderdeel van het kopiëren. Bij compressie is het registreren en het registreren van het toepassingstype sneller.

Het implementatiemechanisme is hetzelfde voor gecomprimeerde en niet-gecomprimeerde pakketten. Als het pakket is gecomprimeerd, wordt het opgeslagen als zodanig in het clusterinstallatiekopieënarchief en wordt het niet gecomprimeerd op het knooppunt voordat de toepassing wordt uitgevoerd. De compressie vervangt het geldige Service Fabric-pakket door de gecomprimeerde versie. De map moet schrijfmachtigingen toestaan. Het uitvoeren van compressie op een al gecomprimeerd pakket levert geen wijzigingen op.

U kunt een pakket comprimeren door de PowerShell-opdracht Copy-ServiceFabricApplicationPackage met CompressPackage switch uit te voeren. U kunt het pakket met dezelfde opdracht opheffen met behulp van UncompressPackage switch.

Met de volgende opdracht wordt het pakket gecomprimeerd zonder het naar het installatiekopiearchief te kopiëren. U kunt indien nodig een gecomprimeerd pakket kopiëren naar een of meer Service Fabric-clusters met copy-ServiceFabricApplicationPackage zonder de SkipCopy vlag. Het pakket bevat nu gezipte bestanden voor de code, configen data pakketten. Het toepassingsmanifest en de servicemanifesten worden niet gezipt, omdat ze nodig zijn voor veel interne bewerkingen. Zo hebben bijvoorbeeld pakketdeling, naam van toepassingstype en versie-extractie voor bepaalde validaties allemaal toegang nodig tot de manifesten. Als u de manifesten zipt, worden deze bewerkingen inefficiënt.

tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
    │   ServiceManifest.xml
    │
    ├───MyCode
    │       MyServiceHost.exe
    │       MySetup.bat
    │
    ├───MyConfig
    │       Settings.xml
    │
    └───MyData
            init.dat
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -CompressPackage -SkipCopy
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│   ApplicationManifest.xml
│
└───MyServiceManifest
       ServiceManifest.xml
       MyCode.zip
       MyConfig.zip
       MyData.zip

U kunt het pakket ook in één stap comprimeren en kopiëren met Copy-ServiceFabricApplicationPackage . Als het pakket groot is, moet u voldoende time-outs opgeven om zowel de pakketcompressie als de upload naar het cluster mogelijk te maken.

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400

Intern berekent Service Fabric controlesommen voor de toepassingspakketten voor validatie. Wanneer u compressie gebruikt, worden de controlesommen berekend op de gezipte versies van elk pakket. Als u een nieuwe zip genereert vanuit hetzelfde toepassingspakket, worden er verschillende controlesommen gemaakt. Gebruik diff-inrichting om validatiefouten te voorkomen. Met deze optie moet u de ongewijzigde pakketten niet opnemen in de nieuwe versie. Verwijs in plaats daarvan rechtstreeks vanuit het nieuwe servicemanifest.

Als het inrichten van diff geen optie is en u de pakketten moet opnemen, nieuwe versies voor de code, configen data pakketten genereren om te voorkomen dat controlesom niet overeenkomt. Het genereren van nieuwe versies voor ongewijzigde pakketten is nodig wanneer een gecomprimeerd pakket wordt gebruikt, ongeacht of de vorige versie compressie gebruikt of niet.

Het pakket is nu correct verpakt, gevalideerd en gecomprimeerd (indien nodig), zodat het klaar is voor implementatie naar een of meer Service Fabric-clusters.

Pakketten comprimeren bij het implementeren met Visual Studio

U kunt Visual Studio instrueren pakketten te comprimeren bij de implementatie, door het CopyPackageParameters element toe te voegen aan uw publicatieprofiel en het CompressPackage kenmerk in te stellen op true.

    <PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
        <ClusterConnectionParameters ConnectionEndpoint="mycluster.westus.cloudapp.azure.com" />
        <ApplicationParameterFile Path="..\ApplicationParameters\Cloud.xml" />
        <CopyPackageParameters CompressPackage="true"/>
    </PublishProfile>

Een sfpkg maken

Vanaf versie 6.1 staat Service Fabric inrichting vanuit een extern archief toe. Met deze optie hoeft het toepassingspakket niet te worden gekopieerd naar het installatiekopieënarchief. In plaats daarvan kunt u een sfpkg bestand maken en uploaden naar een externe winkel en vervolgens de download-URI naar Service Fabric opgeven bij het inrichten. Hetzelfde pakket kan worden ingericht voor meerdere clusters. Inrichten vanuit het externe archief bespaart de tijd die nodig is om het pakket naar elk cluster te kopiëren.

Het sfpkg bestand is een zip-bestand dat het oorspronkelijke toepassingspakket bevat en de extensie .sfpkgheeft. Binnen de zip kan het toepassingspakket worden gecomprimeerd of gedecomprimeerd. De compressie van het toepassingspakket in de zip wordt uitgevoerd op code-, configuratie- en gegevenspakketniveaus, zoals eerder vermeld.

Als u een sfpkg bestand wilt maken, begint u met een map die het oorspronkelijke toepassingspakket bevat, gecomprimeerd of niet. Gebruik vervolgens een hulpprogramma om de map te zippen met de extensie '.sfpkg'. Gebruik bijvoorbeeld ZipFile.CreateFromDirectory.

ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);

De sfpkg moet buiten de band naar het externe archief worden geüpload, buiten Service Fabric. Het externe archief kan elk archief zijn dat een REST HTTP- of HTTPS-eindpunt beschikbaar maakt. Tijdens het inrichten voert Service Fabric een GET-bewerking uit om het sfpkg toepassingspakket te downloaden, zodat de store leestoegang voor het pakket moet toestaan.

Als u het pakket wilt inrichten, gebruikt u externe inrichting, waarvoor de download-URI en de informatie over het toepassingstype vereist zijn.

Notitie

Inrichten op basis van het relatieve pad voor het opslaan van afbeeldingen biedt momenteel geen ondersteuning voor sfpkg bestanden. Daarom mag het sfpkg niet worden gekopieerd naar het afbeeldingsarchief.

Volgende stappen

Toepassingen implementeren en verwijderen beschrijft hoe u PowerShell gebruikt om toepassingsexemplaren te beheren

Het beheren van toepassingsparameters voor meerdere omgevingen beschrijft hoe u parameters en omgevingsvariabelen configureert voor verschillende toepassingsexemplaren.

In het configureren van beveiligingsbeleid voor uw toepassing wordt beschreven hoe u services uitvoert onder beveiligingsbeleid om de toegang te beperken.