Wat is het cloudservicemodel (klassiek) en hoe kan ik het inpakken?

Belangrijk

Cloud Services (klassiek) is nu afgeschaft voor nieuwe klanten en wordt op 31 augustus 2024 voor alle klanten buiten gebruik gesteld. Nieuwe implementaties moeten gebruikmaken van het nieuwe implementatiemodel op basis van Azure Resource Manager Azure Cloud Services (uitgebreide ondersteuning).

Een cloudservice wordt gemaakt op basis van drie onderdelen: de servicedefinitie (.csdef), de serviceconfiguratie (.cscfg) en een servicepakket (.cspkg). Zowel de bestanden ServiceDefinition.csdef als ServiceConfig.cscfg zijn gebaseerd op XML en beschrijven de structuur van de cloudservice en hoe deze is geconfigureerd; gezamenlijk het model genoemd. ServicePackage.cspkg is een zip-bestand dat wordt gegenereerd op basis van de ServiceDefinition.csdef en onder andere alle vereiste binaire afhankelijkheden bevat. Azure maakt een cloudservice van zowel ServicePackage.cspkg alsserviceconfig.cscfg.

Zodra de cloudservice wordt uitgevoerd in Azure, kunt u deze opnieuw configureren via het bestand ServiceConfig.cscfg , maar u kunt de definitie niet wijzigen.

Waar wilt u meer over weten?

ServiceDefinition.csdef

Het bestand ServiceDefinition.csdef geeft de instellingen op die door Azure worden gebruikt voor het configureren van een cloudservice. Het Azure-servicedefinitieschema (.csdef-bestand) biedt de toegestane indeling voor een servicedefinitiebestand. In het volgende voorbeeld ziet u de instellingen die kunnen worden gedefinieerd voor de web- en werkrollen:

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

U kunt het Service Definition Schema raadplegen voor een beter begrip van het XML-schema dat hier wordt gebruikt, maar hier volgt een korte uitleg van enkele van de elementen:

Sites
Bevat de definities voor websites of webtoepassingen die worden gehost in IIS7.

InputEndpoints
Bevat de definities voor eindpunten die worden gebruikt om contact op te maken met de cloudservice.

InternalEndpoints
Bevat de definities voor eindpunten die door rolinstanties worden gebruikt om met elkaar te communiceren.

ConfigurationSettings
Bevat de instellingsdefinities voor functies van een specifieke rol.

Certificaten
Bevat de definities voor certificaten die nodig zijn voor een rol. In het vorige codevoorbeeld ziet u een certificaat dat wordt gebruikt voor de configuratie van Azure Connect.

LocalResources
Bevat de definities voor lokale opslagresources. Een lokale opslagresource is een gereserveerde map in het bestandssysteem van de virtuele machine waarin een exemplaar van een rol wordt uitgevoerd.

Invoer
Bevat de definities voor geïmporteerde modules. In het vorige codevoorbeeld ziet u de modules voor Verbinding met extern bureaublad en Azure Connect.

Opstarten
Bevat taken die worden uitgevoerd wanneer de rol wordt gestart. De taken worden gedefinieerd in een .cmd- of uitvoerbaar bestand.

ServiceConfiguration.cscfg

De configuratie van de instellingen voor uw cloudservice wordt bepaald door de waarden in het bestand ServiceConfiguration.cscfg . U geeft het aantal exemplaren op dat u wilt implementeren voor elke rol in dit bestand. De waarden voor de configuratie-instellingen die u in het servicedefinitiebestand hebt gedefinieerd, worden toegevoegd aan het serviceconfiguratiebestand. De vingerafdrukken voor beheercertificaten die zijn gekoppeld aan de cloudservice, worden ook toegevoegd aan het bestand. Het Azure-serviceconfiguratieschema (.cscfg-bestand) biedt de toegestane indeling voor een serviceconfiguratiebestand.

Het serviceconfiguratiebestand wordt niet verpakt met de toepassing, maar wordt geüpload naar Azure als een afzonderlijk bestand en wordt gebruikt om de cloudservice te configureren. U kunt een nieuw serviceconfiguratiebestand uploaden zonder uw cloudservice opnieuw te implementeren. De configuratiewaarden voor de cloudservice kunnen worden gewijzigd terwijl de cloudservice wordt uitgevoerd. In het volgende voorbeeld ziet u de configuratie-instellingen die kunnen worden gedefinieerd voor de web- en werkrollen:

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

