Co je model cloudové služby Azure a jak ho zabalit?

Cloudová služba se vytvoří ze tří komponent, definice služby (.csdef), konfigurace služby (.cscfg) a balíček služby (.cspkg). Soubory ServiceDefinition.csdef i ServiceConfig.cscfg jsou založené na jazyce XML a popisují strukturu cloudové služby a její konfiguraci, souhrnně označovanou jako model. ServicePackage.cspkg je soubor ZIP, který je generován z ServiceDefinition.csdef a mimo jiné obsahuje všechny požadované binární závislosti. Azure vytvoří cloudovou službu z ServicePackage.cspkg i ServiceConfig.cscfg.

Jakmile cloudová služba běží v Azure, můžete ji překonfigurovat prostřednictvím souboru ServiceConfig.cscfg , ale definici nemůžete změnit.

O čem byste se chtěli dozvědět víc?

ServiceDefinition.csdef

Soubor ServiceDefinition.csdef určuje nastavení, která Azure používá ke konfiguraci cloudové služby. Schéma definice služby Azure (soubor .csdef) poskytuje povolený formát pro definiční soubor služby. Následující příklad ukazuje nastavení, která lze definovat pro webové role a role pracovního procesu:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole1" vmsize="Standard_D1_v2">
    <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>

Pokud chcete lépe porozumět schématu XML použitému tady, můžete se podívat na schéma definice služby. Tady je ale rychlé vysvětlení některých prvků:

Stránky
Obsahuje definice pro weby nebo webové aplikace hostované ve službě IIS7.

Vstupní body
Obsahuje definice koncových bodů, které slouží ke kontaktování cloudové služby.

InternalEndpoints
Obsahuje definice koncových bodů, které instance rolí používají ke vzájemné komunikaci.

Konfigurace Nastavení
Obsahuje definice nastavení pro funkce konkrétní role.

Certifikáty
Obsahuje definice pro certifikáty, které jsou potřeba pro roli. Předchozí příklad kódu ukazuje certifikát, který se používá pro konfiguraci azure Připojení.

LocalResources
Obsahuje definice pro prostředky místního úložiště. Místní prostředek úložiště je vyhrazený adresář v systému souborů virtuálního počítače, ve kterém je spuštěna instance role.

Dovoz
Obsahuje definice pro importované moduly. Předchozí příklad kódu ukazuje moduly pro Připojení Vzdálené plochy a Azure Připojení.

Startup
Obsahuje úlohy, které se spustí při spuštění role. Úlohy jsou definovány v souboru .cmd nebo spustitelném souboru.

ServiceConfiguration.cscfg

Konfigurace nastavení cloudové služby je určena hodnotami v souboru ServiceConfiguration.cscfg . Zadáte počet instancí, které chcete nasadit pro každou roli v tomto souboru. Hodnoty nastavení konfigurace, které jste definovali v definičním souboru služby, se přidají do konfiguračního souboru služby. Kryptografické otisky pro všechny certifikáty pro správu, které jsou přidružené ke cloudové službě, se také přidají do souboru. Schéma konfigurace služby Azure (soubor .cscfg) poskytuje povolený formát konfiguračního souboru služby.

Konfigurační soubor služby není zabalený s aplikací, ale je nahraný do Azure jako samostatný soubor a slouží ke konfiguraci cloudové služby. Můžete nahrát nový konfigurační soubor služby bez opětovného nasazení cloudové služby. Hodnoty konfigurace cloudové služby je možné změnit, když je cloudová služba spuštěná. Následující příklad ukazuje nastavení konfigurace, které lze definovat pro role web a pracovní proces:

<?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>

Můžete se podívat na schéma konfigurace služby, abyste lépe porozuměli schématu XML použitému tady, ale tady je rychlé vysvětlení prvků:

Instance
Nakonfiguruje počet spuštěných instancí pro roli. Pokud chcete zabránit tomu, aby se vaše cloudová služba během upgradů stala nedostupnou, doporučujeme nasadit více než jednu instanci vašich webových rolí. Nasazením více než jedné instance dodržujete pokyny ve smlouvě SLA (Azure Compute Service Level Agreement), která zaručuje 99,95% externí připojení pro internetové role při nasazení dvou nebo více instancí rolí pro službu.

Konfigurace Nastavení
Nakonfiguruje nastavení pro spuštěné instance pro roli. Název <Setting> prvků se musí shodovat s definicemi nastavení v souboru definice služby.

Certifikáty
Nakonfiguruje certifikáty, které služba používá. Předchozí příklad kódu ukazuje, jak definovat certifikát pro modul RemoteAccess. Hodnota atributu kryptografického otisku musí být nastavena na kryptografický otisk certifikátu, který se má použít.

Poznámka:

Kryptografický otisk certifikátu lze přidat do konfiguračního souboru pomocí textového editoru. Nebo můžete tuto hodnotu přidat na kartě Certifikáty na stránce Vlastnosti role v sadě Visual Studio.

Definování portů pro instance rolí

Azure umožňuje pouze jeden vstupní bod webové role. To znamená, že veškerý provoz probíhá prostřednictvím jedné IP adresy. Weby můžete nakonfigurovat tak, aby sdílely port tak, že nakonfigurujete hlavičku hostitele tak, aby požadavek směrovali na správné umístění. Aplikace můžete také nakonfigurovat tak, aby naslouchaly dobře známým portům na IP adrese.

