Qual é o modelo do Serviço Cloud (clássico) e como o empacoto?

Importante

Serviços Cloud (clássico) é agora preterido para novos clientes e será descontinuado a 31 de agosto de 2024 para todos os clientes. As novas implementações devem utilizar o novo modelo de implementação baseado em Resource Manager do Azure Serviços Cloud (suporte alargado).

Um serviço cloud é criado a partir de três componentes, a definição de serviço (.csdef), a configuração do serviço (.cscfg) e um pacote de serviço (.cspkg). Os ficheiros ServiceDefinition.csdef e ServiceConfig.cscfg são baseados em XML e descrevem a estrutura do serviço cloud e como está configurado; coletivamente chamado modelo. O ServicePackage.cspkg é um ficheiro zip gerado a partir do ServiceDefinition.csdef e, entre outras coisas, contém todas as dependências binárias necessárias. O Azure cria um serviço cloud a partir do ServicePackage.cspkg e do ServiceConfig.cscfg.

Assim que o serviço cloud estiver em execução no Azure, pode reconfigurá-lo através do ficheiro ServiceConfig.cscfg , mas não pode alterar a definição.

O que gostaria de saber mais?

ServiceDefinition.csdef

O ficheiro ServiceDefinition.csdef especifica as definições que são utilizadas pelo Azure para configurar um serviço cloud. O Esquema de Definição de Serviço do Azure (Ficheiro.csdef) fornece o formato permitido para um ficheiro de definição de serviço. O exemplo seguinte mostra as definições que podem ser definidas para as funções Web e De trabalho:

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

Pode consultar o Esquema de Definição de Serviço para obter uma melhor compreensão do esquema XML utilizado aqui, no entanto, eis uma explicação rápida de alguns dos elementos:

Sites
Contém as definições para sites ou aplicações Web que estão alojadas no IIS7.

InputEndpoints
Contém as definições para pontos finais que são utilizados para contactar o serviço cloud.

InternalEndpoints
Contém as definições para pontos finais que são utilizados pelas instâncias de função para comunicar entre si.

ConfigurationSettings
Contém as definições de definições para funcionalidades de uma função específica.

Certificados
Contém as definições para certificados necessários para uma função. O exemplo de código anterior mostra um certificado que é utilizado para a configuração do Azure Connect.

LocalResources
Contém as definições dos recursos de armazenamento local. Um recurso de armazenamento local é um diretório reservado no sistema de ficheiros da máquina virtual em que uma instância de uma função está em execução.

Importações
Contém as definições para módulos importados. O exemplo de código anterior mostra os módulos da Ligação ao Ambiente de Trabalho Remoto e do Azure Connect.

Arranque
Contém tarefas que são executadas quando a função é iniciada. As tarefas são definidas num ficheiro .cmd ou executável.

ServiceConfiguration.cscfg

A configuração das definições do serviço cloud é determinada pelos valores no ficheiro ServiceConfiguration.cscfg . Especifique o número de instâncias que pretende implementar para cada função neste ficheiro. Os valores das definições de configuração que definiu no ficheiro de definição de serviço são adicionados ao ficheiro de configuração do serviço. Os thumbprints para quaisquer certificados de gestão associados ao serviço cloud também são adicionados ao ficheiro. O Esquema de Configuração do Serviço do Azure (Ficheiro.cscfg) fornece o formato permitido para um ficheiro de configuração de serviço.

O ficheiro de configuração do serviço não está empacotado com a aplicação, mas é carregado para o Azure como um ficheiro separado e é utilizado para configurar o serviço cloud. Pode carregar um novo ficheiro de configuração do serviço sem reimplementar o serviço cloud. Os valores de configuração do serviço cloud podem ser alterados enquanto o serviço cloud está em execução. O exemplo seguinte mostra as definições de configuração que podem ser definidas para as funções Web e De trabalho:

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

Pode consultar o Esquema de Configuração do Serviço para compreender melhor o esquema XML utilizado aqui, no entanto, eis uma explicação rápida dos elementos:

de Instâncias
Configura o número de instâncias em execução para a função. Para impedir que o seu serviço cloud fique potencialmente indisponível durante as atualizações, recomenda-se que implemente mais do que uma instância das suas funções com acesso à Web. Ao implementar mais do que uma instância, está a aderir às diretrizes no Contrato de Nível de Serviço de Computação (SLA) do Azure, que garante uma conectividade externa de 99,95% para funções com acesso à Internet quando são implementadas duas ou mais instâncias de função para um serviço.

ConfigurationSettings
Configura as definições das instâncias em execução para uma função. O nome dos <Setting> elementos tem de corresponder às definições de definição no ficheiro de definição de serviço.

Certificados
Configura os certificados que são utilizados pelo serviço. O exemplo de código anterior mostra como definir o certificado para o módulo RemoteAccess. O valor do atributo thumbprint tem de ser definido como o thumbprint do certificado a utilizar.

Nota

O thumbprint do certificado pode ser adicionado ao ficheiro de configuração com um editor de texto. Em alternativa, o valor pode ser adicionado no separador Certificados da página Propriedades da função no Visual Studio.

Definir portas para instâncias de função

O Azure permite apenas um ponto de entrada para uma função Web. O que significa que todo o tráfego ocorre através de um endereço IP. Pode configurar os sites para partilhar uma porta ao configurar o cabeçalho do anfitrião para direcionar o pedido para a localização correta. Também pode configurar as suas aplicações para ouvir portas conhecidas no endereço IP.

