Cos'è il modello del servizio cloud e come è possibile crearne il pacchetto?What is the Cloud Service model and how do I package it?

Un servizio cloud viene creato da tre componenti: la definizione del servizio (.csdef), la configurazione del servizio (.cscfg) e un pacchetto servizio (.cspkg).A cloud service is created from three components, the service definition (.csdef), the service config (.cscfg), and a service package (.cspkg). Entrambi i file ServiceDefinition.csdef e ServiceConfig.cscfg sono basati su XML e descrivono la struttura e la configurazione del servizio cloud. Insieme costituiscono il modello.Both the ServiceDefinition.csdef and ServiceConfig.cscfg files are XML-based and describe the structure of the cloud service and how it's configured; collectively called the model. ServicePackage.cspkg è un file ZIP generato da ServiceDefinition.csdef e contiene, oltre ad altri elementi, tutte le dipendenze necessarie basate su file binari.The ServicePackage.cspkg is a zip file that is generated from the ServiceDefinition.csdef and among other things, contains all the required binary-based dependencies. Azure crea un servizio cloud sia da ServicePackage.cspkg che da ServiceConfig.cscfg.Azure creates a cloud service from both the ServicePackage.cspkg and the ServiceConfig.cscfg.

Una volta che il servizio cloud è in esecuzione in Azure, è possibile riconfigurarlo tramite il file ServiceConfig.cscfg , ma non è possibile modificare la definizione.Once the cloud service is running in Azure, you can reconfigure it through the ServiceConfig.cscfg file, but you cannot alter the definition.

Quali altre informazioni sono necessarie?What would you like to know more about?

ServiceDefinition.csdefServiceDefinition.csdef

Il file ServiceDefinition.csdef specifica le impostazioni usate da Azure per configurare un servizio cloud.The ServiceDefinition.csdef file specifies the settings that are used by Azure to configure a cloud service. Lo schema di definizione dei servizi di Azure (file .csdef) fornisce il formato consentito per un file di definizione del servizio.The Azure Service Definition Schema (.csdef File) provides the allowable format for a service definition file. L'esempio seguente mostra le impostazioni che possono essere definite per i ruoli Web e di lavoro:The following example shows the settings that can be defined for the Web and Worker roles:

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

È possibile fare riferimento allo schema di definizione dei servizi per comprendere meglio lo schema XML usato qui, ma viene indicata anche una breve spiegazione di alcuni elementi:You can refer to the Service Definition Schema for a better understanding of the XML schema used here, however, here is a quick explanation of some of the elements:

SitesSites
Contiene le definizioni per i siti Web o per le applicazioni Web ospitate in IIS7.Contains the definitions for websites or web applications that are hosted in IIS7.

InputEndpointsInputEndpoints
Contiene le definizioni per gli endpoint usati per contattare il servizio cloud.Contains the definitions for endpoints that are used to contact the cloud service.

InternalEndpointsInternalEndpoints
Contiene le definizioni per gli endpoint usati dalle istanze del ruolo per comunicare tra loro.Contains the definitions for endpoints that are used by role instances to communicate with each other.

ConfigurationSettingsConfigurationSettings
Contiene le definizioni delle impostazioni per le funzionalità di un ruolo specifico.Contains the setting definitions for features of a specific role.

CertificatesCertificates
Contiene le definizioni dei certificati necessari per un ruolo.Contains the definitions for certificates that are needed for a role. L'esempio di codice precedente mostra un certificato usato per la configurazione di Azure Connect.The previous code example shows a certificate that is used for the configuration of Azure Connect.

LocalResourcesLocalResources
Contiene le definizioni per le risorse di archiviazione locale.Contains the definitions for local storage resources. Una risorsa di archiviazione locale è una directory riservata nel file system della macchina virtuale in cui è in esecuzione un'istanza di un ruolo.A local storage resource is a reserved directory on the file system of the virtual machine in which an instance of a role is running.

ImportsImports
Contiene le definizioni per i moduli importati.Contains the definitions for imported modules. L'esempio di codice precedente mostra i moduli per la connessione Desktop remoto e Azure Connect.The previous code example shows the modules for Remote Desktop Connection and Azure Connect.

