Toepassingspakket maken

In dit artikel wordt beschreven hoe u een Service Fabric-toepassing verpakt 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 corresponderend element. Als het servicemanifest bijvoorbeeld twee codepakketten bevat met de namen MyCodeA en MyCodeB, bevatten twee mappen met dezelfde naam 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 wanneer u een bewerking met verhoogde bevoegdheden moet uitvoeren. Bijvoorbeeld:

  • 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. Voor npm.exe zijn bijvoorbeeld omgevingsvariabelen 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 het SetupEntryPoint

Configureren

Een pakket bouwen met behulp van Visual Studio

Als u Visual Studio hebt gebruikt om uw toepassing te maken, kunt u de opdracht Package gebruiken om automatisch een pakket te 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 inpakken met Visual Studio

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

Een pakket bouwen via de opdrachtregel

Het is ook mogelijk om uw toepassing programmatisch te verpakken met behulp van msbuild.exe. Onder de motorkap wordt Visual Studio uitgevoerd, 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 de structurele juistheid van de mappen en bestanden in het pakket gecontroleerd. De code of de inhoud van het gegevenspakket wordt niet gecontroleerd 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 toepassingsverificatie 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 het cluster weet waarin 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. Met de validatie kan bijvoorbeeld worden gedetecteerd of een pakket met dezelfde versie maar andere inhoud al is geïmplementeerd.

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

Een pakket comprimeren

Wanneer een pakket groot is of veel bestanden bevat, 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. Met compressie gaat het registreren en het ongedaan maken van de registratie van het toepassingstype sneller.

Het implementatiemechanisme is hetzelfde voor gecomprimeerde en niet-gecomprimeerde pakketten. Als het pakket is gecomprimeerd, wordt het als zodanig opgeslagen in de clusterinstallatiekopieënopslag en wordt het gedecomprimeerd 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 decomprimeren met dezelfde opdracht, met behulp van UncompressPackage switch.

Met de volgende opdracht wordt het pakket gecomprimeerd zonder het te kopiëren naar het installatiekopiearchief. U kunt een gecomprimeerd pakket naar een of meer Service Fabric-clusters kopiëren, indien nodig, met behulp van Copy-ServiceFabricApplicationPackage zonder de SkipCopy vlag. Het pakket bevat nu zip-bestanden voor de codepakketten , configen data . Het toepassingsmanifest en de servicemanifesten worden niet gezipt, omdat ze nodig zijn voor veel interne bewerkingen. Bijvoorbeeld: pakket delen, naam van toepassingstype en versieextractie voor bepaalde validaties hebben allemaal toegang nodig tot de manifesten. Het zippen van de manifesten zou deze bewerkingen inefficiënt maken.

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, geeft u een time-out op die hoog genoeg is voor zowel de pakketcompressie als het uploaden naar het cluster.

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

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

Als diff-inrichting geen optie is en u de pakketten moet opnemen, genereert u nieuwe versies voor de codepakketten , configen data om te voorkomen dat controlesommen niet overeenkomen. Het genereren van nieuwe versies voor ongewijzigde pakketten is nodig wanneer een gecomprimeerd pakket wordt gebruikt, ongeacht of eerdere versie gebruikmaakt van compressie of niet.

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

Pakketten comprimeren bij het implementeren met Visual Studio

U kunt Visual Studio instrueren om pakketten bij implementatie te comprimeren 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 toe vanuit een extern archief. 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 opslag en vervolgens de download-URI naar Service Fabric opgeven bij het inrichten. Hetzelfde pakket kan worden ingericht voor meerdere clusters. Inrichting 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 die het eerste toepassingspakket bevat en de extensie .sfpkgheeft . In 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 willekeurig hulpprogramma om de map te zippen met de extensie '.sfpkg'. Gebruik bijvoorbeeld ZipFile.CreateFromDirectory.

ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);

De sfpkg moet buiten de band worden geüpload naar de externe opslag, buiten Service Fabric. De externe opslag kan elke winkel zijn die 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

Inrichting op basis van het relatieve pad van het afbeeldingsarchief biedt momenteel geen ondersteuning voor sfpkg bestanden. Daarom moet de sfpkg niet worden gekopieerd naar de afbeeldingsopslag.

Volgende stappen

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

Bij het beheren van toepassingsparameters voor meerdere omgevingen wordt beschreven hoe u parameters en omgevingsvariabelen configureert voor verschillende toepassingsexemplaren.

Beveiligingsbeleid configureren voor uw toepassing beschrijft hoe u services uitvoert onder beveiligingsbeleid om de toegang te beperken.