Balení aplikace
Tento článek popisuje, jak zabalit aplikaci Service Fabric a připravit ji k nasazení.
Rozložení balíčku
Manifest aplikace, jeden nebo více manifestů služby a další potřebné soubory balíčků musí být uspořádané do konkrétního rozložení pro nasazení do clusteru Service Fabric. Ukázkové manifesty v tomto článku musí být uspořádané 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 pojmenovány 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 by dvě složky se stejnými názvy obsahovaly nezbytné binární soubory pro každý balíček kódu.
Použití SetupEntryPointu
Typické scénáře použití SetupEntryPoint jsou, když potřebujete spustit 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é spustitelný soubor služby potřebuje. 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, najdete v tématu Konfigurace zásad pro vstupní bod nastavení služby.
Konfigurace
Sestavení balíčku pomocí sady Visual Studio
Pokud jste k vytvoření aplikace použili Visual Studio, můžete pomocí příkazu Package (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 Package (Balíček):
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
Aplikaci je také možné programově zabalit pomocí .msbuild.exe
Visual Studio ho spouští pod pokličkou, takže výstup je stejný.
D:\Temp> msbuild HelloWorld.sfproj /t:Package
Testování balíčku
Strukturu balíčku můžete ověřit místně prostřednictvím PowerShellu pomocí příkazu Test-ServiceFabricApplicationPackage . Tento příkaz zkontroluje problémy s analýzou 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 nebo datového balíčku nad rámec kontroly přítomnosti všech potřebných souborů.
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í souborMySetup.bat odkazovaný v souboru SetupEntryPoint manifestu služby. Po přidání chybějícího souboru proběhne 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 pro správné ověření předat v balíčku Test-ServiceFabricApplicationPackage .
Pokud znáte cluster, ve kterém se aplikace nasadí, doporučujeme předat ImageStoreConnectionString
parametr . V tomto případě se balíček ověří také v předchozích verzích aplikace, které už v clusteru běží. Ověření může například zjistit, jestli už byl nasazen balíček se stejnou verzí, ale jiným obsahem.
Jakmile je aplikace správně zabalená a projde ověřením, 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 sniž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ávání nekomprimovaného balíčku, zejména pokud se komprese provádí v rámci kopírování. Díky 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í umožňovat oprávnění k zápisu. Spuštění komprese u již komprimovaného balíčku nepřinese žádné změny.
Balíček můžete komprimovat spuštěním příkazu Prostředí PowerShell Copy-ServiceFabricApplicationPackage s přepínačem CompressPackage
. Balíček můžete dekomprimovat pomocí stejného příkazu pomocí UncompressPackage
přepínače .
Následující příkaz zkomprimuje balíček bez zkopírování do úložiště imagí. Komprimovaný balíček můžete podle potřeby zkopírovat do jednoho nebo několika clusterů Service Fabric pomocí rutiny Copy-ServiceFabricApplicationPackage bez příznaku SkipCopy
.
Balíček teď obsahuje komprimované soubory pro code
balíčky , config
a data
. Manifest aplikace a manifesty služby nejsou zazipované, protože jsou potřebné pro mnoho interních operací. Například sdílení balíčků, název typu aplikace a extrakce verze pro určitá ověření vyžadují přístup k manifestům. Zkomprimování manifestů způsobí, že tyto operace budou 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í rutiny Copy-ServiceFabricApplicationPackage v jednom kroku. Pokud je balíček velký, zajistěte dostatečný časový limit, aby byl čas na kompresi balíčku i nahrání do clusteru.
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400
Služba Service Fabric interně vypočítá kontrolní součty pro balíčky aplikací pro účely ověření. Při použití komprese se kontrolní součty počítají v komprimovaných verzích každého balíčku. Při generování nového souboru ZIP ze stejného balíčku aplikace se vytvoří různé kontrolní součty. Pokud chcete zabránit chybám ověřování, použijte rozdílové zřizování. Při této možnosti nezahrnujte nezměněné balíčky do nové verze. Místo toho na ně odkazujte přímo z manifestu nové služby.
Pokud rozdílové zřizování není možné a musíte zahrnout balíčky, vygenerujte nové verze pro code
balíčky , config
a data
, abyste se vyhnuli neshodě kontrolních součtů. 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, zda předchozí verze používá kompresi.
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
Sadu Visual Studio můžete dát pokyn ke komprimaci balíčků při nasazení přidáním elementu CopyPackageParameters
do profilu publikování a nastavením atributu CompressPackage
na true
hodnotu .
<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
Počínaje verzí 6.1 umožňuje Service Fabric zřizování z externího úložiště.
Při použití této možnosti se balíček aplikace nemusí kopírovat 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í service Fabric zadat identifikátor URI pro stažení. 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 lze balíček aplikace komprimovat nebo dekomprimovat. Komprese balíčku aplikace uvnitř souboru ZIP se provádí na úrovních 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. Potom pomocí libovolného nástroje zazipujte složku s příponou ".sfpkg". Použijte například ZipFile.CreateFromDirectory.
ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);
Soubor sfpkg
se musí 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 ke stažení sfpkg
balíčku aplikace, takže úložiště musí povolit přístup ke čtení pro balíček.
Ke zřízení balíčku použijte externí zřízení, které vyžaduje identifikátor URI stahování a informace o typu aplikace.
Poznámka
Zřizování založené na relativní cestě úložiště imagí v současné době nepodporuje sfpkg
soubory. Proto sfpkg
by neměl být zkopírován 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 aplikací.
Konfigurace zásad zabezpečení pro vaši aplikaci popisuje, jak spouštět služby v rámci zásad zabezpečení, aby se omezil přístup.