Vad är molntjänstmodellen (klassisk) och hur paketeras den?

Viktigt

Cloud Services (klassisk) är nu inaktuell för nya kunder och kommer att dras tillbaka den 31 augusti 2024 för alla kunder. Nya distributioner bör använda den nya Azure Resource Manager-baserade distributionsmodellen Azure Cloud Services (utökad support).

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 molntjänstens struktur och hur den konfigureras. kollektivt kallas 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-tjänstdefinitionsschemat (.csdef-fil) 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="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>

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

Webbplatser
Innehåller definitionerna 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ällningsdefinitionerna för funktioner i en viss roll.

Certifikat
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 datorn 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.

Start
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) tillhandahåller det tillåtna formatet för en tjänstkonfigurationsfil.

Tjänstkonfigurationsfilen är inte paketerad med programmet, men 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 referera till 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 din molntjänst eventuellt blir otillgänglig under uppgraderingar rekommenderar vi att du distribuerar fler än en instans av dina webbinriktade roller. Genom att distribuera mer än en instans följer du riktlinjerna i serviceavtalet för Azure Compute(SLA), som garanterar 99,95 % extern anslutning för Internetanslutna 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.

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

Anteckning

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 Certifikat på sidan 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 för att dirigera begäran till rätt plats. Du kan också konfigurera dina program så att de lyssnar på välkända portar på IP-adressen.

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

Du kan uppdatera konfigurationen av molntjänsten medan 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 tumavtrycket för certifikatet
    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 smidigt instansen offline för att uppdatera certifikatet och ta det online igen när ändringen är klar.

Hantera konfigurationsändringar med Service Runtime-händelser

Azure Runtime-biblioteket innehåller namnområdet Microsoft.WindowsAzure.ServiceRuntime, som tillhandahåller klasser för att interagera med Azure-miljön från en roll. Klassen RoleEnvironment definierar följande händelser som aktiveras 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, vilket ger dig möjlighet att ta ned rollinstanserna om det behövs.
  • Ändrad händelse
    Inträffar när konfigurationsändringen har tillämpats på en angiven instans av en roll.

Anteckning

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

ServicePackage.cspkg

Anteckning

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 paketets innehåll. CSPack genererar en programpaketfil (.cspkg) som du kan ladda upp till Azure med hjälp av Azure Portal. Som standard heter [ServiceDefinitionFileName].cspkgpaketet , men du kan ange ett annat namn med hjälp /out av alternativet CSPack.

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

Anteckning

CSPack.exe (i Windows) är tillgängligt genom att köra genvägen till Microsoft Azure-kommandotolken som installeras med SDK:t.

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

Tips

Kör molntjänsten lokalt i Microsoft Azure Compute-emulatorn med 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 för 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. Detta är vanligtvis inställt 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

Jag skapar ett molntjänstpaket och jag vill...

Jag använder Visual Studio och jag vill...