Zabalení a nasazení existujícího spustitelného souboru do Service Fabric
Při balení existujícího spustitelného souboru jako spustitelného souboru hosta můžete zvolit, jestli chcete použít šablonu projektu sady Visual Studio, nebo balíček aplikace vytvořit ručně. Pomocí sady Visual Studio se struktura balíčků aplikací a soubory manifestu vytvářejí novou šablonou projektu za vás.
Tip
Nejjednodušším způsobem, jak zabalit existující spustitelný soubor Windows do služby, je použít Visual Studio a v Linuxu k používání Yeomanu.
Použití sady Visual Studio k zabalení a nasazení existujícího spustitelného souboru
Visual Studio poskytuje šablonu služby Service Fabric, která vám pomůže nasadit spustitelný soubor hosta do clusteru Service Fabric.
- Zvolte Soubor>nový projekt a vytvořte aplikaci Service Fabric.
- Jako šablonu služby zvolte Spustitelný soubor hosta.
- Kliknutím na Procházet vyberte složku se spustitelným souborem a vyplňte zbývající parametry pro vytvoření služby.
- Chování balíčku kódu Lze nastavit tak, aby zkopíroval veškerý obsah složky do projektu sady Visual Studio, což je užitečné, pokud se spustitelný soubor nezmění. Pokud očekáváte, že se spustitelný soubor změní a chcete dynamicky vyzvednout nové buildy, můžete místo toho zvolit propojení se složkou. Propojené složky můžete použít při vytváření projektu aplikace v sadě Visual Studio. To odkazuje na zdrojové umístění v projektu, což vám umožní aktualizovat spustitelný soubor hosta ve zdrojovém cíli. Tyto aktualizace se stanou součástí balíčku aplikace při sestavování.
- Program určuje spustitelný soubor, který se má spustit, aby se služba spustila.
- Argumenty určuje argumenty , které mají být předány spustitelnému souboru. Může to být seznam parametrů s argumenty.
- WorkingFolder určuje pracovní adresář pro proces, který se má spustit. Můžete zadat tři hodnoty:
CodeBase
určuje, že pracovní adresář bude nastaven na adresář kódu v balíčku aplikace (Code
adresář zobrazený v předchozí struktuře souborů).CodePackage
určuje, že pracovní adresář bude nastaven na kořen balíčku aplikace (GuestService1Pkg
viz předchozí struktura souborů).Work
určuje, že soubory jsou umístěny v podadresáři s názvem práce.
- Zadejte název služby a klikněte na OK.
- Pokud vaše služba potřebuje koncový bod pro komunikaci, můžete teď přidat protokol, port a typ do ServiceManifest.xml souboru. Například:
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />
. - Teď můžete balíček použít a publikovat akci pro místní cluster laděním řešení v sadě Visual Studio. Až budete připraveni, můžete aplikaci publikovat do vzdáleného clusteru nebo vrátit řešení se změnami pro správu zdrojového kódu.
- Přečtěte si , jak spustitelná služba hosta spuštěná v Service Fabric Exploreru zobrazit spuštěnou aplikaci .
Příklad návodu najdete v tématu Vytvoření první spustitelné aplikace hosta pomocí sady Visual Studio.
Balení několika spustitelných souborů pomocí sady Visual Studio
Visual Studio můžete použít k vytvoření balíčku aplikace, který obsahuje více spustitelných souborů hosta. Po přidání prvního spustitelného souboru hosta klikněte pravým tlačítkem na projekt aplikace a výběrem služby Add-New> Service Fabric přidejte do řešení druhý spustitelný projekt hosta.
Poznámka:
Pokud se rozhodnete propojit zdroj v projektu sady Visual Studio, sestavení řešení sady Visual Studio zajistí, aby byl balíček aplikace aktuální se změnami ve zdroji.
Použití Yeomanu k zabalení a nasazení existujícího spustitelného souboru v Linuxu
Postup vytvoření a nasazení spustitelného souboru hosta v Linuxu je stejný jako nasazení aplikace v jazyce C# nebo Java.
- V terminálu zadejte
yo azuresfguest
. - Pojmenujte svoji aplikaci.
- Pojmenujte službu a zadejte podrobnosti, včetně cesty spustitelného souboru a parametrů, se kterými se musí vyvolat.
Yeoman vytvoří balíček aplikace s příslušnými soubory aplikace a manifestu spolu s instalací a odinstalací skriptů.
Balení více spustitelných souborů pomocí Yeomanu v Linuxu
Pokud chcete přidat další službu do aplikace již vytvořené pomocí yo
, proveďte následující kroky:
- Změňte adresář na kořenovou složku stávající aplikace. Například
cd ~/YeomanSamples/MyApplication
, pokudMyApplication
je aplikace vytvořená pomocí Yeomanu. - Spusťte
yo azuresfguest:AddService
a zadejte potřebné podrobnosti.
Ruční zabalení a nasazení existujícího spustitelného souboru
Proces ručního balení spustitelného souboru hosta je založený na následujících obecných krocích:
- Vytvořte adresářovou strukturu balíčku.
- Přidejte kód a konfigurační soubory aplikace.
- Upravte soubor manifestu služby.
- Upravte soubor manifestu aplikace.
Vytvoření struktury adresáře balíčku
Můžete začít vytvořením adresářové struktury, jak je popsáno v tématu Balíček aplikace Azure Service Fabric.
Přidání kódu a konfiguračních souborů aplikace
Po vytvoření adresářové struktury můžete do adresářových adresářů a adresářů přidat kód a konfigurační soubory aplikace. Můžete také vytvořit další adresáře nebo podadresáře pod kódem nebo konfiguračními adresáři.
Service Fabric provádí xcopy
obsah kořenového adresáře aplikace, takže neexistuje žádná předdefinovaná struktura, která by se používala kromě vytvoření dvou hlavních adresářů, kódu a nastavení. (Pokud chcete, můžete vybrat různá jména. Další podrobnosti najdete v další části.)
Poznámka:
Ujistěte se, že zahrnete všechny soubory a závislosti, které aplikace potřebuje. Service Fabric zkopíruje obsah balíčku aplikace na všech uzlech v clusteru, kde se nasadí služby aplikace. Balíček by měl obsahovat veškerý kód, který musí aplikace spustit. Nepředpokládáme, že závislosti jsou již nainstalovány.
Úprava souboru manifestu služby
Dalším krokem je úprava souboru manifestu služby tak, aby obsahoval následující informace:
- Název typu služby. Toto je ID, které Service Fabric používá k identifikaci služby.
- Příkaz, který se má použít ke spuštění aplikace (ExeHost).
- Všechny skripty, které je potřeba spustit, aby se aplikace nastavila (SetupEntrypoint).
Následuje příklad ServiceManifest.xml
souboru:
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="NodeApp" Version="1.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<ServiceTypes>
<StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true"/>
</ServiceTypes>
<CodePackage Name="code" Version="1.0.0.0">
<SetupEntryPoint>
<ExeHost>
<Program>scripts\launchConfig.cmd</Program>
</ExeHost>
</SetupEntryPoint>
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>
</CodePackage>
<Resources>
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>
</Resources>
</ServiceManifest>
Následující části obsahují různé části souboru, které potřebujete aktualizovat.
Aktualizace typů služeb
<ServiceTypes>
<StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
- Můžete vybrat libovolný název, který chcete použít
ServiceTypeName
. Hodnota se používá vApplicationManifest.xml
souboru k identifikaci služby. - Zadejte
UseImplicitHost="true"
. Tento atribut říká Service Fabric, že služba je založená na samostatné aplikaci, takže je potřeba, aby služba Service Fabric spustila jako proces a monitorovala její stav.
Aktualizace balíčku CodePackage
Element CodePackage určuje umístění (a verzi) kódu služby.
<CodePackage Name="Code" Version="1.0.0.0">
Element Name
se používá k zadání názvu adresáře v balíčku aplikace, který obsahuje kód služby. CodePackage
má version
také atribut. Dá se použít k určení verze kódu a dá se také použít k upgradu kódu služby pomocí infrastruktury správy životního cyklu aplikace v Service Fabric.
Volitelné: Aktualizace setupEntrypointu
<SetupEntryPoint>
<ExeHost>
<Program>scripts\launchConfig.cmd</Program>
</ExeHost>
</SetupEntryPoint>
Element SetupEntryPoint slouží k určení libovolného spustitelného souboru nebo dávkového souboru, který by se měl spustit před spuštěním kódu služby. Jedná se o volitelný krok, takže není nutné ho zahrnout, pokud není vyžadována inicializace. SetupEntryPoint se spustí při každém restartování služby.
Existuje jenom jeden SetupEntryPoint, takže instalační skripty musí být seskupeny do jednoho dávkového souboru, pokud instalační program aplikace vyžaduje více skriptů. SetupEntryPoint může spustit libovolný typ souboru: spustitelné soubory, dávkové soubory a rutiny PowerShellu. Další podrobnosti najdete v tématu Konfigurace SetupEntryPointu.
V předchozím příkladu spustí SetupEntryPoint dávkový soubor, LaunchConfig.cmd
který se nachází v scripts
podadresáři adresáře kódu (za předpokladu, že WorkingFolder element je nastaven na CodeBase).
Aktualizace vstupního bodu
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
</ExeHost>
</EntryPoint>
Element EntryPoint
v souboru manifestu služby slouží k určení způsobu spuštění služby.
Element ExeHost
určuje spustitelný soubor (a argumenty), který se má použít ke spuštění služby. Volitelně můžete přidat IsExternalExecutable="true"
atribut, který ExeHost
označuje, že program je externí spustitelný soubor mimo balíček kódu. Například <ExeHost IsExternalExecutable="true">
.
Program
určuje název spustitelného souboru, který by měl službu spustit.Arguments
určuje argumenty, které mají být předány spustitelnému souboru. Může to být seznam parametrů s argumenty.WorkingFolder
určuje pracovní adresář pro proces, který se má spustit. Můžete zadat tři hodnoty:CodeBase
určuje, že pracovní adresář bude nastaven na adresář kódu v balíčku aplikace (Code
adresář v předchozí struktuře souborů).CodePackage
určuje, že pracovní adresář bude nastaven na kořen balíčku aplikace (GuestService1Pkg
v předchozí struktuře souborů).Work
určuje, že soubory jsou umístěny v podadresáři s názvem práce.
WorkingFolder je užitečný k nastavení správného pracovního adresáře tak, aby relativní cesty mohly být použity buď aplikací, nebo inicializačními skripty.
Aktualizace koncových bodů a registrace ve službě Pojmenování pro komunikaci
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>
V předchozím příkladu Endpoint
element určuje koncové body, na které může aplikace naslouchat. V tomto příkladu Node.js aplikace naslouchá na portu 3000 http.
Kromě toho můžete požádat Service Fabric o publikování tohoto koncového bodu do služby pojmenování, aby ostatní služby mohly zjistit adresu koncového bodu této služby. To vám umožní komunikovat mezi službami, které jsou spustitelnými soubory hosta.
Publikovaná adresa koncového bodu je ve formuláři UriScheme://IPAddressOrFQDN:Port/PathSuffix
. UriScheme
a PathSuffix
jsou volitelné atributy. IPAddressOrFQDN
je IP adresa nebo plně kvalifikovaný název domény uzlu, na který se tento spustitelný soubor umístí, a vypočítá se za vás.
V následujícím příkladu se po nasazení služby v Service Fabric Exploreru zobrazí koncový bod podobný http://10.1.4.92:3000/myapp/
publikování instance služby. Nebo pokud se jedná o místní počítač, uvidíte http://localhost:3000/myapp/
.
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />
</Endpoints>
Tyto adresy můžete použít s reverzním proxy serverem ke komunikaci mezi službami.
Úprava souboru manifestu aplikace
Jakmile soubor nakonfigurujete Servicemanifest.xml
, musíte v souboru udělat nějaké změny ApplicationManifest.xml
, abyste měli jistotu, že se použije správný typ a název služby.
<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="NodeAppType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>
</ApplicationManifest>
ServiceManifestImport
V elementu ServiceManifestImport
můžete zadat jednu nebo více služeb, které chcete zahrnout do aplikace. Na služby se odkazuje ServiceManifestName
, který určuje název adresáře, ve kterém ServiceManifest.xml
se soubor nachází.
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>
Nastavení protokolování
U spustitelných souborů hosta je užitečné zobrazit protokoly konzoly a zjistit, jestli aplikace a konfigurační skripty zobrazují nějaké chyby.
Přesměrování konzoly lze v souboru nakonfigurovat ServiceManifest.xml
pomocí elementu ConsoleRedirection
.
Upozorňující
Nikdy nepoužívejte zásadu přesměrování konzoly v aplikaci nasazené v produkčním prostředí, protože to může mít vliv na převzetí služeb při selhání aplikace. Tuto možnost použijte pouze pro účely místního vývoje a ladění.
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
<ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
</ExeHost>
</EntryPoint>
ConsoleRedirection
lze použít k přesměrování výstupu konzoly (stdout i stderr) do pracovního adresáře. To umožňuje ověřit, že během instalace nebo spuštění aplikace v clusteru Service Fabric nedošlo k žádným chybám.
FileRetentionCount
určuje, kolik souborů je uloženo v pracovním adresáři. Hodnota 5 například znamená, že soubory protokolu pro předchozí pět spuštění jsou uloženy v pracovním adresáři.
FileMaxSizeInKb
určuje maximální velikost souborů protokolu.
Soubory protokolu se ukládají do některého z pracovních adresářů služby. K určení umístění souborů použijte Service Fabric Explorer k určení uzlu, na kterém je služba spuštěná, a používaného pracovního adresáře. Tento proces je popsaný dále v tomto článku.
Nasazení
Posledním krokem je nasazení aplikace. Následující skript PowerShellu ukazuje, jak nasadit aplikaci do místního vývojového clusteru a spustit novou službu Service Fabric.
Connect-ServiceFabricCluster localhost:19000
Write-Host 'Copying application package...'
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath 'C:\Dev\MultipleApplications' -ImageStoreConnectionString 'file:C:\SfDevCluster\Data\ImageStoreShare' -ApplicationPackagePathInImageStore 'nodeapp'
Write-Host 'Registering application type...'
Register-ServiceFabricApplicationType -ApplicationPathInImageStore 'nodeapp'
New-ServiceFabricApplication -ApplicationName 'fabric:/nodeapp' -ApplicationTypeName 'NodeAppType' -ApplicationTypeVersion 1.0
New-ServiceFabricService -ApplicationName 'fabric:/nodeapp' -ServiceName 'fabric:/nodeapp/nodeappservice' -ServiceTypeName 'NodeApp' -Stateless -PartitionSchemeSingleton -InstanceCount 1
Tip
Komprimujte balíček před zkopírováním do úložiště imagí, pokud je balíček velký nebo obsahuje mnoho souborů. Další informace si můžete přečíst zde.
Službu Service Fabric je možné nasadit v různých konfiguracích. Dá se například nasadit jako jedna nebo více instancí, nebo je možné ji nasadit takovým způsobem, že na každém uzlu clusteru Service Fabric existuje jedna instance služby.
Parametr InstanceCount
New-ServiceFabricService
rutiny slouží k určení počtu instancí služby, které se mají spustit v clusteru Service Fabric. Hodnotu můžete nastavit InstanceCount
v závislosti na typu aplikace, kterou nasazujete. Mezi nejběžnější scénáře patří:
InstanceCount = "1"
. V tomto případě se v clusteru nasadí jenom jedna instance služby. Plánovač Service Fabric určuje, na kterém uzlu bude služba nasazena.InstanceCount ="-1"
. V tomto případě se jedna instance služby nasadí na každý uzel v clusteru Service Fabric. Výsledkem je jedna (a pouze jedna) instance služby pro každý uzel v clusteru.
To je užitečná konfigurace pro front-endové aplikace (například koncový bod REST), protože klientské aplikace se musí připojit k libovolnému uzlu v clusteru, aby používaly koncový bod. Tuto konfiguraci lze použít také v případě, že jsou například všechny uzly clusteru Service Fabric připojené k nástroji pro vyrovnávání zatížení. Klientský provoz je pak možné distribuovat napříč službou, která běží na všech uzlech v clusteru.
Kontrola spuštěné aplikace
V Service Fabric Exploreru identifikujte uzel, na kterém je služba spuštěná. V tomto příkladu běží na Node1:
Pokud přejdete na uzel a přejdete k aplikaci, zobrazí se základní informace o uzlu, včetně jeho umístění na disku.
Pokud přejdete do adresáře pomocí Průzkumníka serveru, najdete pracovní adresář a složku protokolu služby, jak je znázorněno na následujícím snímku obrazovky:
Další kroky
V tomto článku jste se dozvěděli, jak zabalit spustitelný soubor hosta a nasadit ho do Service Fabric. Související informace a úkoly najdete v následujících článcích.
- Ukázka balení a nasazení spustitelného souboru hosta, včetně odkazu na předběžné verze nástroje pro balení
- Ukázka dvou spustitelných souborů hosta (C# a nodejs) komunikujících přes službu pojmenování pomocí REST
- Vytvoření první aplikace Service Fabric pomocí sady Visual Studio