Wat is het cloudservicemodel (klassiek) en hoe kan ik het verpakken?
Belangrijk
Cloud Services (klassiek) is nu afgeschaft voor nieuwe klanten en wordt op 31 augustus 2024 voor alle klanten afgeschaft. Nieuwe implementaties moeten gebruikmaken van het nieuwe Azure Resource Manager implementatiemodel op basis van Azure Cloud Services (uitgebreide ondersteuning).
Een cloudservice wordt gemaakt op basis van drie onderdelen: de servicedefinitie (.csdef), de service-configuratie (.cscfg) en een servicepakket (.cspkg). De bestanden ServiceDefinition.csdef en ServiceConfig.cscfg zijn op XML gebaseerd 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 ServiceDefinition.csdef en bevat onder andere alle vereiste binaire afhankelijkheden. Azure maakt een cloudservice vanuit zowel ServicePackage.cspkg als 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?
- Ik wil meer weten over de bestanden ServiceDefinition.csdef en ServiceConfig.cscfg.
- Dat weet ik al. Geef me enkele voorbeelden van wat ik kan configureren.
- Ik wil de ServicePackage.cspkg maken.
- Ik gebruik Visual Studio en ik wil...
ServiceDefinition.csdef
Het bestand ServiceDefinition.csdef bevat de instellingen die door Azure worden gebruikt om een cloudservice te configureren. Het Azure Service Definition Schema (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>
Raadpleeg het servicedefinitieschema voor een beter begrip van het XML-schema dat hier wordt gebruikt, maar hier volgt een snelle 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 nemen met de cloudservice.
InternalEndpoints
Bevat de definities voor eindpunten die worden gebruikt door rol-exemplaren 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 Verbinding maken.
LocalResources
Bevat de definities voor lokale opslagbronnen. Een lokale opslagresource is een gereserveerde map in het bestandssysteem van de virtuele machine waarop 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 Verbinding maken.
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 hebt gedefinieerd in het servicedefinitiebestand worden toegevoegd aan het serviceconfiguratiebestand. De vingerafdruk voor alle beheercertificaten die aan de cloudservice zijn gekoppeld, worden ook toegevoegd aan het bestand. Het Azure-serviceconfiguratieschema (.cscfg-bestand) biedt de toegestane indeling voor een serviceconfiguratiebestand.
Het serviceconfiguratiebestand is 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 moeten configureren. 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>
Raadpleeg het serviceconfiguratieschema voor meer informatie over het XML-schema dat hier wordt gebruikt, maar hier volgt een snelle uitleg van de elementen:
exemplaren
Hiermee configureert u het aantal exemplaren dat wordt uitgevoerd voor de rol. Om te voorkomen dat uw cloudservice mogelijk niet meer beschikbaar is tijdens upgrades, wordt u aangeraden meer dan één exemplaar van uw webrollen te implementeren. Door meer dan één exemplaar te implementeren, volgt u de richtlijnen in de Azure Compute Service Level Agreement (SLA),die een externe connectiviteit van 99,95% garandeert voor internetfuncties wanneer twee of meer rolse exemplaren voor een service worden geïmplementeerd.
ConfigurationSettings
Hiermee configureert u de instellingen voor de exemplaren die worden uitgevoerd voor een rol. De naam van de elementen <Setting> moet overeenkomen met de instellingsdefinities in het servicedefinitiebestand.
Certificaten
Hiermee configureert u de certificaten die worden gebruikt door de service. 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. De waarde kan ook worden toegevoegd op het tabblad Certificaten van de pagina Eigenschappen van de rol in Visual Studio.
Poorten voor rolin instances definiëren
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 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 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 service die wordt uitgevoerd. 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 rolinstelling ervoor kiezen om de wijziging toe te passen terwijl het exemplaar online is, of om het exemplaar op de juiste manier te recyclen en de wijziging toe te passen terwijl het exemplaar offline is. - De servicetopologie van rol-exemplaren wijzigen
Topologiewijzigingen hebben geen invloed op exemplaren die worden uitgevoerd, behalve wanneer een exemplaar wordt verwijderd. Alle resterende exemplaren hoeven doorgaans niet te worden gerecycled; U kunt er echter voor kiezen om rol-exemplaren te recyclen als reactie op een wijziging in de topologie. - De vingerafdruk van het certificaat wijzigen
U kunt een certificaat alleen bijwerken wanneer een rol-exemplaar offline is. Als een certificaat wordt toegevoegd, verwijderd of gewijzigd terwijl een rol exemplaar online is, neemt Azure het exemplaar op een goede manier offline om het certificaat bij te werken en weer online te brengen 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 verhoogd:
- Gebeurtenis wijzigen
Dit gebeurt voordat de configuratiewijziging wordt toegepast op een opgegeven exemplaar van een rol, zodat u de rol-exemplaren zo nodig kunt uitpuiten. - Gebeurtenis gewijzigd
Vindt plaats nadat de configuratiewijziging is toegepast op een opgegeven exemplaar van een rol.
Notitie
Omdat certificaatwijzigingen altijd de exemplaren van een rol offline halen, worden de gebeurtenissen RoleEnvironment.Changing of RoleEnvironment.Changed niet door hen gehaald.
ServicePackage.cspkg
Notitie
De maximale pakketgrootte die kan worden geïmplementeerd, is 600 MB
Als u een toepassing wilt implementeren als een cloudservice in Azure, 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 gebruikt de inhoud van het servicedefinitiebestand en serviceconfiguratiebestand om de inhoud van het pakket te definiëren. CSPack genereert een toepassingspakketbestand (.cspkg) dat u naar Azure kunt uploaden met behulp van de Azure Portal. Het pakket heeft standaard de naam , maar u kunt een andere naam opgeven met behulp van [ServiceDefinitionFileName].cspkg /out de 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 zelf uit voor documentatie over alle mogelijke switches en opdrachten.
Tip
Voer uw cloudservice lokaal uit in 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. Met de opdracht geeft u het te gebruiken servicedefinitiebestand op, 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]
Hier worden de variabelen als volgt 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 heet standaard ServiceDefinition.csdef. |
| [OutputFileName] | De naam voor het gegenereerde pakketbestand. Dit wordt doorgaans 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 directories voor elk virtueel pad dat is gedefinieerd in de sectie Sites van de servicedefinitie. |
| [PhysicalPath] | De fysieke directories van de inhoud voor elk virtueel pad dat is gedefinieerd in het site-knooppunt van de servicedefinitie. |
| [RoleAssemblyName] | De naam van het binaire bestand voor de rol. |
Volgende stappen
Ik maak een cloudservicepakket en ik wil...
Ik gebruik Visual Studio en ik wil...