Bulut Hizmeti (klasik) modeli nedir ve nasıl paket yapabilirim?
Önemli
Cloud Services (klasik), 1 Eylül 2024 itibarıyla tüm müşteriler için kullanım dışı bırakılmıştır. Mevcut tüm çalışan dağıtımlar Microsoft tarafından durdurulacak ve kapatılacak ve Veriler Ekim 2024'den itibaren kalıcı olarak kaybolacaktır. Yeni dağıtımlarda yeni Azure Resource Manager tabanlı dağıtım modeli Azure Cloud Services (genişletilmiş destek) kullanılmalıdır.
Bulut hizmeti, hizmet tanımı (.csdef), hizmet yapılandırması (.cscfg) ve bir hizmet paketi (.cspkg) olmak üzere üç bileşenden oluşturulur. ServiceDefinition.csdef ve ServiceConfig.cscfg dosyalarının her ikisi de XML tabanlıdır ve bulut hizmetinin yapısını ve yapılandırmasını açıklar; topluca model olarak adlandırılır. ServicePackage.cspkg, ServiceDefinition.csdef dosyasından oluşturulan ve diğer şeylerin yanında gerekli tüm ikili tabanlı bağımlılıkları içeren bir zip dosyasıdır. Azure hem ServicePackage.cspkg hem de ServiceConfig.cscfg'den bir bulut hizmeti oluşturur.
Bulut hizmeti Azure'da çalıştırıldıktan sonra ServiceConfig.cscfg dosyası aracılığıyla yeniden yapılandırabilirsiniz, ancak tanımı değiştiremezsiniz.
Ne hakkında daha fazla bilgi edinmek istersiniz?
- ServiceDefinition.csdef ve ServiceConfig.cscfg dosyaları hakkında daha fazla bilgi edinmek istiyorum.
- Bunu zaten biliyorum, neleri yapılandırabildiğim hakkında bazı örnekler verin.
- ServicePackage.cspkg dosyasını oluşturmak istiyorum.
- Visual Studio kullanıyorum ve...
ServiceDefinition.csdef
ServiceDefinition.csdef dosyası, Azure tarafından bir bulut hizmetini yapılandırmak için kullanılan ayarları belirtir. Azure Hizmet Tanımı Şeması (.csdef Dosyası), bir hizmet tanımı dosyası için izin verilebilen biçimi sağlar. Aşağıdaki örnekte, Web ve Çalışan rolleri için tanımlanabilir ayarlar gösterilmektedir:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1" vmsize="Medium">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="HttpIn" endpointName="HttpIn" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="HttpIn" protocol="http" port="80" />
<InternalEndpoint name="InternalHttpIn" protocol="http" />
</Endpoints>
<Certificates>
<Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" />
</Certificates>
<Imports>
<Import moduleName="Connect" />
<Import moduleName="Diagnostics" />
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<LocalResources>
<LocalStorage name="localStoreOne" sizeInMB="10" />
<LocalStorage name="localStoreTwo" sizeInMB="10" cleanOnRoleRecycle="false" />
</LocalResources>
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" />
</Startup>
</WebRole>
<WorkerRole name="WorkerRole1">
<ConfigurationSettings>
<Setting name="DiagnosticsConnectionString" />
</ConfigurationSettings>
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="tcp" port="10000" />
<InternalEndpoint name="Endpoint2" protocol="tcp" />
</Endpoints>
</WorkerRole>
</ServiceDefinition>
Burada kullanılan XML şemasını daha iyi anlamak için Hizmet Tanımı Şeması'na başvurabilirsiniz, ancak bazı öğelerin hızlı bir açıklaması aşağıda verilmiştir:
Site
IIS7'de barındırılan web siteleri veya web uygulamalarının tanımlarını içerir.
InputEndpoints
Bulut hizmetine başvurmak için kullanılan uç noktaların tanımlarını içerir.
InternalEndpoints
Rol örnekleri tarafından birbirleriyle iletişim kurmak için kullanılan uç noktaların tanımlarını içerir.
ConfigurationSettings
Belirli bir rolün özellikleri için ayar tanımlarını içerir.
Sertifikalar
Bir rol için gereken sertifikaların tanımlarını içerir. Önceki kod örneğinde Azure Connect yapılandırması için kullanılan bir sertifika gösterilmektedir.
LocalResources
Yerel depolama kaynaklarının tanımlarını içerir. Yerel depolama kaynağı, rol örneğinin çalıştığı sanal makinenin dosya sistemindeki ayrılmış bir dizindir.
Ithalat
İçeri aktarılan modüllerin tanımlarını içerir. Önceki kod örneğinde Uzak Masaüstü Bağlantısı ve Azure Connect modülleri gösterilmektedir.
Startup
Rol başladığında çalıştırılacak görevleri içerir. Görevler bir .cmd veya yürütülebilir dosyada tanımlanır.
ServiceConfiguration.cscfg
Bulut hizmetinizin ayarlarının yapılandırması ServiceConfiguration.cscfg dosyasındaki değerlere göre belirlenir. Bu dosyadaki her rol için dağıtmak istediğiniz örnek sayısını belirtirsiniz. Hizmet tanımı dosyasında tanımladığınız yapılandırma ayarlarının değerleri hizmet yapılandırma dosyasına eklenir. Bulut hizmetiyle ilişkili tüm yönetim sertifikalarının parmak izleri de dosyaya eklenir. Azure Hizmet Yapılandırma Şeması (.cscfg Dosyası), bir hizmet yapılandırma dosyası için izin verilebilen biçimi sağlar.
Hizmet yapılandırma dosyası uygulamayla birlikte paketlenmemiş. Yapılandırma, Azure'a ayrı bir dosya olarak yüklenir ve bulut hizmetini yapılandırmak için kullanılır. Bulut hizmetinizi yeniden dağıtmadan yeni bir hizmet yapılandırma dosyası yükleyebilirsiniz. Bulut hizmeti çalışırken bulut hizmetinin yapılandırma değerleri değiştirilebilir. Aşağıdaki örnekte, Web ve Çalışan rolleri için tanımlanabilen yapılandırma ayarları gösterilmektedir:
<?xml version="1.0"?>
<ServiceConfiguration serviceName="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="WebRole1">
<Instances count="2" />
<ConfigurationSettings>
<Setting name="SettingName" value="SettingValue" />
</ConfigurationSettings>
<Certificates>
<Certificate name="CertificateName" thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption"
thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
Burada kullanılan XML şemasını daha iyi anlamak için Hizmet Yapılandırma Şeması'na başvurabilirsiniz, ancak öğelerin hızlı bir açıklaması aşağıda verilmiştir:
Örnekler
Rol için çalışan örneklerin sayısını yapılandırılır. Yükseltmeler sırasında bulut hizmetinizin kullanılamaz duruma gelmesini önlemek için web'e yönelik rollerinizin birden fazla örneğini dağıtmanızı öneririz. Birden fazla örnek dağıtarak, bir hizmet için iki veya daha fazla rol örneği dağıtıldığında İnternet'e yönelik roller için %99,95 dış bağlantı sağlayan Azure İşlem Hizmet Düzeyi Sözleşmesi'ndeki (SLA) yönergelere bağlı kalabilirsiniz.
ConfigurationSettings
Bir rol için çalışan örneklerin ayarlarını yapılandırılır. Öğelerin adı <Setting>
, hizmet tanımı dosyasındaki ayar tanımlarıyla eşleşmelidir.
Sertifikalar
Hizmet tarafından kullanılan sertifikaları yapılandırılır. Önceki kod örneğinde RemoteAccess modülü için sertifikanın nasıl tanımlanacağı gösterilmektedir. Parmak izi özniteliğinin değeri, kullanılacak sertifikanın parmak izine ayarlanmalıdır.
Not
Sertifikanın parmak izi, bir metin düzenleyicisi kullanılarak yapılandırma dosyasına eklenebilir. Veya değer, Visual Studio'daki rolün Özellikler sayfasının Sertifikalar sekmesine eklenebilir.
Rol örnekleri için bağlantı noktalarını tanımlama
Azure, bir web rolüne yalnızca bir giriş noktasına izin verir. Tüm trafiğin tek bir IP adresi üzerinden gerçekleştiği anlamına gelir. İsteği doğru konuma yönlendirmek için ana bilgisayar üst bilgisini yapılandırarak web sitelerinizi bir bağlantı noktasını paylaşacak şekilde yapılandırabilirsiniz. Ayrıca, uygulamalarınızı IP adresinde iyi bilinen bağlantı noktalarını dinleyecek şekilde yapılandırabilirsiniz.
Aşağıdaki örnek, web sitesi ve web uygulaması ile web rolünün yapılandırmasını gösterir. Web sitesi, 80 numaralı bağlantı noktasında varsayılan giriş konumu olarak yapılandırılır. Web uygulamaları, "mail.mysite.cloudapp.net" olarak adlandırılan alternatif bir ana bilgisayar üst bilgisinden istek alacak şekilde yapılandırılır.
<WebRole>
<ConfigurationSettings>
<Setting name="DiagnosticsConnectionString" />
</ConfigurationSettings>
<Endpoints>
<InputEndpoint name="HttpIn" protocol="http" port="80" />
<InputEndpoint name="Https" protocol="https" port="443" certificate="SSL"/>
<InputEndpoint name="NetTcp" protocol="tcp" port="808" certificate="SSL"/>
</Endpoints>
<LocalResources>
<LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="100" />
</LocalResources>
<Site name="Mysite" packageDir="Sites\Mysite">
<Bindings>
<Binding name="http" endpointName="HttpIn" />
<Binding name="https" endpointName="Https" />
<Binding name="tcp" endpointName="NetTcp" />
</Bindings>
</Site>
<Site name="MailSite" packageDir="MailSite">
<Bindings>
<Binding name="mail" endpointName="HttpIn" hostHeader="mail.mysite.cloudapp.net" />
</Bindings>
<VirtualDirectory name="artifacts" />
<VirtualApplication name="storageproxy">
<VirtualDirectory name="packages" packageDir="Sites\storageProxy\packages"/>
</VirtualApplication>
</Site>
</WebRole>
Rolün yapılandırmasını değiştirme
Azure'da çalışırken hizmeti çevrimdışına almadan bulut hizmetinizin yapılandırmasını güncelleştirebilirsiniz. Yapılandırma bilgilerini değiştirmek için yeni bir yapılandırma dosyası yükleyebilir veya yapılandırma dosyasını yerinde düzenleyip çalışan hizmetinize uygulayabilirsiniz. Bir hizmetin yapılandırmasında aşağıdaki değişiklikler yapılabilir:
- Yapılandırma ayarlarının değerlerini değiştirme
Bir yapılandırma ayarı değiştiğinde rol örneği, örnek çevrimiçiyken değişikliği uygulamayı veya örneği düzgün bir şekilde geri dönüştürmeyi ve örneği çevrimdışıyken değişikliği uygulamayı seçebilir. - Rol örneklerinin hizmet topolojisini değiştirme
Topoloji değişiklikleri, bir örneğin kaldırıldığı durumlar dışında çalışan örnekleri etkilemez. Kalan tüm örneklerin genellikle geri dönüştürülmeye gerek yoktur; ancak, bir topoloji değişikliğine yanıt olarak rol örneklerini geri dönüştürmeyi seçebilirsiniz. - Sertifika parmak izini değiştirme
Sertifikayı yalnızca rol örneği çevrimdışı olduğunda güncelleştirebilirsiniz. Rol örneği çevrimiçiyken bir sertifika eklenir, silinir veya değiştirilirse Azure, sertifikayı güncelleştirmek için örneği düzgün bir şekilde çevrimdışına alır. Azure, değişiklik tamamlandıktan sonra yeniden çevrimiçi olur.
Service Runtime Olayları ile yapılandırma değişikliklerini işleme
Azure Çalışma Zamanı Kitaplığı, bir rolden Azure ortamıyla etkileşime yönelik sınıflar sağlayan Microsoft.WindowsAzure.ServiceRuntime ad alanını içerir. RoleEnvironment sınıfı, yapılandırma değişikliğinden önce ve sonra tetiklenen aşağıdaki olayları tanımlar:
- Olayı değiştirme
Bu, yapılandırma değişikliği bir rolün belirtilen örneğine uygulanmadan önce gerçekleşir ve gerekirse rol örneklerini devre dışı bırakma şansı verir. - Olay değiştirildi
Yapılandırma değişikliği bir rolün belirtilen örneğine uygulandıktan sonra gerçekleşir.
Not
Sertifika değişiklikleri her zaman bir rolün örneklerini çevrimdışına aldıklarından, RoleEnvironment.Changing veya RoleEnvironment.Changed olaylarını tetiklemiyor.
ServicePackage.cspkg
Not
Dağıtılabilir en büyük paket boyutu 600 MB'tır
Azure'da bir uygulamayı bulut hizmeti olarak dağıtmak için önce uygulamayı uygun biçimde paketlemeniz gerekir. Paket dosyasını Visual Studio'ya alternatif olarak oluşturmak için CSPack komut satırı aracını (Azure SDK ile birlikte yüklenir) kullanabilirsiniz.
CSPack , paketin içeriğini tanımlamak için hizmet tanımı dosyasının ve hizmet yapılandırma dosyasının içeriğini kullanır. CSPack, Azure portalını kullanarak Azure'a yükleyebileceğiniz bir uygulama paketi dosyası (.cspkg) oluşturur. Varsayılan olarak, paket olarak adlandırılır[ServiceDefinitionFileName].cspkg
, ancak CSPack seçeneğini kullanarak /out
farklı bir ad belirtebilirsiniz.
CSPack şu konumda bulunur:
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\
Not
CSPack.exe (windows üzerinde), SDK ile birlikte yüklenen Microsoft Azure Komut İstemi kısayolu çalıştırılarak kullanılabilir.
Tüm olası anahtarlar ve komutlar hakkındaki belgeleri görmek için CSPack.exe programını tek başına çalıştırın.
İpucu
Bulut hizmetinizi Microsoft Azure İşlem Öykünücüsü'nde yerel olarak çalıştırın, /copyonly seçeneğini kullanın. Bu seçenek, uygulamanın ikili dosyalarını işlem öykünücüsunda çalıştırılabilecekleri bir dizin düzenine kopyalar.
Bulut hizmetini paketlemek için örnek komut
Aşağıdaki örnek, bir web rolüne ilişkin bilgileri içeren bir uygulama paketi oluşturur. komutu kullanılacak hizmet tanımı dosyasını, ikili dosyaların bulunabileceği dizini ve paket dosyasının adını belirtir.
cspack [DirectoryName]\[ServiceDefinition]
/role:[RoleName];[RoleBinariesDirectory]
/sites:[RoleName];[VirtualPath];[PhysicalPath]
/out:[OutputFileName]
Uygulama hem web rolü hem de çalışan rolü içeriyorsa aşağıdaki komut kullanılır:
cspack [DirectoryName]\[ServiceDefinition]
/out:[OutputFileName]
/role:[RoleName];[RoleBinariesDirectory]
/sites:[RoleName];[VirtualPath];[PhysicalPath]
/role:[RoleName];[RoleBinariesDirectory];[RoleAssemblyName]
Değişkenlerin tanımlandığı yer:
Değişken | Değer |
---|---|
[DirectoryName] | Azure projesinin .csdef dosyasını içeren kök proje dizininin altındaki alt dizin. |
[ServiceDefinition] | Hizmet tanımı dosyasının adı. Varsayılan olarak, bu dosya ServiceDefinition.csdef olarak adlandırılır. |
[OutputFileName] | Oluşturulan paket dosyasının adı. Bu değişken genellikle uygulamanın adına ayarlanır. Hiçbir dosya adı belirtilmezse, uygulama paketi [ApplicationName].cspkg olarak oluşturulur. |
[RoleName] | Hizmet tanımı dosyasında tanımlanan rolün adı. |
[RoleBinariesDirectory] | Rolün ikili dosyalarının konumu. |
[VirtualPath] | Hizmet tanımının Siteler bölümünde tanımlanan her sanal yol için fiziksel dizinler. |
[PhysicalPath] | Hizmet tanımının site düğümünde tanımlanan her sanal yol için içeriğin fiziksel dizinleri. |
[RoleAssemblyName] | Rolün ikili dosyasının adı. |
Sonraki adımlar
Bir bulut hizmeti paketi oluşturuyorum ve...
Visual Studio kullanıyorum ve...