Následující ukázka ukazuje konfiguraci webové role s webem a webovou aplikací. Web je nakonfigurovaný jako výchozí umístění položky na portu 80 a webové aplikace jsou nakonfigurované tak, aby přijímaly požadavky z alternativní hlavičky hostitele, která se nazývá "mail.mysite.cloudapp.net".

<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>

Změna konfigurace role

Konfiguraci cloudové služby můžete aktualizovat, když je spuštěná v Azure, aniž byste službu přechádli do offline režimu. Pokud chcete změnit informace o konfiguraci, můžete buď nahrát nový konfigurační soubor, nebo upravit konfigurační soubor a použít ho pro spuštěnou službu. V konfiguraci služby je možné provést následující změny:

  • Změna hodnot nastavení konfigurace
    Když se změní nastavení konfigurace, instance role se může rozhodnout, že změnu použije, když je instance online, nebo ji řádně recykluje a použije změnu, když je instance offline.
  • Změna topologie služby instancí rolí
    Změny topologie nemají vliv na spuštěné instance, s výjimkou případů, kdy je instance odebrána. Všechny zbývající instance obecně nemusí být recyklovány; V reakci na změnu topologie však můžete instance rolí recyklovat.
  • Změna kryptografického otisku certifikátu
    Certifikát můžete aktualizovat pouze v případě, že je instance role offline. Pokud je certifikát přidaný, odstraněný nebo změněný, když je instance role online, Azure řádně přenese instanci do režimu offline, aby aktualizovala certifikát a po dokončení změny se vrátila do režimu online.

Zpracování změn konfigurace pomocí událostí modulu runtime služby

Knihovna Modulu runtime Azure zahrnuje obor názvů Microsoft.WindowsAzure.ServiceRuntime, který poskytuje třídy pro interakci s prostředím Azure z role. Třída RoleEnvironment definuje následující události, které jsou vyvolány před a po změně konfigurace:

  • Změna události
    K tomu dochází před změnou konfigurace na zadanou instanci role, která vám v případě potřeby umožní snížit instance rolí.
  • Změněná událost
    Nastane po použití změny konfigurace na zadanou instanci role.

Poznámka:

Vzhledem k tomu, že změny certifikátu vždy přebírají instance role offline, nevyvolají události RoleEnvironment.Changing nebo RoleEnvironment.Changed.

ServicePackage.cspkg

Poznámka:

Maximální velikost balíčku, kterou je možné nasadit, je 600 MB.

Pokud chcete nasadit aplikaci jako cloudovou službu v Azure, musíte aplikaci nejprve zabalit ve vhodném formátu. K vytvoření souboru balíčku jako alternativu k sadě Visual Studio můžete použít nástroj příkazového řádku CSPack (nainstalovaný se sadou Azure SDK).

CsPack používá obsah definičního souboru služby a konfiguračního souboru služby k definování obsahu balíčku. CSPack vygeneruje soubor balíčku aplikace (.cspkg), který můžete nahrát do Azure pomocí webu Azure Portal. Ve výchozím nastavení má balíček název [ServiceDefinitionFileName].cspkg, ale můžete zadat jiný název pomocí /out možnosti CSPack.

CSPack se nachází na adrese
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

Poznámka:

CSPack.exe (ve Windows) je k dispozici spuštěním zástupce příkazového řádku Microsoft Azure, který je nainstalován se sadou SDK.

Spusťte program CSPack.exe samostatně, abyste viděli dokumentaci o všech možných přepínačích a příkazech.

Tip

Spusťte cloudovou službu místně v emulátoru služby Microsoft Azure Compute, použijte možnost /copyonly. Tato možnost zkopíruje binární soubory aplikace do rozložení adresáře, ze kterého je možné spustit v emulátoru výpočetních prostředků.

Příklad příkazu pro zabalení cloudové služby

Následující příklad vytvoří balíček aplikace, který obsahuje informace pro webovou roli. Příkaz určuje definiční soubor služby, který se má použít, adresář, kde lze najít binární soubory, a název souboru balíčku.

cspack [DirectoryName]\[ServiceDefinition]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /out:[OutputFileName]

Pokud aplikace obsahuje webovou roli i roli pracovního procesu, použije se následující příkaz:

cspack [DirectoryName]\[ServiceDefinition]
       /out:[OutputFileName]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /role:[RoleName];[RoleBinariesDirectory];[RoleAssemblyName]

Kde jsou proměnné definovány takto:

Proměnná Hodnota
[DirectoryName] Podadresář v kořenovém adresáři projektu, který obsahuje soubor .csdef projektu Azure.
[ServiceDefinition] Název definičního souboru služby. Ve výchozím nastavení má tento soubor název ServiceDefinition.csdef.
[OutputFileName] Název vygenerovaného souboru balíčku. Obvykle se nastaví na název aplikace. Pokud není zadán žádný název souboru, balíček aplikace se vytvoří jako [ApplicationName].cspkg.
[RoleName] Název role definované v definičním souboru služby.
[RoleBinariesDirectory] Umístění binárních souborů pro roli.
[VirtualPath] Fyzické adresáře pro každou virtuální cestu definovanou v části Weby definice služby.
[PhysicalPath] Fyzické adresáře obsahu pro každou virtuální cestu definovanou v uzlu lokality definice služby.
[RoleAssemblyName] Název binárního souboru pro roli.

Další kroky