StartupStartup
Contiene le attività eseguite all'avvio del ruolo.Contains tasks that are run when the role starts. Le attività vengono definite in un file eseguibile o con estensione cmd.The tasks are defined in a .cmd or executable file.

ServiceConfiguration.cscfgServiceConfiguration.cscfg

La configurazione delle impostazioni per il servizio cloud è determinata dai valori nel file ServiceConfiguration.cscfg .The configuration of the settings for your cloud service is determined by the values in the ServiceConfiguration.cscfg file. Si specifica il numero di istanze che si vuole distribuire per ogni ruolo in questo file.You specify the number of instances that you want to deploy for each role in this file. I valori per le impostazioni di configurazione definite nel file di definizione del servizio vengono aggiunti al file di configurazione del servizio.The values for the configuration settings that you defined in the service definition file are added to the service configuration file. Vengono aggiunte al file anche le identificazioni personali per eventuali certificati di gestione associati al servizio cloud.The thumbprints for any management certificates that are associated with the cloud service are also added to the file. Lo schema di configurazione dei servizi di Azure (file .cscfg) fornisce il formato consentito per un file di configurazione del servizio.The Azure Service Configuration Schema (.cscfg File) provides the allowable format for a service configuration file.

Il file di configurazione del servizio non viene incluso nel pacchetto con l'applicazione, ma viene caricato in Azure come file separato e viene usato per configurare il servizio cloud.The service configuration file is not packaged with the application, but is uploaded to Azure as a separate file and is used to configure the cloud service. È possibile caricare un nuovo file di configurazione del servizio senza ridistribuire il servizio cloud.You can upload a new service configuration file without redeploying your cloud service. I valori di configurazione per il servizio cloud possono essere modificati mentre il servizio cloud è in esecuzione.The configuration values for the cloud service can be changed while the cloud service is running. L'esempio seguente mostra le impostazioni di configurazione che possono essere definite per i ruoli Web e di lavoro:The following example shows the configuration settings that can be defined for the Web and Worker roles:

<?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 dei servizi per comprendere meglio lo schema XML usato qui, ma ecco anche una rapida spiegazione degli elementi:You can refer to the Service Configuration Schema for better understanding the XML schema used here, however, here is a quick explanation of the elements:

InstancesInstances
Configura il numero di istanze in esecuzione per il ruolo.Configures the number of running instances for the role. Per evitare che il servizio cloud diventi potenzialmente non disponibile durante gli aggiornamenti, è consigliabile distribuire più istanze dei ruoli esposti al Web.To prevent your cloud service from potentially becoming unavailable during upgrades, it is recommended that you deploy more than one instance of your web-facing roles. In questo modo si rispettano le linee guida del contratto di servizio (SLA, Service Level Agreement) per il servizio di calcolo di Azure, che garantisce una connettività esterna pari al 99,95% per i ruoli esposti a Internet quando due o più istanze dei ruoli vengono distribuite per un servizio.By deploying more than one instance, you are adhering to the guidelines in the Azure Compute Service Level Agreement (SLA), which guarantees 99.95% external connectivity for Internet-facing roles when two or more role instances are deployed for a service.

ConfigurationSettingsConfigurationSettings
Configura le impostazioni per le istanze in esecuzione di un ruolo.Configures the settings for the running instances for a role. Il nome degli elementi <Setting> deve corrispondere alle definizioni delle impostazioni nel file di definizione del servizio.The name of the <Setting> elements must match the setting definitions in the service definition file.

CertificatesCertificates
Configura i certificati usati dal servizio.Configures the certificates that are used by the service. L'esempio di codice precedente mostra come definire il certificato per il modulo RemoteAccess.The previous code example shows how to define the certificate for the RemoteAccess module. Il valore dell'attributo thumbprint deve essere impostato sull'identificazione personale del certificato da usare.The value of the thumbprint attribute must be set to the thumbprint of the certificate to use.

Nota

