Cos'è il modello del servizio cloud di Azure e come è possibile crearne il pacchetto?
Un servizio cloud viene creato da tre componenti: la definizione del servizio (.csdef), la configurazione del servizio (.cscfg) e un pacchetto servizio (.cspkg). I file ServiceDefinition.csdef e ServiceConfig.cscfg sono basati su XML e descrivono la struttura del servizio cloud e la relativa configurazione. Questi file vengono chiamati collettivamente come modello. ServicePackage.cspkg è un file ZIP generato da ServiceDefinition.csdef e contiene, oltre ad altri elementi, tutte le dipendenze necessarie basate su file binari. Azure crea un servizio cloud sia da ServicePackage.cspkg che da ServiceConfig.cscfg.
Quando il servizio cloud è in esecuzione in Azure, è possibile riconfigurarlo tramite il file ServiceConfig.cscfg, ma non è possibile modificare la definizione.
Quali altre informazioni sono necessarie?
- Si vuole sapere di più sui file ServiceDefinition.csdef e ServiceConfig.cscfg.
- Si hanno già informazioni in proposito, ma sono necessari alcuni esempi sugli elementi configurabili.
- Si vuole crea ServicePackage.cspkg.
ServiceDefinition.csdef
Il file ServiceDefinition.csdef specifica le impostazioni usate da Azure per configurare un servizio cloud. Lo schema di definizione dei servizi di Azure (file .csdef) fornisce il formato consentito per un file di definizione del servizio. L'esempio seguente mostra le impostazioni che possono essere definite per i ruoli Web e di lavoro:
<?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>
È possibile fare riferimento allo schema di definizione del servizio per una migliore comprensione dell'XML Schema usato qui, tuttavia, ecco una rapida spiegazione di alcuni degli elementi:
Siti
Contiene le definizioni per i siti Web o per le applicazioni Web ospitate in IIS7.
InputEndpoints
Contiene le definizioni per gli endpoint usati per contattare il servizio cloud.
InternalEndpoints
Contiene le definizioni per gli endpoint usati dalle istanze del ruolo per comunicare tra loro.
ConfigurationSettings
Contiene le definizioni delle impostazioni per le funzionalità di un ruolo specifico.
Attestati
Contiene le definizioni dei certificati necessari per un ruolo. L'esempio di codice precedente mostra un certificato usato per la configurazione di Azure Connect.
LocalResources
Contiene le definizioni per le risorse di archiviazione locale. Una risorsa di archiviazione locale è una directory riservata nel file system della macchina virtuale in cui è in esecuzione un'istanza di un ruolo.
Importazioni
Contiene le definizioni per i moduli importati. L'esempio di codice precedente mostra i moduli per la connessione Desktop remoto e Azure Connect.
Startup
Contiene le attività eseguite all'avvio del ruolo. Le attività vengono definite in un file eseguibile o con estensione cmd.
ServiceConfiguration.cscfg
La configurazione delle impostazioni per il servizio cloud è determinata dai valori nel file ServiceConfiguration.cscfg . Si specifica il numero di istanze che si vuole distribuire per ogni ruolo in questo file. I valori per le impostazioni di configurazione definite nel file di definizione del servizio vengono aggiunti al file di configurazione del servizio. Vengono aggiunte al file anche le identificazioni personali per eventuali certificati di gestione associati al servizio cloud. Lo schema di configurazione dei servizi di Azure (file .cscfg) fornisce il formato consentito per un file di configurazione del servizio.
Il file di configurazione del servizio non è in pacchetto con l'applicazione. Carica in Azure come file separato e usato per configurare il servizio cloud. È possibile caricare un nuovo file di configurazione del servizio senza ridistribuire il servizio cloud. I valori di configurazione per il servizio cloud possono essere modificati mentre il servizio cloud è in esecuzione. L'esempio seguente mostra le impostazioni di configurazione che possono essere definite per i ruoli Web e di lavoro:
<?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>
È possibile fare riferimento allo schema di configurazione del servizio per comprendere meglio l'XML Schema usato qui, tuttavia, ecco una rapida spiegazione degli elementi:
Istanze
Configura il numero di istanze in esecuzione per il ruolo. Per impedire che il servizio cloud diventi potenzialmente non disponibile durante gli aggiornamenti, è consigliabile distribuire più di un'istanza di ruoli esposti al Web. Distribuendo più di un'istanza, si rispettano le linee guida del contratto di servizio di calcolo di Azure, che garantisce una connettività esterna del 99,95% per i ruoli con connessione Internet quando due o più istanze del ruolo vengono distribuite per un servizio.
ConfigurationSettings
Configura le impostazioni per le istanze in esecuzione di un ruolo. Il nome degli elementi <Setting>
deve corrispondere alle definizioni delle impostazioni nel file di definizione del servizio.
Attestati
Configura i certificati usati dal servizio. L'esempio di codice precedente mostra come definire il certificato per il modulo RemoteAccess. Il valore dell'attributo thumbprint deve essere impostato sull'identificazione personale del certificato da usare.
Nota
L'identificazione personale del certificato può essere aggiunta al file di configurazione usando un editor di testo. In alternativa, il valore può essere aggiunto nella scheda Certificati della pagina Proprietà relativa la ruolo in Visual Studio.
Definizione delle porte per le istanze del ruolo
Azure consente solo un punto di ingresso a un ruolo Web. Ciò significa che tutto il traffico viene gestito tramite un solo indirizzo IP. È possibile configurare la condivisione di una porta per i siti Web configurando l'intestazione host in modo da indirizzare la richiesta al percorso corretto. Si possono anche configurare le applicazioni in modo che siano in ascolto di porte note sull'indirizzo IP.
L'esempio seguente illustra la configurazione di un ruolo Web con un sito Web e un'applicazione Web. Il sito Web è configurato come percorso di ingresso predefinito sulla porta 80 e le applicazioni Web sono configurate in modo da ricevere le richieste da un'intestazione host alternativa denominata 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>
Modifica della configurazione di un ruolo
È possibile aggiornare la configurazione del servizio cloud mentre è in esecuzione in Azure, senza portare il servizio offline. Per modificare le informazioni di configurazione, è possibile caricare un nuovo file di configurazione o modificare il file di configurazione sul posto e applicarlo al servizio in esecuzione. Alla configurazione di un servizio possono essere apportate le seguenti modifiche:
- Modifica dei valori delle impostazioni di configurazione
Quando un'impostazione di configurazione viene modificata, è possibile applicare la modifica a un'istanza del ruolo mentre l'istanza è online oppure è possibile riciclare normalmente l'istanza e applicare la modifica mentre si trova offline. - Modifica della topologia del servizio delle istanze del ruolo
Le modifiche alla topologia non influiscono sulle istanze in esecuzione, ad eccezione della posizione da cui viene rimossa un'istanza. Tutte le istanze rimanenti in genere non devono essere riciclate; tuttavia, è possibile scegliere di riciclare le istanze del ruolo in risposta a una modifica della topologia. - Modifica dell'identificazione personale del certificato
È possibile aggiornare un certificato solo quando un'istanza del ruolo è offline. Se viene aggiunto, eliminato o modificato un certificato mentre un'istanza del ruolo è online, Azure porta normalmente l'istanza offline per aggiornare il certificato. Azure lo riporta online al termine della modifica.
Gestione delle modifiche di configurazione con gli eventi di runtime del servizio
La libreria di runtime di Azure include lo spazio dei nomi Microsoft.WindowsAzure.ServiceRuntime, che fornisce le classi per l'interazione di un ruolo con l'ambiente di Azure. La classe RoleEnvironment definisce gli eventi seguenti generati prima e dopo una modifica di configurazione:
- Evento Changing
Si verifica prima che la modifica di configurazione venga applicata a un'istanza specificata di un ruolo, offrendo la possibilità di interrompere il funzionamento delle istanze del ruolo, se necessario. - Evento Changed
Si verifica dopo che la modifica della configurazione è stata applicata a un'istanza specificata di un ruolo.
Nota
Poiché le modifiche ai certificati richiedono sempre che le istanze di un ruolo siano portate offline, non generano eventi RoleEnvironment.Changing o RoleEnvironment.Changed.
ServicePackage.cspkg
Nota
La dimensione massima del pacchetto che può essere distribuita è 600 MB
Per distribuire un'applicazione come servizio cloud in Azure, è necessario prima creare un pacchetto dell'applicazione nel formato appropriato. È possibile usare lo strumento da riga di comando CSPack (installato con Azure SDK) per creare il file del pacchetto come alternativa a Visual Studio.
CSPack usa il contenuto del file di definizione del servizio e del file di configurazione del servizio per definire il contenuto del pacchetto. CSPack genera un file del pacchetto dell’applicazione (con estensione .cspkg) che è possibile caricare su Azure utilizzando il portale di Azure. Per impostazione predefinita, il pacchetto viene denominato [ServiceDefinitionFileName].cspkg
, ma è possibile specificare un nome diverso usando l'opzione /out
di CSPack.
CSPack si trova in
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\
Nota
CSPack.exe (in Windows) è disponibile eseguendo il collegamento del prompt dei comandi di Microsoft Azure installato con l'SDK.
Eseguire il programma CSPack.exe da solo per visualizzare la documentazione su tutti i comandi e le opzioni possibili.
Suggerimento
Eseguire il servizio cloud in locale nell' emulatore di calcolo di Microsoft Azure, usando l'opzione /copyonly. Questa opzione consente di copiare i file binari per l'applicazione in una struttura di directory da cui possono essere eseguiti nell'emulatore di calcolo.
Comando di esempio per creare un pacchetto di un servizio cloud
L'esempio seguente crea un pacchetto dell'applicazione che contiene le informazioni per un ruolo Web. Nel comando vengono specificati il file di definizione del servizio da utilizzare, la directory in cui trovare i file binari e il nome del file del pacchetto.
cspack [DirectoryName]\[ServiceDefinition]
/role:[RoleName];[RoleBinariesDirectory]
/sites:[RoleName];[VirtualPath];[PhysicalPath]
/out:[OutputFileName]
Se l'applicazione contiene sia un ruolo Web che un ruolo di lavoro, viene usato il comando seguente:
cspack [DirectoryName]\[ServiceDefinition]
/out:[OutputFileName]
/role:[RoleName];[RoleBinariesDirectory]
/sites:[RoleName];[VirtualPath];[PhysicalPath]
/role:[RoleName];[RoleBinariesDirectory];[RoleAssemblyName]
Dove le variabili vengono definite come segue:
Variabile | Valore |
---|---|
[DirectoryName] | Sottodirectory della directory radice del progetto contenente il file csdef del progetto Azure. |
[ServiceDefinition] | Nome del file di definizione del servizio. Per impostazione predefinita, il file è denominato ServiceDefinition.csdef. |
[OutputFileName] | Nome del file del pacchetto generato. In genere, questa variabile viene impostata sul nome dell'applicazione. Se non viene specificato alcun nome file, il pacchetto dell'applicazione viene creato con il nome [ApplicationName].cspkg. |
[RoleName] | Nome del ruolo definito nel file di definizione del servizio. |
[RoleBinariesDirectory] | Percorso dei file binari del ruolo. |
[VirtualPath] | Directory fisiche per ogni percorso virtuale definito nella sezione Sites della definizione del servizio. |
[PhysicalPath] | Directory fisiche dei contenuti per ogni percorso virtuale definito nel nodo del sito della definizione del servizio. |
[RoleAssemblyName] | Nome del file binario del ruolo. |
Passaggi successivi
- Esaminare i prerequisiti per la distribuzione di Servizi cloud (supporto "Extended").
- Distribuire un Servizio cloud (supporto "Extended") usando il portale di Azure, PowerShell, un modello o Visual Studio.
- Esaminare le domande frequenti per Servizi cloud di Azure (supporto "Extended").