Share via


Wat is het Azure Cloud Service-model en hoe kan ik het verpakken?

Er wordt een cloudservice 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 wordt 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 als de ServiceConfig.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 om een cloudservice te configureren. Het Azure Service Definition Schema (.csdef File) 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="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>

U kunt het servicedefinitieschema raadplegen voor een beter begrip van het XML-schema dat hier wordt gebruikt. Hier volgt echter 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 worden gebruikt door rolinstanties om met elkaar te communiceren.

Configuratie Instellingen
Bevat de instellingsdefinities voor functies van een specifieke rol.

Getuigschriften
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 Verbinding maken.

LocalResources
Bevat de definities voor lokale opslagbronnen. Een lokale opslagresource is een gereserveerde map op 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 Extern bureaublad Verbinding maken ion en Azure Verbinding maken.

Start-ups
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 voor elke rol in dit bestand wilt implementeren. De waarden voor de configuratie-instellingen die u hebt gedefinieerd in het servicedefinitiebestand, worden toegevoegd aan het serviceconfiguratiebestand. De vingerafdrukken voor beheercertificaten die aan de cloudservice zijn gekoppeld, worden ook toegevoegd aan het bestand. Het Azure Service Configuration Schema (.cscfg File) biedt de toegestane indeling voor een serviceconfiguratiebestand.

Het serviceconfiguratiebestand is niet verpakt met de toepassing, maar wordt als afzonderlijk bestand geüpload naar Azure 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. Hier volgt echter een korte uitleg van de elementen:

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

Configuratie Instellingen
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.

Getuigschriften
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 kenmerk vingerafdruk 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 ingangspunt toe aan 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 leiden. 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 standaardvermeldingslocatie op poort 80 en de webtoepassingen zijn 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 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 correct te recyclen en de wijziging toe te passen terwijl het exemplaar offline is.
  • De servicetopologie van rolinstanties wijzigen
    Topologiewijzigingen zijn niet van invloed op actieve exemplaren, behalve wanneer een exemplaar wordt verwijderd. Alle resterende instanties 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 rolinstantie online is, neemt Azure het exemplaar correct offline om het certificaat bij te werken en het weer online te brengen nadat de wijziging is voltooid.

Configuratiewijzigingen verwerken met Service Runtime-gebeurtenissen

De Azure Runtime-bibliotheek bevat de Microsoft.WindowsAzure.ServiceRuntime-naamruimte, 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 instantie van een rol, zodat u de rolinstanties zo nodig kunt verwijderen.
  • Gebeurtenis gewijzigd
    Vindt plaats nadat de configuratiewijziging is toegepast op een opgegeven instantie van een rol.

Notitie

Omdat certificaatwijzigingen altijd de exemplaren van een rol 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 opdrachtregelprogramma CSPack (geïnstalleerd met de Azure SDK) gebruiken om het pakketbestand te maken als alternatief voor Visual Studio.

CSPack maakt gebruik van 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 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 in
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

Notitie

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

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

Fooi

Voer uw cloudservice lokaal uit in de Microsoft Azure Compute Emulator en gebruik de optie /copyonly . Met deze optie worden de binaire bestanden voor de toepassing gekopieerd naar een mapindeling 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. Met de opdracht geeft u het servicedefinitiebestand op 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]

Waar de variabelen als volgt worden gedefinieerd:

Variabele Waarde
[DirectoryName] De submap onder de hoofdprojectmap die het .csdef-bestand van het Azure-project bevat.
[ServiceDefinition] De naam van het servicedefinitiebestand. Dit bestand heeft standaard de naam ServiceDefinition.csdef.
[OutputFileName] De naam voor het gegenereerde pakketbestand. Dit is 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