Sdílet prostřednictvím


Balení aplikace

Tento článek popisuje, jak zabalit aplikaci Service Fabric a připravit ji na nasazení.

Rozložení balíčku

Manifest aplikace, jeden nebo více manifestů služby a další nezbytné soubory balíčku musí být uspořádány do konkrétního rozložení pro nasazení do clusteru Service Fabric. Ukázkové manifesty v tomto článku by se měly uspořádat do následující adresářové struktury:

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

Složky jsou pojmenované tak, aby odpovídaly atributům Name každého odpovídajícího prvku. Pokud například manifest služby obsahoval dva balíčky kódu s názvy MyCodeA a MyCodeB, pak dvě složky se stejnými názvy by obsahovaly nezbytné binární soubory pro každý balíček kódu.

Použití SetupEntryPointu

Typické scénáře použití SetupEntryPointu jsou situace, kdy potřebujete spustitelný soubor před spuštěním služby nebo potřebujete provést operaci se zvýšenými oprávněními. Příklad:

  • Nastavení a inicializace proměnných prostředí, které potřebuje spustitelný soubor služby Neomezuje se pouze na spustitelné soubory napsané prostřednictvím programovacích modelů Service Fabric. Například npm.exe potřebuje některé proměnné prostředí nakonfigurované pro nasazení Node.js aplikace.
  • Nastavení řízení přístupu instalací certifikátů zabezpečení

Další informace o tom, jak nakonfigurovat SetupEntryPoint, naleznete v tématu Konfigurace zásad pro vstupní bod nastavení služby.

Konfigurovat

Sestavení balíčku pomocí sady Visual Studio

Pokud jste k vytvoření aplikace použili Visual Studio, můžete pomocí příkazu Balíček automaticky vytvořit balíček, který odpovídá výše popsanému rozložení.

Pokud chcete vytvořit balíček, klikněte pravým tlačítkem na projekt aplikace v Průzkumník řešení a zvolte příkaz Balíček:

Zabalení aplikace pomocí sady Visual Studio

Po dokončení balení najdete umístění balíčku v okně Výstup . Krok balení se automaticky provede při nasazení nebo ladění aplikace v sadě Visual Studio.

Sestavení balíčku pomocí příkazového řádku

Je také možné programově zabalit aplikaci pomocí msbuild.exe. Visual Studio ho spouští pod kapotou, takže výstup je stejný.

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

Otestování balíčku

Strukturu balíčků můžete ověřit místně prostřednictvím PowerShellu pomocí příkazu Test-ServiceFabricApplicationPackage . Tento příkaz zkontroluje problémy analýzy manifestu a ověří všechny odkazy. Tento příkaz ověří pouze strukturální správnost adresářů a souborů v balíčku. Neověřuje žádný obsah kódu ani datového balíčku, a to mimo kontrolu, jestli jsou k dispozici všechny potřebné soubory.

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

Tato chyba ukazuje, že v balíčku kódu chybí soubor MySetup.bat odkazovaný v manifestu služby SetupEntryPoint . Po přidání chybějícího souboru projde ověření aplikace:

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

Pokud má vaše aplikace definované parametry aplikace, můžete je předat v test-ServiceFabricApplicationPackage pro správné ověření.

Pokud znáte cluster, ve kterém se aplikace nasadí, doporučujeme předat ImageStoreConnectionString parametr. V tomto případě se balíček také ověří v předchozích verzích aplikace, které už běží v clusteru. Ověření může například zjistit, jestli byl balíček se stejnou verzí, ale už byl nasazen jiný obsah.

Jakmile je aplikace zabalená správně a předá ověření, zvažte komprimaci balíčku pro rychlejší operace nasazení.

Komprese balíčku

Pokud je balíček velký nebo obsahuje mnoho souborů, můžete ho zkomprimovat pro rychlejší nasazení. Komprese zmenšuje počet souborů a velikost balíčku. U komprimovaného balíčku aplikace může nahrávání balíčku aplikace trvat déle než nahrání nekomprimovaného balíčku, zejména pokud se komprese provádí jako součást kopírování. Při kompresi je registrace a zrušení registrace typu aplikace rychlejší.

Mechanismus nasazení je stejný pro komprimované a nekomprimované balíčky. Pokud je balíček komprimovaný, uloží se jako takový v úložišti imagí clusteru a před spuštěním aplikace se na uzlu nekomprimuje. Komprese nahradí platný balíček Service Fabric komprimovanou verzí. Složka musí povolit oprávnění k zápisu. Spuštění komprese u již komprimovaného balíčku nepřináší žádné změny.

