Mevcut yürütülebilir dosyayı paketleme ve Service Fabric'e dağıtma
Var olan bir yürütülebilir dosyayı konuk yürütülebilir dosyası olarak paketlerken Visual Studio proje şablonu kullanmayı veya uygulama paketini el ile oluşturmayı seçebilirsiniz. Visual Studio kullanılarak, uygulama paketi yapısı ve bildirim dosyaları sizin için yeni proje şablonu tarafından oluşturulur.
İpucu
Var olan bir Windows yürütülebilir dosyasını bir hizmete paketlemenin en kolay yolu, Yeoman kullanmak için Visual Studio ve Linux'ı kullanmaktır
Visual Studio'yu kullanarak mevcut yürütülebilir dosyayı paketleme ve dağıtma
Visual Studio, bir Service Fabric kümesine konuk yürütülebilir dosyası dağıtmanıza yardımcı olacak bir Service Fabric hizmet şablonu sağlar.
- Dosya>Yeni Proje'yi seçin ve bir Service Fabric uygulaması oluşturun.
- Hizmet şablonu olarak Konuk Yürütülebilir Dosyası'nı seçin.
- Yürütülebilir dosyanızın olduğu klasörü seçmek için Gözat'a tıklayın ve hizmeti oluşturmak için parametrelerin geri kalanını doldurun.
- Kod Paketi Davranışı. Klasörünüzün tüm içeriğini Visual Studio Projesi'ne kopyalanacak şekilde ayarlanabilir. Bu, yürütülebilir dosya değişmezse kullanışlıdır. Yürütülebilir dosyanın değişmesini bekliyorsanız ve yeni derlemeleri dinamik olarak alabilmeyi istiyorsanız, bunun yerine klasöre bağlanmayı seçebilirsiniz. Visual Studio'da uygulama projesi oluştururken bağlı klasörleri kullanabilirsiniz. Bu, projenin içinden kaynak konuma bağlanır ve konuk yürütülebilir dosyasını kaynak hedefinde güncelleştirmenizi mümkün hale getirir. Bu güncelleştirmeler derlemedeki uygulama paketinin bir parçası haline gelir.
- Program , hizmeti başlatmak için çalıştırılması gereken yürütülebilir dosyayı belirtir.
- Bağımsız değişkenler yürütülebilir dosyaya geçirilmesi gereken bağımsız değişkenleri belirtir. Bağımsız değişkenler içeren parametrelerin listesi olabilir.
- WorkingFolder , başlatılacak işlem için çalışma dizinini belirtir. Üç değer belirtebilirsiniz:
CodeBase
çalışma dizininin uygulama paketindeki kod dizinine (Code
önceki dosya yapısında gösterilen dizin) ayarlandığını belirtir.CodePackage
çalışma dizininin uygulama paketinin köküne (GuestService1Pkg
önceki dosya yapısında gösterilen) ayarlandığını belirtir.Work
dosyaların work adlı bir alt dizine yerleştirildiğini belirtir.
- Hizmetinize bir ad verin ve Tamam’a tıklayın.
- Hizmetinizin iletişim için bir uç noktaya ihtiyacı varsa, artık protokolü, bağlantı noktasını ve türü ServiceManifest.xml dosyasına ekleyebilirsiniz. Örneğin:
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />
. - Artık Visual Studio'da çözümün hatalarını ayıklayarak paket ve yayımlama eylemini yerel kümenizde kullanabilirsiniz. Hazır olduğunuzda, uygulamayı uzak bir kümede yayımlayabilir veya çözümü kaynak denetimine iade edebilirsiniz.
- Service Fabric Explorer'de çalışan konuk yürütülebilir hizmetinizi nasıl görüntüleyebileceğinizi görmek için çalışan uygulamanızı denetleyin bölümünü okuyun.
Örnek bir kılavuz için bkz. Visual Studio kullanarak ilk konuk yürütülebilir uygulamanızı oluşturma.
Visual Studio ile birden çok yürütülebilir dosyayı paketleme
Visual Studio'yu kullanarak birden çok konuk yürütülebilir dosyası içeren bir uygulama paketi oluşturabilirsiniz. İlk konuk yürütülebilir dosyasını ekledikten sonra uygulama projesine sağ tıklayın ve Add-New> Service Fabric hizmetini seçerek çözüme ikinci konuk yürütülebilir projesini ekleyin.
Not
Visual Studio projesindeki kaynağı bağlamayı seçerseniz, Visual Studio çözümünü derlemek, uygulama paketinizin kaynaktaki değişikliklerle güncel olduğundan emin olur.
Linux'ta var olan bir yürütülebilir dosyayı paketlemek ve dağıtmak için Yeoman kullanma
Linux'ta konuk yürütülebilir dosyası oluşturma ve dağıtma yordamı, C# veya Java uygulaması dağıtmakla aynıdır.
- Bir terminal penceresinde
yo azuresfguest
yazın. - Uygulamanızı adlandırın.
- Hizmetinizi adlandırın ve yürütülebilir dosyanın yolu ve çağrılması gereken parametreler de dahil olmak üzere ayrıntıları sağlayın.
Yeoman, uygun uygulama ve bildirim dosyalarıyla birlikte yükleme ve kaldırma betikleriyle birlikte bir uygulama paketi oluşturur.
Linux üzerinde Yeoman kullanarak birden çok yürütülebilir dosyayı paketleme
yo
kullanılarak oluşturulmuş bir uygulamaya başka bir hizmet eklemek için aşağıdaki adımları uygulayın:
- Dizini mevcut uygulamanın kök dizinine değiştirin. Örneğin Yeoman tarafından oluşturulan uygulama
MyApplication
isecd ~/YeomanSamples/MyApplication
olacaktır. - komutunu çalıştırın
yo azuresfguest:AddService
ve gerekli ayrıntıları sağlayın.
Mevcut yürütülebilir dosyayı el ile paketleme ve dağıtma
Konuk yürütülebilir dosyasını el ile paketleme işlemi aşağıdaki genel adımları temel alır:
- Paket dizini yapısını oluşturun.
- Uygulamanın kodunu ve yapılandırma dosyalarını ekleyin.
- Hizmet bildirim dosyasını düzenleyin.
- Uygulama bildirim dosyasını düzenleyin.
Paket dizini yapısını oluşturma
Azure Service Fabric Uygulamasını Paketleme bölümünde açıklandığı gibi dizin yapısını oluşturarak başlayabilirsiniz.
Uygulamanın kodunu ve yapılandırma dosyalarını ekleme
Dizin yapısını oluşturduktan sonra, uygulamanın kodunu ve yapılandırma dosyalarını kod ve yapılandırma dizinlerinin altına ekleyebilirsiniz. Kod veya yapılandırma dizinleri altında ek dizinler veya alt dizinler de oluşturabilirsiniz.
Service Fabric, uygulama kök dizininin içeriğinin bir xcopy
kısmını yapar, bu nedenle kod ve ayarlar olmak üzere iki üst dizin oluşturmaktan başka kullanılacak önceden tanımlanmış bir yapı yoktur. (İsterseniz farklı adlar seçebilirsiniz. Diğer ayrıntılar sonraki bölümde yer almaktadır.)
Not
Uygulamanın ihtiyaç duyduğu tüm dosyaları ve bağımlılıkları eklediğinizden emin olun. Service Fabric, uygulama paketinin içeriğini, uygulama hizmetlerinin dağıtılacağı kümedeki tüm düğümlere kopyalar. Paket, uygulamanın çalışması için gereken tüm kodu içermelidir. Bağımlılıkların zaten yüklü olduğunu varsaymayın.
Hizmet bildirim dosyasını düzenleme
Sonraki adım, hizmet bildirim dosyasını aşağıdaki bilgileri içerecek şekilde düzenlemektir:
- Hizmet türünün adı. Bu, Service Fabric'in bir hizmeti tanımlamak için kullandığı bir kimliktir.
- Uygulamayı başlatmak için kullanılacak komut (ExeHost).
- Uygulamayı ayarlamak için çalıştırılması gereken tüm betikler (SetupEntrypoint).
Aşağıda bir dosya örneği verilmiştir ServiceManifest.xml
:
<?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>
Aşağıdaki bölümler, dosyanın güncelleştirmeniz gereken farklı bölümlerinin üzerinden geçer.
ServiceTypes'i güncelleştirme
<ServiceTypes>
<StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
- için
ServiceTypeName
istediğiniz herhangi bir adı seçebilirsiniz. değeri, hizmeti tanımlamak için dosyasında kullanılırApplicationManifest.xml
. UseImplicitHost="true"
belirtin. Bu öznitelik Service Fabric'e hizmetin kendi içinde bulunan bir uygulamayı temel aldığı konusunda bilgi sağlar, bu nedenle Service Fabric'in tek yapması gereken bunu bir işlem olarak başlatmak ve sistem durumunu izlemektir.
CodePackage'i Güncelleştirme
CodePackage öğesi, hizmet kodunun konumunu (ve sürümünü) belirtir.
<CodePackage Name="Code" Version="1.0.0.0">
Name
öğesi, hizmet kodunu içeren uygulama paketindeki dizinin adını belirtmek için kullanılır. CodePackage
özniteliğine version
de sahiptir. Bu, kodun sürümünü belirtmek için kullanılabilir ve service Fabric'teki uygulama yaşam döngüsü yönetim altyapısını kullanarak hizmetin kodunu yükseltmek için de kullanılabilir.
İsteğe bağlı: Kurulumu GüncelleştirmeEntrypoint
<SetupEntryPoint>
<ExeHost>
<Program>scripts\launchConfig.cmd</Program>
</ExeHost>
</SetupEntryPoint>
SetupEntryPoint öğesi, hizmetin kodu başlatılmadan önce yürütülmesi gereken yürütülebilir veya toplu iş dosyasını belirtmek için kullanılır. bu isteğe bağlı bir adımdır, bu nedenle başlatma gerekmiyorsa eklenmesi gerekmez. Hizmet her yeniden başlatıldığında SetupEntryPoint yürütülür.
Tek bir SetupEntryPoint olduğundan, uygulamanın kurulumu birden çok betik gerektiriyorsa kurulum betiklerinin tek bir toplu iş dosyasında gruplanması gerekir. SetupEntryPoint herhangi bir dosya türünü yürütebilir: yürütülebilir dosyalar, toplu iş dosyaları ve PowerShell cmdlet'leri. Diğer ayrıntılar için bkz. SetupEntryPoint'i yapılandırma.
Yukarıdaki örnekte, SetupEntryPoint kod dizininin scripts
alt dizininde bulunan adlı LaunchConfig.cmd
bir toplu iş dosyası çalıştırır (WorkingFolder öğesinin CodeBase olarak ayarlandığı varsayılır).
EntryPoint'i Güncelleştirme
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
</ExeHost>
</EntryPoint>
EntryPoint
Hizmet bildirim dosyasındaki öğesi, hizmetin nasıl başlatılacağını belirtmek için kullanılır.
öğesi, ExeHost
hizmeti başlatmak için kullanılması gereken yürütülebilir dosyayı (ve bağımsız değişkenleri) belirtir. İsteğe bağlı olarak, programın kod paketinin dışında bir dış yürütülebilir dosya olduğunu belirtmek için ExeHost
özniteliğini ekleyebilirsinizIsExternalExecutable="true"
. Örneğin, <ExeHost IsExternalExecutable="true">
.
Program
hizmeti başlatması gereken yürütülebilir dosyanın adını belirtir.Arguments
yürütülebilir dosyaya geçirilmesi gereken bağımsız değişkenleri belirtir. Bağımsız değişkenler içeren parametrelerin listesi olabilir.WorkingFolder
başlatılacak işlemin çalışma dizinini belirtir. Üç değer belirtebilirsiniz:CodeBase
çalışma dizininin uygulama paketindeki kod dizinine (Code
önceki dosya yapısındaki dizin) ayarlandığını belirtir.CodePackage
çalışma dizininin uygulama paketinin köküne (GuestService1Pkg
önceki dosya yapısında) ayarlandığını belirtir.Work
dosyaların work adlı bir alt dizine yerleştirildiğini belirtir.
WorkingFolder, göreli yolların uygulama veya başlatma betikleri tarafından kullanılabilmesi için doğru çalışma dizinini ayarlamak için kullanışlıdır.
Uç Noktaları güncelleştirme ve iletişim için Adlandırma Hizmeti'ne kaydolma
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>
Yukarıdaki örnekte öğesi, Endpoint
uygulamanın dinleyebileceği uç noktaları belirtir. Bu örnekte, Node.js uygulaması 3000 numaralı bağlantı noktasında http'yi dinler.
Ayrıca, diğer hizmetlerin bu hizmette uç nokta adresini bulabilmesi için Service Fabric'in bu uç noktayı Adlandırma Hizmeti'ne yayımlamasını isteyebilirsiniz. Bu, konuk yürütülebilir dosyaları olan hizmetler arasında iletişim kurabilmenizi sağlar.
Yayımlanan uç nokta adresi biçimindedir UriScheme://IPAddressOrFQDN:Port/PathSuffix
. UriScheme
ve PathSuffix
isteğe bağlı özniteliklerdir. IPAddressOrFQDN
, bu yürütülebilir dosyanın yerleştirildiği düğümün IP adresi veya tam etki alanı adıdır ve sizin için hesaplanır.
Aşağıdaki örnekte, hizmet dağıtıldıktan sonra, Service Fabric Explorer hizmet örneği için yayımlanana http://10.1.4.92:3000/myapp/
benzer bir uç nokta görürsünüz. Veya bu yerel bir makineyse öğesini görürsünüz http://localhost:3000/myapp/
.
<Endpoints>
<Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />
</Endpoints>
Hizmetler arasında iletişim kurmak için bu adresleri ters proxy ile kullanabilirsiniz.
Uygulama bildirim dosyasını düzenleme
Dosyayı yapılandırdıktan Servicemanifest.xml
sonra, doğru hizmet türünün ve adının kullanıldığından emin olmak için dosyada bazı değişiklikler ApplicationManifest.xml
yapmanız gerekir.
<?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
öğesinde ServiceManifestImport
, uygulamaya eklemek istediğiniz bir veya daha fazla hizmeti belirtebilirsiniz. Hizmetlere, dosyanın bulunduğu ServiceManifest.xml
dizinin adını belirten ile ServiceManifestName
başvurulur.
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>
Günlüğe kaydetmeyi ayarlama
Konuk yürütülebilir dosyaları için, uygulama ve yapılandırma betiklerinin herhangi bir hata gösterip göstermediğini öğrenmek için konsol günlüklerini görebilmek yararlıdır.
Konsol yeniden yönlendirmesi, öğesi kullanılarak dosyada ServiceManifest.xml
ConsoleRedirection
yapılandırılabilir.
Uyarı
Bu, uygulama yük devretmesini etkileyebileceğinden, üretimde dağıtılan bir uygulamada konsol yeniden yönlendirme ilkesini hiçbir zaman kullanmayın. Bunu yalnızca yerel geliştirme ve hata ayıklama amacıyla kullanın.
<EntryPoint>
<ExeHost>
<Program>node.exe</Program>
<Arguments>bin/www</Arguments>
<WorkingFolder>CodeBase</WorkingFolder>
<ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
</ExeHost>
</EntryPoint>
ConsoleRedirection
konsol çıkışını (stdout ve stderr) bir çalışma dizinine yeniden yönlendirmek için kullanılabilir. Bu, Service Fabric kümesinde uygulamanın kurulumu veya yürütülmesi sırasında hata olmadığını doğrulama olanağı sağlar.
FileRetentionCount
çalışma dizinine kaç tane dosya kaydedildiğini belirler. Örneğin 5 değeri, önceki beş yürütmenin günlük dosyalarının çalışma dizininde depolandığı anlamına gelir.
FileMaxSizeInKb
günlük dosyalarının en büyük boyutunu belirtir.
Günlük dosyaları hizmetin çalışma dizinlerinden birine kaydedilir. Dosyaların nerede bulunduğunu belirlemek için Service Fabric Explorer kullanarak hizmetin hangi düğümde çalıştığını ve hangi çalışma dizininin kullanıldığını belirleyin. Bu işlem, bu makalenin devamında ele alınmıştır.
Dağıtım
Son adım uygulamanızı dağıtmaktır. Aşağıdaki PowerShell betiği, uygulamanızı yerel geliştirme kümesine dağıtmayı ve yeni bir Service Fabric hizmetini başlatmayı gösterir.
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
İpucu
Paket büyükse veya çok fazla dosyası varsa görüntü deposuna kopyalamadan önce paketi sıkıştırın. Daha fazla bilgi için buraya bakabilirsiniz.
Bir Service Fabric hizmeti çeşitli "yapılandırmalarda" dağıtılabilir. Örneğin, tek veya birden çok örnek olarak dağıtılabilir veya Service Fabric kümesinin her düğümünde hizmetin bir örneği olacak şekilde dağıtılabilir.
InstanceCount
Cmdlet'in New-ServiceFabricService
parametresi, Service Fabric kümesinde hizmetin kaç örneğinin başlatılması gerektiğini belirtmek için kullanılır. Dağıttığınız InstanceCount
uygulamanın türüne bağlı olarak değeri ayarlayabilirsiniz. En yaygın iki senaryo şunlardır:
InstanceCount = "1"
. Bu durumda, kümede hizmetin yalnızca bir örneği dağıtılır. Hizmetin hangi düğümde dağıtılacağı Service Fabric'in zamanlayıcısı tarafından belirlenir.InstanceCount ="-1"
. Bu durumda hizmetin bir örneği Service Fabric kümesindeki her düğüme dağıtılır. Sonuç, kümedeki her düğüm için hizmetin bir (ve yalnızca bir) örneğine sahip olmaktır.
İstemci uygulamalarının uç noktayı kullanmak için kümedeki düğümlerden herhangi birine "bağlanması" gerektiğinden, bu, ön uç uygulamalar (örneğin rest uç noktası) için kullanışlı bir yapılandırmadır. Bu yapılandırma, örneğin Service Fabric kümesinin tüm düğümleri bir yük dengeleyiciye bağlandığında da kullanılabilir. İstemci trafiği daha sonra kümedeki tüm düğümlerde çalışan hizmet arasında dağıtılabilir.
Çalışan uygulamanızı denetleme
Service Fabric Explorer'da hizmetin çalıştığı düğümü belirleyin. Bu örnekte Node1 üzerinde çalışır:
Düğüme gidip uygulamaya göz atarsanız, disk üzerindeki konumu da dahil olmak üzere temel düğüm bilgilerini görürsünüz.
Sunucu Gezgini'ni kullanarak dizine göz atarsanız, aşağıdaki ekran görüntüsünde gösterildiği gibi çalışma dizinini ve hizmetin günlük klasörünü bulabilirsiniz:
Sonraki adımlar
Bu makalede, konuk yürütülebilir dosyasını paketlemeyi ve Service Fabric'e dağıtmayı öğrendiniz. İlgili bilgiler ve görevler için aşağıdaki makalelere bakın.
- Paketleme aracının yayın öncesi bağlantısını içeren konuk yürütülebilir dosyasını paketleme ve dağıtma örneği
- REST kullanarak Adlandırma hizmeti aracılığıyla iletişim kurarak iki konuk yürütülebilir dosyası (C# ve nodejs) örneği
- Visual Studio kullanarak ilk Service Fabric uygulamanızı oluşturma