U kunt het serviceconfiguratieschema raadplegen voor een beter begrip van het XML-schema dat hier wordt gebruikt, maar hier volgt een korte uitleg van de elementen:

exemplaren
Hiermee configureert u het aantal actieve exemplaren voor de rol. Om te voorkomen dat uw cloudservice mogelijk niet beschikbaar is tijdens upgrades, wordt u aangeraden meer dan één exemplaar van uw webgerichte rollen te implementeren. Door meer dan één exemplaar te implementeren, houdt u zich aan de richtlijnen in de Sla (Azure Compute Service Level Agreement), die 99,95% externe connectiviteit garandeert voor internetgerichte rollen wanneer twee of meer rolinstanties voor een service worden geïmplementeerd.

ConfigurationSettings
Hiermee configureert u de instellingen voor de actieve exemplaren voor een rol. De naam van de <Setting> elementen moet overeenkomen met de instellingsdefinities in het servicedefinitiebestand.

Certificaten
Hiermee configureert u de certificaten die door de service worden gebruikt. In het vorige codevoorbeeld ziet u hoe u het certificaat voor de RemoteAccess-module definieert. De waarde van het vingerafdrukkenmerk moet worden ingesteld op de vingerafdruk van het certificaat dat moet worden gebruikt.

Notitie

De vingerafdruk voor het certificaat kan worden toegevoegd aan het configuratiebestand met behulp van een teksteditor. Of de waarde kan worden toegevoegd op het tabblad Certificaten van de pagina Eigenschappen van de rol in Visual Studio.

Poorten definiëren voor rolinstanties

Azure staat slechts één toegangspunt toe voor een webrol. Dit betekent dat al het verkeer plaatsvindt via één IP-adres. U kunt uw websites configureren om een poort te delen door de hostheader te configureren om de aanvraag naar de juiste locatie te sturen. U kunt uw toepassingen ook configureren om te luisteren naar bekende poorten op het IP-adres.

In het volgende voorbeeld ziet u de configuratie voor een webrol met een website en webtoepassing. De website is geconfigureerd als de standaardinvoerlocatie op poort 80 en de webtoepassingen worden geconfigureerd voor het ontvangen van aanvragen van een alternatieve hostheader die 'mail.mysite.cloudapp.net' wordt genoemd.

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

De configuratie van een rol wijzigen

U kunt de configuratie van uw cloudservice bijwerken terwijl deze wordt uitgevoerd in Azure, zonder de service offline te halen. Als u configuratiegegevens wilt wijzigen, kunt u een nieuw configuratiebestand uploaden of het configuratiebestand ter plaatse bewerken en toepassen op uw actieve service. De volgende wijzigingen kunnen worden aangebracht in de configuratie van een service:

  • De waarden van configuratie-instellingen wijzigen
    Wanneer een configuratie-instelling wordt gewijzigd, kan een rolinstantie ervoor kiezen om de wijziging toe te passen terwijl het exemplaar online is of om het exemplaar probleemloos te recyclen en de wijziging toe te passen terwijl het exemplaar offline is.
  • De servicetopologie van rolinstanties wijzigen
    Topologiewijzigingen hebben geen invloed op actieve exemplaren, behalve wanneer een exemplaar wordt verwijderd. Alle resterende exemplaren hoeven over het algemeen niet te worden gerecycled; U kunt er echter voor kiezen om rolinstanties te recyclen als reactie op een topologiewijziging.
  • De vingerafdruk van het certificaat wijzigen
    U kunt een certificaat alleen bijwerken wanneer een rolinstantie offline is. Als een certificaat wordt toegevoegd, verwijderd of gewijzigd terwijl een rolexemplaar online is, wordt het exemplaar correct offline gehaald om het certificaat bij te werken en weer online te zetten nadat de wijziging is voltooid.

Configuratiewijzigingen verwerken met Service Runtime-gebeurtenissen