L'identificazione personale del certificato può essere aggiunta al file di configurazione usando un editor di testo.The thumbprint for the certificate can be added to the configuration file by using a text editor. In alternativa, il valore può essere aggiunto nella scheda Certificati della pagina Proprietà relativa la ruolo in Visual Studio.Or, the value can be added on the Certificates tab of the Properties page of the role in Visual Studio.

Definizione delle porte per le istanze del ruoloDefining ports for role instances

Azure consente solo un punto di ingresso a un ruolo Web.Azure allows only one entry point to a web role. Ciò significa che tutto il traffico viene gestito tramite un solo indirizzo IP.Meaning that all traffic occurs through one IP address. È possibile configurare la condivisione di una porta per i siti Web configurando l'intestazione host in modo da indirizzare la richiesta al percorso corretto.You can configure your websites to share a port by configuring the host header to direct the request to the correct location. Si possono anche configurare le applicazioni in modo che siano in ascolto di porte note sull'indirizzo IP.You can also configure your applications to listen to well-known ports on the IP address.

L'esempio seguente illustra la configurazione di un ruolo Web con un sito Web e un'applicazione Web.The following sample shows the configuration for a web role with a website and web application. 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".The website is configured as the default entry location on port 80, and the web applications are configured to receive requests from an alternate host header that is called “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 ruoloChanging the configuration of a role

È possibile aggiornare la configurazione del servizio cloud mentre è in esecuzione in Azure, senza portare il servizio offline.You can update the configuration of your cloud service while it is running in Azure, without taking the service 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.To change configuration information, you can either upload a new configuration file, or edit the configuration file in place and apply it to your running service. Alla configurazione di un servizio possono essere apportate le seguenti modifiche:The following changes can be made to the configuration of a service:

  • Modifica dei valori delle impostazioni di configurazioneChanging the values of configuration settings
    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.When a configuration setting changes, a role instance can choose to apply the change while the instance is online, or to recycle the instance gracefully and apply the change while the instance is offline.
  • Modifica della topologia del servizio delle istanze del ruoloChanging the service topology of role instances
    Le modifiche di topologia non influiscono sulle istanze in esecuzione, a eccezione del caso di rimozione di un'istanza.Topology changes do not affect running instances, except where an instance is being removed. Non è in genere necessario riciclare tutte le istanze rimanenti; tuttavia, è possibile scegliere di riciclare le istanze del ruolo in risposta a una modifica di topologia.All remaining instances generally do not need to be recycled; however, you can choose to recycle role instances in response to a topology change.
  • Modifica dell'identificazione personale del certificatoChanging the certificate thumbprint
    È possibile aggiornare un certificato solo quando un'istanza del ruolo è offline.You can only update a certificate when a role instance is offline. Se un certificato viene aggiunto, eliminato o modificato mentre un'istanza del ruolo è online, in Azure l'istanza viene portata offline normalmente per aggiornare il certificato e riportata online dopo il completamento della modifica.If a certificate is added, deleted, or changed while a role instance is online, Azure gracefully takes the instance offline to update the certificate and bring it back online after the change is complete.

Gestione delle modifiche di configurazione con gli eventi di runtime del servizioHandling configuration changes with Service Runtime Events

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.The Azure Runtime Library includes the Microsoft.WindowsAzure.ServiceRuntime namespace, which provides classes for interacting with the Azure environment from a role. La classe RoleEnvironment definisce gli eventi seguenti generati prima e dopo una modifica di configurazione:The RoleEnvironment class defines the following events that are raised before and after a configuration change:

  • Evento ChangingChanging event
    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.This occurs before the configuration change is applied to a specified instance of a role giving you a chance to take down the role instances if necessary.
  • Evento ChangedChanged event
    Si verifica dopo che la modifica della configurazione è stata applicata a un'istanza specificata di un ruolo.Occurs after the configuration change is applied to a specified instance of a role.

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.Because certificate changes always take the instances of a role offline, they do not raise the RoleEnvironment.Changing or RoleEnvironment.Changed events.

ServicePackage.cspkgServicePackage.cspkg

