Dela via


Vad är Azure Cloud Service-modellen och hur paketerar jag den?

En molntjänst skapas från tre komponenter, tjänstdefinitionen (.csdef), tjänstkonfigurationen (.cscfg) och ett tjänstpaket (.cspkg). Både Filerna ServiceDefinition.csdef och ServiceConfig.cscfg är XML-baserade och beskriver strukturen för molntjänsten och dess konfiguration. Vi kallar tillsammans dessa filer för modellen. ServicePackage.cspkg är en zip-fil som genereras från ServiceDefinition.csdef och bland annat innehåller alla nödvändiga binärbaserade beroenden. Azure skapar en molntjänst från både ServicePackage.cspkg och ServiceConfig.cscfg.

När molntjänsten körs i Azure kan du konfigurera om den via filen ServiceConfig.cscfg , men du kan inte ändra definitionen.

Vad vill du veta mer om?

ServiceDefinition.csdef

Filen ServiceDefinition.csdef anger de inställningar som används av Azure för att konfigurera en molntjänst. Azure Service Definition Schema (.csdef File) tillhandahåller det tillåtna formatet för en tjänstdefinitionsfil. I följande exempel visas de inställningar som kan definieras för webb- och arbetsrollerna:

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

Du kan referera till tjänstdefinitionsschemat) för en bättre förståelse av XML-schemat som används här, men här är en snabb förklaring av några av elementen:

Platser
Innehåller definitioner för webbplatser eller webbprogram som finns i IIS7.

InputEndpoints
Innehåller definitionerna för slutpunkter som används för att kontakta molntjänsten.

InternalEndpoints
Innehåller definitionerna för slutpunkter som används av rollinstanser för att kommunicera med varandra.

ConfigurationSettings
Innehåller inställningsdefinitioner för funktioner i en viss roll.

Intyg
Innehåller definitionerna för certifikat som behövs för en roll. I föregående kodexempel visas ett certifikat som används för konfigurationen av Azure Connect.

LocalResources
Innehåller definitionerna för lokala lagringsresurser. En lokal lagringsresurs är en reserverad katalog i filsystemet på den virtuella dator där en instans av en roll körs.

Import
Innehåller definitionerna för importerade moduler. I föregående kodexempel visas modulerna för Anslutning till fjärrskrivbord och Azure Connect.

Nystartade företag
Innehåller uppgifter som körs när rollen startar. Uppgifterna definieras i en .cmd eller körbar fil.

ServiceConfiguration.cscfg

Konfigurationen av inställningarna för molntjänsten bestäms av värdena i filen ServiceConfiguration.cscfg . Du anger antalet instanser som du vill distribuera för varje roll i den här filen. Värdena för de konfigurationsinställningar som du definierade i tjänstdefinitionsfilen läggs till i tjänstkonfigurationsfilen. Tumavtrycken för alla hanteringscertifikat som är associerade med molntjänsten läggs också till i filen. Konfigurationsschemat för Azure-tjänsten (.cscfg-fil) ger det tillåtna formatet för en tjänstkonfigurationsfil.

Tjänstkonfigurationsfilen är inte paketerad med programmet. Den laddas upp till Azure som en separat fil och används för att konfigurera molntjänsten. Du kan ladda upp en ny tjänstkonfigurationsfil utan att distribuera om molntjänsten. Konfigurationsvärdena för molntjänsten kan ändras medan molntjänsten körs. I följande exempel visas de konfigurationsinställningar som kan definieras för webb- och arbetsrollerna:

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

Du kan läsa tjänstkonfigurationsschemat för att bättre förstå XML-schemat som används här, men här är en snabb förklaring av elementen:

Instanser
Konfigurerar antalet instanser som körs för rollen. För att förhindra att molntjänsten potentiellt blir otillgänglig under uppgraderingar rekommenderar vi att du distribuerar mer än en instans av dina webbinriktade roller. Genom att distribuera mer än en instans följer du riktlinjerna i Azure Compute Service Level Agreement (SLA) som garanterar 99,95 % extern anslutning för Internetuppkopplade roller när två eller flera rollinstanser distribueras för en tjänst.

ConfigurationSettings
Konfigurerar inställningarna för de instanser som körs för en roll. Namnet på elementen <Setting> måste matcha inställningsdefinitionerna i tjänstdefinitionsfilen.

Intyg
Konfigurerar de certifikat som används av tjänsten. I föregående kodexempel visas hur du definierar certifikatet för RemoteAccess-modulen. Värdet för tumavtrycksattributet måste anges till tumavtrycket för certifikatet som ska användas.

Kommentar

Tumavtrycket för certifikatet kan läggas till i konfigurationsfilen med hjälp av en textredigerare. Eller så kan värdet läggas till på fliken Certifikatsidan Egenskaper för rollen i Visual Studio.

Definiera portar för rollinstanser

Azure tillåter endast en startpunkt till en webbroll. Det innebär att all trafik sker via en IP-adress. Du kan konfigurera dina webbplatser så att de delar en port genom att konfigurera värdhuvudet så att begäran dirigeras till rätt plats. Du kan också konfigurera dina program så att de lyssnar på välkända portar på IP-adressen.

