Mengemas aplikasi
Artikel ini menjelaskan cara mengemas aplikasi Service Fabric dan menyiapkannya untuk penyebaran.
Tata letak paket
Manifes aplikasi, satu atau beberapa manifes layanan, dan file paket lain yang diperlukan harus diatur dalam tata letak tertentu untuk penyebaran ke dalam kluster Service Fabric. Contoh manifes dalam artikel ini perlu diatur dalam struktur direktori berikut:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Folder dinamai sesuai dengan atribut Name dari setiap elemen yang sesuai. Misalnya, jika manifes layanan berisi dua paket kode dengan nama MyCodeA dan MyCodeB, dua folder dengan nama yang sama akan berisi biner yang diperlukan untuk setiap paket kode.
Menggunakan SetupEntryPoint
Skenario umum untuk menggunakan SetupEntryPoint adalah ketika Anda perlu menjalankan executable sebelum layanan dimulai atau melakukan operasi dengan hak istimewa yang ditingkatkan. Contohnya:
- Menyiapkan dan menginisialisasi variabel lingkungan yang dibutuhkan executable layanan. Ini tidak hanya terbatas pada executable yang ditulis melalui model pemrograman Service Fabric. Misalnya, npm.exe memerlukan beberapa variabel lingkungan yang dikonfigurasi untuk menyebarkan aplikasi Node.js.
- Menyetel kontrol akses dengan memasang sertifikat keamanan.
Untuk informasi selengkapnya tentang cara mengonfigurasi SetupEntryPoint, lihat Mengonfigurasi kebijakan untuk titik entri penyiapan layanan
Konfigurasikan
Membuat paket menggunakan Visual Studio
Jika menggunakan Visual Studio untuk membuat aplikasi, Anda dapat menggunakan perintah Package membuat paket yang cocok dengan tata letak yang dijelaskan di atas secara otomatis.
Untuk membuat paket, klik kanan proyek aplikasi di Penjelajah Solusi dan pilih perintah Paket:
Ketika pengemasan selesai, Anda dapat menemukan lokasi paket di jendela Output. Langkah pengemasan terjadi secara otomatis saat Anda menyebarkan atau men-debug aplikasi Anda di Visual Studio.
Membuat paket menurut baris perintah
Anda dapat mengemas aplikasi menggunakan msbuild.exe
secara terprogram. Di hood, Visual Studio menjalankannya sehingga outputnya sama.
D:\Temp> msbuild HelloWorld.sfproj /t:Package
Menguji paket
Anda dapat memverifikasi struktur paket secara lokal melalui PowerShell menggunakan perintah Test-ServiceFabricApplicationPackage. Perintah ini memeriksa masalah penguraian manifes dan memverifikasi semua referensi. Perintah ini hanya memverifikasi kebenaran struktur direktori dan file dalam paket. Ini tidak memverifikasi kode atau konten paket data selain memeriksa bahwa semua file yang diperlukan ada.
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
Kesalahan ini menunjukkan bahwa file MySetup.bat yang direferensikan dalam manifes layanan SetupEntryPoint hilang dari paket kode. Setelah file yang hilang ditambahkan, verifikasi aplikasi melewati:
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
Jika aplikasi memiliki parameter aplikasi yang ditentukan, Anda dapat meneruskannya di Test-ServiceFabricApplicationPackage untuk validasi yang tepat.
Jika Anda mengetahui kluster tempat aplikasi akan digunakan, Anda sebaiknya meneruskan dalam parameter ImageStoreConnectionString
. Dalam hal ini, paket juga divalidasi terhadap versi aplikasi sebelumnya yang sudah berjalan di kluster. Misalnya, validasi dapat mendeteksi apakah paket dengan versi yang sama tetapi konten yang berbeda sudah digunakan.
Setelah aplikasi dikemas dengan benar dan melewati validasi, pertimbangkan untuk mengompresi paket untuk operasi penyebaran yang lebih cepat.
Mengompresi paket
Ketika paket besar atau memiliki banyak file, Anda dapat mengompresinya untuk penyebaran yang lebih cepat. Kompresi mengurangi jumlah file dan ukuran paket. Untuk paket aplikasi terkompresi, mengunggah paket aplikasi mungkin membutuhkan waktu lebih lama dibandingkan dengan mengunggah paket yang tidak dikompresi, terutama jika kompresi dilakukan sebagai bagian dari salinan. Dengan kompresi, mendaftarkan dan membatalkan pendaftaran jenis aplikasi lebih cepat.
Mekanisme penyebaran sama untuk paket terkompresi dan tidak terkompresi. Jika dikompresi, paket disimpan sedemikian rupa di penyimpanan citra kluster dan dibuka kompresinya pada node sebelum aplikasi dijalankan. Kompresi menggantikan paket Service Fabric yang valid dengan versi terkompresi. Map ini harus memperbolehkan izin menulis. Menjalankan kompresi pada paket yang sudah dikompresi tidak menghasilkan perubahan.
Anda dapat mengompresi paket dengan menjalankan perintah Powershell Copy-ServiceFabricApplicationPackage dengan tombol CompressPackage
. Anda dapat membuka kompresi paket dengan perintah yang sama, menggunakan tombol UncompressPackage
.
Perintah berikut mengompresi paket tanpa menyalinnya ke penyimpanan citra. Anda dapat menyalin paket terkompresi ke satu atau beberapa kluster Service Fabric, sesuai kebutuhan, menggunakan Copy-ServiceFabricApplicationPackage tanpa flag SkipCopy
.
Paket sekarang memuat file zip untuk paket code
, config
, dan data
. Manifes aplikasi dan manifes layanan tidak di-zip karena dibutuhkan untuk banyak operasi internal. Misalnya, berbagi paket, nama jenis aplikasi, dan ekstraksi versi untuk validasi tertentu, semua perlu mengakses manifes. Melakukan zip manifes akan membuat operasi ini tidak efisien.
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
Atau, Anda dapat mengompresi dan menyalin paket dengan Copy-ServiceFabricApplicationPackage dalam satu langkah. Jika paket besar, berikan batas waktu yang cukup tinggi guna memungkinkan waktu untuk mengompresi paket dan mengunggah ke kluster.
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400
Secara internal, Service Fabric menghitung checksum untuk paket aplikasi untuk validasi. Saat menggunakan kompresi, checksum dihitung pada versi zip dari setiap paket. Menghasilkan zip baru dari paket aplikasi yang sama menghasilkan checksum yang berbeda. Untuk mencegah kesalahan validasi, gunakan penyediaan diff. Dengan opsi ini, jangan sertakan paket yang tidak berubah dalam versi baru. Sebaliknya, referensikan langsung dari manifes layanan baru.
Jika penyediaan diff bukan pilihan dan Anda harus menyertakan paket, hasilkan versi baru untuk paket code
, config
, dan data
untuk menghindari ketidakcocokan checksum. Menghasilkan versi baru untuk paket yang tidak berubah diperlukan ketika paket terkompresi digunakan, terlepas dari apakah versi sebelumnya menggunakan kompresi atau tidak.
Paket sekarang dikemas dengan benar, divalidasi, dan dikompresi (jika diperlukan), sehingga siap untuk disebarkan ke satu atau beberapa kluster Service Fabric.
Mengompresi paket saat menyebarkan menggunakan Visual Studio
Anda dapat menginstruksikan Visual Studio untuk mengompresi paket saat penyebaran, dengan menambahkan elemen CopyPackageParameters
ke profil publikasi Anda, dan mengatur atribut CompressPackage
ke 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>
Membuat sfpkg
Dimulai dengan versi 6.1, Service Fabric memungkinkan penyediaan dari penyimpanan eksternal.
Dengan opsi ini, paket aplikasi tidak harus disalin ke penyimpanan citra. Sebagai gantinya, Anda dapat membuat file sfpkg
dan mengunggahnya ke penyimpanan eksternal, lalu memberikan URI pengunduhan ke Service Fabric saat penyediaan. Paket yang sama dapat disediakan ke beberapa kluster. Penyediaan dari penyimpanan eksternal menghemat waktu yang diperlukan untuk menyalin paket ke setiap kluster.
File sfpkg
adalah file berformat zip yang berisi paket aplikasi awal dan memiliki ekstensi .sfpkg
. Di dalam zip, paket aplikasi dapat dikompresi atau tidak dikompresi. Kompresi paket aplikasi di dalam zip dilakukan pada tingkat kode, konfigurasi, dan paket data, seperti yang disebutkan sebelumnya.
Untuk membuat file sfpkg
, mulailah dengan folder yang berisi paket aplikasi asli, baik dikompresi maupun tidak. Kemudian, gunakan utilitas apa pun untuk meng-zip folder dengan ekstensi ".sfpkg". Misalnya, gunakan ZipFile.CreateFromDirectory.
ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);
sfpkg
harus diunggah ke penyimpanan eksternal di luar band, di luar Service Fabric. Penyimpanan eksternal dapat menjadi penyimpanan apa pun yang mengekspos titik akhir REST http atau https. Selama penyediaan, Service Fabric menjalankan operasi GET untuk mengunduh paket aplikasi sfpkg
sehingga penyimpanan harus mengizinkan akses BACA untuk paket.
Untuk menyediakan paket, gunakan penyediaan eksternal yang memerlukan URI pengunduhan dan informasi jenis aplikasi.
Catatan
Penyediaan berdasarkan jalur relatif penyimpanan citra saat ini tidak mendukung file sfpkg
. Oleh karena itu, sfpkg
seharusnya tidak disalin ke penyimpanan citra.
Langkah berikutnya
Menyebarkan dan menghapus aplikasi menjelaskan cara menggunakan PowerShell untuk mengelola instans aplikasi
Mengelola parameter aplikasi untuk beberapa lingkungan menjelaskan cara mengonfigurasi parameter dan variabel lingkungan untuk instans aplikasi yang berbeda.
Mengonfigurasi kebijakan keamanan untuk aplikasi Anda menjelaskan cara menjalankan layanan berdasarkan kebijakan keamanan untuk membatasi akses.