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:
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 code
soubor , config
a 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
, config
a 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.