De Azure Runtime-bibliotheek bevat de naamruimte Microsoft.WindowsAzure.ServiceRuntime , die klassen biedt voor interactie met de Azure-omgeving vanuit een rol. De klasse RoleEnvironment definieert de volgende gebeurtenissen die vóór en na een configuratiewijziging worden gegenereerd:

  • Gebeurtenis wijzigen
    Dit gebeurt voordat de configuratiewijziging wordt toegepast op een opgegeven exemplaar van een rol, zodat u zo nodig de rolinstanties kunt verwijderen.
  • Gebeurtenis gewijzigd
    Treedt op nadat de configuratiewijziging is toegepast op een opgegeven exemplaar van een rol.

Notitie

Omdat certificaatwijzigingen de exemplaren van een rol altijd offline halen, worden de gebeurtenissen RoleEnvironment.Changing of RoleEnvironment.Changed niet gegenereerd.

ServicePackage.cspkg

Notitie

De maximale pakketgrootte die kan worden geïmplementeerd, is 600 MB

Als u een toepassing als een cloudservice in Azure wilt implementeren, moet u de toepassing eerst in de juiste indeling verpakken. U kunt het cspack-opdrachtregelprogramma (geïnstalleerd met de Azure SDK) gebruiken om het pakketbestand te maken als alternatief voor Visual Studio.

CSPack gebruikt de inhoud van het servicedefinitiebestand en het serviceconfiguratiebestand om de inhoud van het pakket te definiëren. CSPack genereert een toepassingspakketbestand (.cspkg) dat u kunt uploaden naar Azure met behulp van de Azure Portal. Standaard heeft het pakket de naam [ServiceDefinitionFileName].cspkg, maar u kunt een andere naam opgeven met behulp van de /out optie CSPack.

CSPack bevindt zich op
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

Notitie

CSPack.exe (in Windows) is beschikbaar door de snelkoppeling microsoft Azure-opdrachtprompt uit te voeren die is geïnstalleerd met de SDK.

Voer het CSPack.exe-programma zelf uit om documentatie over alle mogelijke schakelopties en opdrachten te bekijken.

Tip

Voer uw cloudservice lokaal uit in de Microsoft Azure Compute Emulator, gebruik de optie /copyonly . Met deze optie worden de binaire bestanden voor de toepassing gekopieerd naar een mapindeling van waaruit ze kunnen worden uitgevoerd in de rekenemulator.

Voorbeeldopdracht voor het verpakken van een cloudservice

In het volgende voorbeeld wordt een toepassingspakket gemaakt dat de informatie voor een webrol bevat. De opdracht specificeert het servicedefinitiebestand dat moet worden gebruikt, de map waar binaire bestanden kunnen worden gevonden en de naam van het pakketbestand.

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

Als de toepassing zowel een webrol als een werkrol bevat, wordt de volgende opdracht gebruikt:

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

Hierbij worden de variabelen als volgt gedefinieerd:

Variabele Waarde
[DirectoryName] De submap onder de hoofdmap van het project die het .csdef-bestand van het Azure-project bevat.
[ServiceDefinition] De naam van het servicedefinitiebestand. Dit bestand heet standaard ServiceDefinition.csdef.
[OutputFileName] De naam voor het gegenereerde pakketbestand. Dit wordt meestal ingesteld op de naam van de toepassing. Als er geen bestandsnaam is opgegeven, wordt het toepassingspakket gemaakt als [ApplicationName].cspkg.
[RoleName] De naam van de rol zoals gedefinieerd in het servicedefinitiebestand.
[RoleBinariesDirectory] De locatie van de binaire bestanden voor de rol.
[VirtualPath] De fysieke mappen voor elk virtueel pad dat is gedefinieerd in de sectie Sites van de servicedefinitie.
[PhysicalPath] De fysieke mappen van de inhoud voor elk virtueel pad dat is gedefinieerd in het siteknooppunt van de servicedefinitie.
[RoleAssemblyName] De naam van het binaire bestand voor de rol.

Volgende stappen

Ik ben een cloudservicepakket aan het maken en ik wil...

Ik gebruik Visual Studio en ik wil...