Toepassingspakket maken

In dit artikel wordt beschreven hoe u een Service Fabric verpakt en deze gereed maakt voor implementatie.

Pakketindeling

Het toepassingsmanifest, een of meer servicemanifests en andere benodigde pakketbestanden moeten in een specifieke indeling worden ingedeeld voor implementatie in een Service Fabric cluster. De voorbeeldmanifests 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 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 een npm.exe bijvoorbeeld een aantal omgevingsvariabelen geconfigureerd voor het implementeren van een node.js toepassing.
  • Toegangsbeheer instellen door beveiligingscertificaten te installeren.

Zie Configure the policy for a service setup entry point (Het beleid configureren voor een service-installatie-ingangspunt) voor meer informatie over het configureren van SetupEntryPoint

Configureren

Een pakket bouwen met behulp van Visual Studio

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

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

Een toepassing verpakken met Visual Studio

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

Een pakket bouwen via de opdrachtregel

Het is ook mogelijk om uw toepassing programmatisch te verpakken met behulp van msbuild.exe . Achter de Visual Studio wordt deze 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. Er wordt alleen 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 geeft aan dat hetMySetup.bat waarnaar wordt verwezen in het servicemanifest SetupEntryPoint ontbreekt in het codepakket. Nadat het ontbrekende bestand is toegevoegd, wordt de verificatie van de toepassing uitgevoerd:

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 waar de toepassing wordt geïmplementeerd, wordt het aanbevolen de parameter door te ImageStoreConnectionString geven. In dit geval wordt het pakket ook gevalideerd met eerdere versies van de toepassing die al worden uitgevoerd in het cluster. 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 de validatie heeft doorstaat, kunt u het pakket 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 de kopie. Met compressie gaat het registreren en 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 het clusterafbeeldingsopslag en wordt het op het knooppunt gedecomprimeerd voordat de toepassing wordt uitgevoerd. De compressie vervangt de geldige Service Fabric 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 switch uit te CompressPackage voeren. U kunt het pakket met dezelfde opdracht uitcomprimeren met behulp van UncompressPackage de switch.

Met de volgende opdracht wordt het pakket gecomprimeerd zonder het naar het afbeeldingsopslag te kopiëren. U kunt een gecomprimeerd pakket naar een of meer Service Fabric clusters kopiëren met copy-serviceFabricApplicationPackage zonder de SkipCopy vlag . Het pakket bevat nu ingepakte bestanden voor code de pakketten , en config data . Het toepassingsmanifest en de servicemanifests worden niet ingepakt, omdat ze nodig zijn voor veel interne bewerkingen. Zo hebben bijvoorbeeld delen van pakketten, de naam van het toepassingstype en versie-extractie voor bepaalde validaties allemaal toegang nodig tot de manifesten. Als de manifesten worden gezald, zouden deze bewerkingen inefficiënt zijn.

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 comprimeren en kopiëren met Copy-ServiceFabricApplicationPackage in één stap. Als het pakket groot is, geeft u een time-out op die hoog genoeg is om tijd toe te staan voor zowel de pakketcompressie als het uploaden naar het cluster.

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

Intern berekent Service Fabric controlesums voor de toepassingspakketten voor validatie. Wanneer u compressie gebruikt, worden de controlesums berekend op basis van de ingepakte versies van elk pakket. Als u een nieuw zip-bestand genereert op basis van hetzelfde toepassingspakket, worden er verschillende controlesums gemaakt. Gebruik diff provisioning om validatiefouten te voorkomen. Met deze optie moet u de ongewijzigde pakketten niet opnemen in de nieuwe versie. In plaats daarvan kunt u er rechtstreeks vanuit het nieuwe servicemanifest naar verwijzen.

Als diff-inrichting geen optie is en u de pakketten moet opnemen, genereert u nieuwe versies voor de pakketten , en om te voorkomen dat code config data controlesum niet overeenkomen. 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 gereed is voor implementatie naar een of meer Service Fabric clusters.

Pakketten comprimeren bij het implementeren met Visual Studio

U kunt instrueren Visual Studio pakketten te comprimeren tijdens de implementatie, door het element toe te voegen aan uw publicatieprofiel en het kenmerk in CopyPackageParameters te stellen op CompressPackage 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 kunt Service Fabric inrichten vanuit een externe opslag. Met deze optie hoeft het toepassingspakket niet naar het afbeeldingsopslag te worden gekopieerd. In plaats daarvan kunt u een bestand maken en uploaden naar een externe opslag en vervolgens de download-URI aan de Service Fabric sfpkg bij het inrichten. Hetzelfde pakket kan worden ingericht voor meerdere clusters. Het inrichten vanuit het externe opslagexemplaar bespaart de tijd die nodig is om het pakket naar elk cluster te kopiëren.

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

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

ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);

De moet buiten de band worden geüpload naar het externe sfpkg Service Fabric. De externe opslag kan elke winkel zijn die een REST http- of https-eindpunt toont. Tijdens het inrichten wordt Service Fabric GET-bewerking uitgevoerd om het toepassingspakket te downloaden, zodat de store LEEStoegang voor sfpkg het pakket moet toestaan.

Als u het pakket wilt inrichten, gebruikt u externe inrichting. Hiervoor zijn de download-URI en de gegevens van het toepassingstype vereist.

Notitie

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

Volgende stappen

In Toepassingen implementeren en verwijderen wordt beschreven hoe u PowerShell gebruikt om toepassings instances te beheren

In Toepassingsparameters voor meerdere omgevingen beheren wordt beschreven hoe u parameters en omgevingsvariabelen configureert voor verschillende toepassings instances.

In Beveiligingsbeleid configureren voor uw toepassing wordt beschreven hoe u services kunt uitvoeren onder beveiligingsbeleid om de toegang te beperken.