Vad är cloud service-modellen (klassisk) och hur paketerar jag den?

Viktigt

Cloud Services (klassisk) är nu inaktuell för nya kunder och 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ökat stöd).

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 hur den är konfigurerad. gemensamt kallade 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änstens definitionsschema (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 tjänstdefinitionsschemat för att få en bättre förståelse för det XML-schema 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ällningsdefinitioner för funktioner i en viss roll.

Certifikat
Innehåller definitionerna för certifikat som behövs för en roll. Föregående kodexempel visar ett certifikat som används för konfigurationen av Azure Anslut.

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

Start
Innehåller uppgifter som körs när rollen startar. Aktiviteterna definieras i en .cmd- eller körbar fil.

ServiceConfiguration.cscfg

Konfigurationen av inställningarna för din molntjänst 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 paketeras inte 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 omdistribuera 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å det XML-schema 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. Om du vill förhindra att molntjänsten blir otillgänglig under uppgraderingar rekommenderar vi att du distribuerar fler än en instans av dina webbaserade roller. Genom att distribuera fler än en instans följer du riktlinjerna i Azure Compute Serviceavtal (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 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. Föregående kodexempel visar 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 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 att dela 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.

I följande exempel visas konfigurationen för en webbroll med en webbplats och ett webbprogram. Webbplatsen är konfigurerad som standardpostplats på port 80 och webbprogrammen konfigureras för att ta emot begäranden från en alternativ värdrubrik 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 molntjänstens konfiguration när den körs i Azure utan att ta tjänsten offline. Om du vill ändra konfigurationsinformation 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ällningarna
    När en konfigurationsinställning ändras kan en rollinstans välja att tillämpa ändringen när instansen är online, eller återanvända instansen på ett smidigt sätt och tillämpa ändringen när instansen är offline.
  • Ändra tjänsttopologin för rollinstanser
    Topologiändringar påverkar inte instanser som körs, förutom var en instans tas bort. Alla återstående instanser behöver vanligtvis inte återanvändas. 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 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 innehåller klasser för att interagera med Azure-miljön från en roll. Klassen RoleEnvironment definierar följande händelser som utlöses 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 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.

Anteckning

Eftersom certifikatändringar alltid tar instanser av en roll offline, höjer 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 (installeras 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 Portal. Som standard heter paketet [ServiceDefinitionFileName].cspkg , men du kan ange ett annat namn med hjälp av alternativet /out CSPack.

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

Anteckning

CSPack.exe (i Windows) är tillgänglig genom att Microsoft Azure genvägen till kommandotolken som installeras med SDK: n.

Kör CSPack.exe program för att se dokumentation om alla möjliga växlar och kommandon.

Tips

Kör molntjänsten lokalt i Microsoft Azure Compute Emulator 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 informationen för en webbroll. Kommandot anger vilken tjänstdefinitionsfil som ska användas, katalogen där binära filer kan hittas 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]

Här definieras variablerna 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. Vanligtvis är detta 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 Platser i tjänstdefinitionen.
[FysiskSökväg] De fysiska katalogerna i 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 vill...

Jag använder Visual Studio och vill...