O exemplo seguinte mostra a configuração de uma função Web com um site e uma aplicação Web. O site está configurado como a localização de entrada predefinida na porta 80 e as aplicações Web estão configuradas para receber pedidos de um cabeçalho de anfitrião alternativo denominado "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>

Alterar a configuração de uma função

Pode atualizar a configuração do seu serviço cloud enquanto este está em execução no Azure, sem colocar o serviço offline. Para alterar as informações de configuração, pode carregar um novo ficheiro de configuração ou editar o ficheiro de configuração e aplicá-lo ao seu serviço em execução. Podem ser efetuadas as seguintes alterações à configuração de um serviço:

  • Alterar os valores das definições de configuração
    Quando uma definição de configuração é alterada, uma instância de função pode optar por aplicar a alteração enquanto a instância estiver online ou reciclar a instância corretamente e aplicar a alteração enquanto a instância estiver offline.
  • Alterar a topologia de serviço das instâncias de função
    As alterações de topologia não afetam a execução de instâncias, exceto quando uma instância está a ser removida. Geralmente, todas as instâncias restantes não precisam de ser recicladas; no entanto, pode optar por reciclar instâncias de função em resposta a uma alteração de topologia.
  • Alterar o thumbprint do certificado
    Só pode atualizar um certificado quando uma instância de função estiver offline. Se um certificado for adicionado, eliminado ou alterado enquanto uma instância de função estiver online, o Azure leva a instância corretamente offline para atualizar o certificado e colocá-lo novamente online após a conclusão da alteração.

Processar alterações de configuração com Eventos do Service Runtime

A Biblioteca de Runtime do Azure inclui o espaço de nomes Microsoft.WindowsAzure.ServiceRuntime , que fornece classes para interagir com o ambiente do Azure a partir de uma função. A classe RoleEnvironment define os seguintes eventos que são gerados antes e depois de uma alteração de configuração:

  • Alterar evento
    Isto ocorre antes de a alteração de configuração ser aplicada a uma instância especificada de uma função, dando-lhe a oportunidade de eliminar as instâncias de função, se necessário.
  • Evento alterado
    Ocorre após a alteração de configuração ser aplicada a uma instância especificada de uma função.

Nota

Uma vez que as alterações de certificado levam sempre as instâncias de uma função offline, não aumentam os eventos RoleEnvironment.Changing ou RoleEnvironment.Changed.

ServicePackage.cspkg

Nota

O tamanho máximo do pacote que pode ser implementado é de 600 MB

Para implementar uma aplicação como um serviço cloud no Azure, primeiro tem de empacotar a aplicação no formato adequado. Pode utilizar a ferramenta de linha de comandos CSPack (instalada com o SDK do Azure) para criar o ficheiro de pacote como alternativa ao Visual Studio.

O CSPack utiliza o conteúdo do ficheiro de definição de serviço e do ficheiro de configuração do serviço para definir o conteúdo do pacote. O CSPack gera um ficheiro de pacote de aplicação (.cspkg) que pode carregar para o Azure com o portal do Azure. Por predefinição, o pacote tem o nome [ServiceDefinitionFileName].cspkg, mas pode especificar um nome diferente com a opção /outCSPack.

O CSPack está localizado em
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

Nota

CSPack.exe (no windows) está disponível ao executar o atalho da Linha de Comandos do Microsoft Azure que está instalado com o SDK.

Execute o programa CSPack.exe por si só para ver a documentação sobre todos os comutadores e comandos possíveis.

Dica

Execute o seu serviço cloud localmente no Emulador de Computação do Microsoft Azure, utilize a opção /copyonly . Esta opção copia os ficheiros binários da aplicação para um esquema de diretório a partir do qual podem ser executados no emulador de computação.

Comando de exemplo para empacotar um serviço cloud

O exemplo seguinte cria um pacote de aplicação que contém as informações de uma função Web. O comando especifica o ficheiro de definição de serviço a utilizar, o diretório onde os ficheiros binários podem ser encontrados e o nome do ficheiro de pacote.

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

Se a aplicação contiver uma função Web e uma função de trabalho, é utilizado o seguinte comando:

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

Onde as variáveis são definidas da seguinte forma:

Variável Valor
[DirectoryName] O subdiretório no diretório de projeto de raiz que contém o ficheiro .csdef do projeto do Azure.
[ServiceDefinition] O nome do ficheiro de definição de serviço. Por predefinição, este ficheiro tem o nome ServiceDefinition.csdef.
[OutputFileName] O nome do ficheiro de pacote gerado. Normalmente, está definido como o nome da aplicação. Se não for especificado nenhum nome de ficheiro, o pacote de aplicação é criado como [ApplicationName].cspkg.
[RoleName] O nome da função, conforme definido no ficheiro de definição de serviço.
[RoleBinariesDirectory] A localização dos ficheiros binários para a função.
[VirtualPath] Os diretórios físicos para cada caminho virtual definido na secção Sites da definição do serviço.
[PhysicalPath] Os diretórios físicos dos conteúdos para cada caminho virtual definido no nó do site da definição do serviço.
[RoleAssemblyName] O nome do ficheiro binário da função.

Passos seguintes

Estou a criar um pacote de serviço cloud e quero...

Estou a utilizar o Visual Studio e quero...