Bulut Hizmeti (klasik) modeli nedir ve nasıl paketebilirim?

Önemli

Cloud Services (klasik) artık yeni müşteriler için kullanımdan kaldırılmıştır ve tüm müşteriler için 31 Ağustos 2024'te kullanımdan kaldırılacaktır. Yeni dağıtımlarda yeni Azure Resource Manager tabanlı dağıtım modeli Azure Cloud Services (genişletilmiş destek) kullanılmalıdır.

Üç bileşenden bir bulut hizmeti oluşturulur: hizmet tanımı (.csdef),hizmet yapılandırması (.cscfg)ve bir hizmet paketi (.cspkg). Hem ServiceDefinition.csdef hem de ServiceConfig.cscfg dosyaları XML tabanlıdır ve bulut hizmetinin yapısını ve nasıl yapılandırıldığı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 istiyorsunuz?

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:

Siteler
IIS7'de barındırılan web sitelerinin 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ğı, bir rolün ö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.

Başlangıç
Rol başlatıldığı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 paketlenmez, ancak ayrı bir dosya olarak Azure'a 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 aşağıda öğelerin hızlı bir açıklaması 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 önerilir. 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ı garantisi veren Azure İşlem Hizmeti Düzeyi Sözleşmesi'ndeki (SLA) yönergelere uyarsınız.

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. Alternatif olarak, 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. ana bilgisayar üst bilgisini isteği doğru konuma yönlendirecek şekilde 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 örnekte, web sitesi ve web uygulaması olan bir web rolünün yapılandırması gösterilmektedir. Web sitesi, bağlantı noktası 80'de varsayılan giriş konumu olarak yapılandırılır ve web uygulamaları "mail.mysite.cloudapp.net" olarak adlandırılan alternatif bir ana bilgisayar üst bilgisinden istekleri 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 bulut hizmetinizin yapılandırmasını hizmeti çevrimdışına almadan 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 değişikliği örnek çevrimiçiyken uygulamayı veya örneği düzgün bir şekilde geri dönüştürüp değişikliği çevrimdışıyken 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ülmesi gerekmez; 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 bir 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 ve değişiklik tamamlandıktan sonra yeniden çevrimiçi yapmak için örneği düzgün bir şekilde çevrimdışına alır.

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 örneklerinin indirilmesi için size bir ş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 rolün örneklerini çevrimdışına aldıkları için RoleEnvironment.Changing veya RoleEnvironment.Changed olaylarını tetikler.

ServicePackage.cspkg

Not

Dağıtılabilir en büyük paket boyutu 600 MB'tır

Bir uygulamayı Azure'da bulut hizmeti olarak dağıtmak için önce uygulamayı uygun biçimde paketlemeniz gerekir. Visual Studio'ya alternatif olarak paket dosyasını 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 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ısayolunu çalıştırarak 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 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...