Balíček můžete komprimovat spuštěním příkazu PowerShell Copy-ServiceFabricApplicationPackage s přepínačem CompressPackage . Pomocí přepínače můžete balíček zrušit pomocí stejného příkazu UncompressPackage .

Následující příkaz komprimuje balíček bez zkopírování do úložiště imagí. Komprimovaný balíček můžete podle potřeby zkopírovat do jednoho nebo více clusterů Service Fabric pomocí copy-ServiceFabricApplicationPackage bez příznaku SkipCopy . Balíček nyní obsahuje zazipované soubory pro codesoubor , configa data balíčky. Manifest aplikace a manifesty služby nejsou zazipované, protože jsou potřeba pro mnoho interních operací. Například sdílení balíčků, název typu aplikace a extrakce verzí pro určitá ověření musí mít přístup k manifestům. Zazipování manifestů by tyto operace bylo neefektivní.

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

Případně můžete balíček zkomprimovat a zkopírovat pomocí copy-ServiceFabricApplicationPackage v jednom kroku. Pokud je balíček velký, zadejte dostatečný časový limit, který umožní čas komprese balíčku i nahrání do clusteru.

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

Service Fabric interně vypočítá kontrolní součty pro balíčky aplikace pro ověření. Při použití komprese se kontrolní součty počítají na komprimovaných verzích každého balíčku. Generování nového souboru ZIP ze stejného balíčku aplikace vytvoří různé kontrolní součty. Pokud chcete zabránit chybám ověřování, použijte zřizování rozdílů. U této možnosti nezahrnujte do nové verze nezměněné balíčky. Místo toho je odkazujte přímo z nového manifestu služby.

Pokud zřizování rozdílů není možnost a musíte zahrnout balíčky, vygenerovat nové verze pro code, configa data balíčky, aby se zabránilo neshodě kontrolního součtu. Generování nových verzí pro nezměněné balíčky je nezbytné při použití komprimovaného balíčku bez ohledu na to, jestli předchozí verze používá kompresi nebo ne.

Balíček je teď správně zabalený, ověřen a komprimovaný (v případě potřeby), takže je připravený k nasazení do jednoho nebo více clusterů Service Fabric.

Komprese balíčků při nasazování pomocí sady Visual Studio

Visual Studio můžete dát sadě Visual Studio pokyn, aby komprimoval balíčky při nasazení, přidáním elementu CopyPackageParameters do profilu publikování a nastavením atributu CompressPackage na 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>

Vytvoření sfpkg

Od verze 6.1 umožňuje Service Fabric zřizování z externího úložiště. S touto možností nemusí být balíček aplikace zkopírován do úložiště imagí. Místo toho můžete vytvořit sfpkg soubor a nahrát ho do externího úložiště a pak při zřizování zadat identifikátor URI pro stažení do Service Fabric. Stejný balíček je možné zřídit pro více clusterů. Zřizování z externího úložiště šetří čas potřebný ke zkopírování balíčku do každého clusteru.

Soubor sfpkg je zip, který obsahuje počáteční balíček aplikace a má příponu .sfpkg. Uvnitř souboru ZIP může být balíček aplikace komprimován nebo nekomprimován. Komprese balíčku aplikace uvnitř souboru ZIP se provádí na úrovni kódu, konfigurace a datového balíčku, jak je uvedeno výše.

Pokud chcete vytvořit sfpkg soubor, začněte složkou, která obsahuje původní balíček aplikace, komprimovaný nebo ne. Pak pomocí libovolného nástroje zazipujte složku s příponou ".sfpkg". Například použijte ZipFile.CreateFromDirectory.

ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);

Musí sfpkg se nahrát do externího úložiště mimo Service Fabric. Externí úložiště může být libovolné úložiště, které zveřejňuje koncový bod REST HTTP nebo https. Během zřizování Service Fabric spustí operaci GET, která stáhne sfpkg balíček aplikace, takže úložiště musí povolit pro balíček přístup pro čtení.

Pokud chcete balíček zřídit, použijte externí zřizování, které vyžaduje identifikátor URI stahování a informace o typu aplikace.

Poznámka:

Zřizování založené na relativní cestě k úložišti obrázků v současné době nepodporuje sfpkg soubory. sfpkg Proto by se nemělo kopírovat do úložiště imagí.

Další kroky

Nasazení a odebrání aplikací popisuje použití PowerShellu ke správě instancí aplikací.

Správa parametrů aplikace pro více prostředí popisuje, jak nakonfigurovat parametry a proměnné prostředí pro různé instance aplikace.

Konfigurace zásad zabezpečení pro vaši aplikaci popisuje, jak spouštět služby v rámci zásad zabezpečení za účelem omezení přístupu.