Följande exempel visar konfigurationen för en webbroll med en webbplats och ett webbprogram. Webbplatsen är konfigurerad som standardinmatningsplats på port 80 och webbprogrammen är konfigurerade för att ta emot begäranden från ett alternativt värdhuvud med namnet 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>

Ändra konfigurationen av en roll

Du kan uppdatera konfigurationen av molntjänsten när den körs i Azure, utan att ta tjänsten offline. Om du vill ändra konfigurationsinformationen kan du antingen ladda upp en ny konfigurationsfil eller redigera konfigurationsfilen på plats och tillämpa den på den tjänst som körs. Följande ändringar kan göras i konfigurationen av en tjänst:

  • Ändra värdena för konfigurationsinställningar
    När en konfigurationsinställning ändras kan en rollinstans välja att tillämpa ändringen medan instansen är online, eller att återanvända instansen korrekt och tillämpa ändringen medan instansen är offline.
  • Ändra tjänsttopologin för rollinstanser
    Topologiändringar påverkar inte instanser som körs, förutom när en instans tas bort. Alla återstående instanser behöver vanligtvis inte återvinnas. Du kan dock välja att återanvända rollinstanser som svar på en topologiändring.
  • Ändra certifikatets tumavtryck
    Du kan bara uppdatera ett certifikat när en rollinstans är offline. Om ett certifikat läggs till, tas bort eller ändras när en rollinstans är online, tar Azure korrekt instansen offline för att uppdatera certifikatet. Azure tar tillbaka den online när ändringen har slutförts.

Hantera konfigurationsändringar med Service Runtime-händelser

Azure Runtime-biblioteket innehåller namnområdet Microsoft.WindowsAzure.ServiceRuntime, som tillhandahåller klasser för interaktion med Azure-miljön från en roll. Klassen RoleEnvironment definierar följande händelser som genereras före och efter en konfigurationsändring:

  • Ändra händelse
    Detta inträffar innan konfigurationsändringen tillämpas på en angiven instans av en roll som ger dig en chans att ta bort rollinstanserna om det behövs.
  • Ändrad händelse
    Inträffar när konfigurationsändringen har tillämpats på en angiven instans av en roll.

Kommentar

Eftersom certifikatändringar alltid tar instanserna av en roll offline genererar de inte händelserna RoleEnvironment.Changing eller RoleEnvironment.Changed.

ServicePackage.cspkg

Kommentar

Den maximala paketstorleken som kan distribueras är 600 MB

Om du vill distribuera ett program som en molntjänst i Azure måste du först paketera programmet i lämpligt format. Du kan använda kommandoradsverktyget CSPack (installerat med Azure SDK) för att skapa paketfilen som ett alternativ till Visual Studio.

CSPack använder innehållet i tjänstdefinitionsfilen och tjänstkonfigurationsfilen för att definiera innehållet i paketet. CSPack genererar en programpaketfil (.cspkg) som du kan ladda upp till Azure med hjälp av Azure-portalen. Som standard heter [ServiceDefinitionFileName].cspkgpaketet , men du kan ange ett annat namn med alternativet /out CSPack.

CSPack finns på
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

Kommentar

CSPack.exe (i windows) är tillgängligt genom att köra genvägen microsoft Azure-kommandotolken som är installerad med SDK:t.

Kör CSPack.exe programmet på egen hand för att se dokumentation om alla möjliga växlar och kommandon.

Dricks

Kör molntjänsten lokalt i Microsoft Azure Compute-emulatorn och använd alternativet /copyonly . Det här alternativet kopierar de binära filerna för programmet till en kataloglayout som de kan köras från i beräkningsemulatorn.

Exempelkommando för att paketera en molntjänst

I följande exempel skapas ett programpaket som innehåller information om en webbroll. Kommandot anger den tjänstdefinitionsfil som ska användas, katalogen där binära filer finns och namnet på paketfilen.

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

Om programmet innehåller både en webbroll och en arbetsroll används följande kommando:

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

Där variablerna definieras på följande sätt:

Variabel Värde
[DirectoryName] Underkatalogen under rotprojektkatalogen som innehåller .csdef-filen för Azure-projektet.
[ServiceDefinition] Namnet på tjänstdefinitionsfilen. Som standard heter den här filen ServiceDefinition.csdef.
[OutputFileName] Namnet på den genererade paketfilen. Den här variabeln är vanligtvis inställd på namnet på programmet. Om inget filnamn anges skapas programpaketet som [ApplicationName].cspkg.
[RoleName] Namnet på rollen enligt definitionen i tjänstdefinitionsfilen.
[RoleBinariesDirectory] Platsen för de binära filerna för rollen.
[VirtualPath] De fysiska katalogerna för varje virtuell sökväg som definieras i avsnittet Webbplatser i tjänstdefinitionen.
[PhysicalPath] De fysiska katalogerna för innehållet för varje virtuell sökväg som definierats i platsnoden i tjänstdefinitionen.
[RoleAssemblyName] Namnet på den binära filen för rollen.

Nästa steg