Per distribuire un'applicazione come servizio cloud in Azure, è necessario prima creare un pacchetto dell'applicazione nel formato appropriato.To deploy an application as a cloud service in Azure, you must first package the application in the appropriate format. È possibile usare lo strumento da riga di comando CSPack (installato con Azure SDK) per creare il file del pacchetto come alternativa a Visual Studio.You can use the CSPack command-line tool (installed with the Azure SDK) to create the package file as an alternative to 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 uses the contents of the service definition file and service configuration file to define the contents of the package. CSPack genera un file del pacchetto dell’applicazione (con estensione .cspkg) che è possibile caricare su Azure utilizzando il portale di Azure.CSPack generates an application package file (.cspkg) that you can upload to Azure by using the Azure portal. Per impostazione predefinita, il pacchetto viene denominato [ServiceDefinitionFileName].cspkg, ma è possibile specificare un nome diverso usando l'opzione /out di CSPack.By default, the package is named [ServiceDefinitionFileName].cspkg, but you can specify a different name by using the /out option of CSPack.

CSPack si trova inCSPack is located at
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.CSPack.exe (on windows) is available by running the Microsoft Azure Command Prompt shortcut that is installed with the SDK.

Eseguire il programma CSPack.exe da solo per visualizzare la documentazione su tutti i comandi e le opzioni possibili.Run the CSPack.exe program by itself to see documentation about all the possible switches and commands.

Suggerimento

Eseguire il servizio cloud in locale nell' emulatore di calcolo di Microsoft Azure, usando l'opzione /copyonly.Run your cloud service locally in the Microsoft Azure Compute Emulator, use the /copyonly option. 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.This option copies the binary files for the application to a directory layout from which they can be run in the compute emulator.

Comando di esempio per creare un pacchetto di un servizio cloudExample command to package a cloud service

L'esempio seguente crea un pacchetto dell'applicazione che contiene le informazioni per un ruolo Web.The following example creates an application package that contains the information for a web role. 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.The command specifies the service definition file to use, the directory where binary files can be found, and the name of the package file.

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:If the application contains both a web role and a worker role, the following command is used:

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

Dove le variabili vengono definite come segue:Where the variables are defined as follows:

VariabileVariable ValoreValue
[DirectoryName][DirectoryName] Sottodirectory della directory radice del progetto contenente il file csdef del progetto Azure.The subdirectory under the root project directory that contains the .csdef file of the Azure project.
[ServiceDefinition][ServiceDefinition] Nome del file di definizione del servizio.The name of the service definition file. Per impostazione predefinita, il file è denominato ServiceDefinition.csdef.By default, this file is named ServiceDefinition.csdef.
[OutputFileName][OutputFileName] Nome del file del pacchetto generato.The name for the generated package file. Viene in genere impostato sul nome dell'applicazione.Typically, this is set to the name of the application. Se non viene specificato alcun nome file, il pacchetto dell'applicazione viene creato con il nome [ApplicationName].cspkg.If no file name is specified, the application package is created as [ApplicationName].cspkg.
[RoleName][RoleName] Nome del ruolo definito nel file di definizione del servizio.The name of the role as defined in the service definition file.
[RoleBinariesDirectory][RoleBinariesDirectory] Percorso dei file binari del ruolo.The location of the binary files for the role.
[VirtualPath][VirtualPath] Directory fisiche per ogni percorso virtuale definito nella sezione Sites della definizione del servizio.The physical directories for each virtual path defined in the Sites section of the service definition.
[PhysicalPath][PhysicalPath] Directory fisiche dei contenuti per ogni percorso virtuale definito nel nodo del sito della definizione del servizio.The physical directories of the contents for each virtual path defined in the site node of the service definition.
[RoleAssemblyName][RoleAssemblyName] Nome del file binario del ruolo.The name of the binary file for the role.

Passaggi successiviNext steps

Si sta creando un pacchetto del servizio cloud e si vuole...I'm creating a cloud service package and I want to...

Si sta usando Visual Studio e si vuole...I am using Visual Studio and I want to...