A função VM para Windows Azure é semelhante às outras funções, pois todas as instâncias de função executadas no Windows Azure são máquinas virtuais que estão executando uma versão do sistema operacional Windows Server. A diferença da função VM é que você cria e gerencia a imagem do servidor. Para fazer isso, você deve criar um VHD de base, instalar os Componentes de Integração do Windows Azure, instalar aplicativos e fazer personalizações, generalizar a imagem e carregá-la no Windows Azure.
Você pode usar tecnologias padrão de criação de imagem do Windows para criar sua imagem personalizada do Windows Server 2008 R2. Por exemplo, é possível usar o Gerenciador do Hyper-V para criar o VHD de base que será carregado no Windows Azure.
Criar o VHD de base
O VHD de base contém o sistema operacional, todas as personalizações do sistema operacional e seus aplicativos. Você pode usar o Gerenciador do Hyper-V para criar o VHD de base. Depois de você criar e preparar a imagem do servidor, o VHD é carregado no Portal de Gerenciamento do Windows Azure.
As informações a seguir podem ajudar você a aprender mais sobre VHDs e imagens de servidor:
Apêndice: Ferramentas e APIs de discos rígidos virtuais
Origens de novas máquinas virtuais
É recomendável colocar o máximo possível no VHD de base. Você pode usar um VHD diferencial para aplicar atualizações e patches limitados. O que é colocado no VHD de base e no VHD diferencial fica totalmente a seu critério. Como o VHD de base e o VHD diferencial devem ser considerados como um conjunto que define a imagem do servidor, você deve manter uma cópia local do VHD de base em um local seguro.
Os Componentes de Integração do Windows Azure devem ser instalados na imagem do servidor para que o VHD de base possa ser carregado no Windows Azure. Os Componentes de Integração do Windows Azure são executados em cada instância da função VM que é criada a partir da imagem do servidor e tratam da integração entre a instância da função VM e o ambiente do Windows Azure.
Os componentes de integração executam tarefas necessárias para integrar o sistema operacional da instância da função VM ao Windows Azure. Eles trabalham com o balanceador de carga para comunicar informações sobre o estado das instâncias. Os componentes também inicializam a máquina virtual instalando certificados e criando diretórios de recursos locais com base nas configurações da definição do serviço.
Habilitar o Connect do Windows Azure para uma função
Com o Connect do Windows Azure, você pode usar uma interface de usuário simples para configurar conexões protegidas por IPsec entre computadores ou máquinas virtuais em sua rede local e instâncias de função em execução no Windows Azure. O protocolo IPsec protege as comunicações por redes IP com o uso de serviços de segurança criptográfica. Para obter mais informações sobre como usar o Connect do Windows Azure, consulte Conectando computadores locais a funções do Windows Azure.
Criar e instalar um adaptador para uma função
Você pode escrever um adaptador que é executado como parte do processo de instalação ou de inicialização do sistema operacional. O diagrama a seguir demonstra o modelo de desenvolvimento do adaptador:
Você tem duas opções para escrever um adaptador:
Você pode escrever um adaptador que é executado durante a fase de especialização. Essa fase da especialização ocorre durante a instalação do sistema operacional, depois que a imagem do servidor é carregada no Windows Azure pela primeira vez ou após a imagem de uma instância ser refeita. Esse estilo de adaptador pode ser criado sem escrever código, usando uma destas duas abordagens: uma execução de script a partir do arquivo de resposta ou um provedor escrito para a Ferramenta de Preparação do Sistema (sysprep). Para obter mais informações, consulte Escrevendo um adaptador que é executado durante a instalação do sistema operacional.
Você pode escrever um adaptador que é um serviço do Windows iniciado automaticamente sempre que o sistema operacional é iniciado. Esse estilo de adaptador pode ser escrito em código gerenciado ou nativo. Ele usa a API de tempo de execução do serviço do Windows Azure para coletar dados dinâmicos do ambiente do Windows Azure. Para obter mais informações, consulte Escrevendo um adaptador que é executado quando o sistema operacional é iniciado.
Por que um adaptador é necessário?
Uma diferença importante entre a implantação de aplicativos do Windows no local e no Windows Azure é que, quando você carrega a imagem do servidor no Windows Azure, as instâncias da função VM criadas a partir dele são executadas em um ambiente dinâmico. Não é possível saber determinadas informações importantes durante a fase de desenvolvimento; por exemplo, qual será o endereço IP das instâncias da função VM ou quantas instâncias serão executadas e como elas poderão ser resolvidas. O processo de desenvolvimento de uma função VM envolve a configuração de instâncias da função VM e do software instalado nelas para execução e comunicação em um ambiente dinâmico.
A imagem do servidor carregada no Windows Azure juntamente com o modelo de serviço é aplicada para criar as instâncias da função VM. Quando uma instância da função VM fica online pela primeira vez, ela deve executar todas as etapas necessárias para se preparar para execução no Windows Azure. Na maioria dos casos, isso significa que ela deve configurar todos os aplicativos de software instalados com informações dinâmicas do ambiente e iniciá-los. Por exemplo, talvez seja necessário gravar os dados coletados do ambiente dinâmico em arquivos de configuração do aplicativo de software.
Se um aplicativo gravar os dados em um diretório de armazenamento local, a instância da função VM também deverá configurar o diretório para ser acessado pelo aplicativo. Quando a imagem do servidor é carregada pela primeira vez para criar a instância da função VM, todos os recursos de armazenamento locais definidos no modelo de serviço são criados como diretórios locais. O diretório local associado a um recurso de armazenamento nomeado é seguro por padrão, ou seja, ele é configurado para ser acessível apenas à conta de administrador. Se o seu aplicativo precisar gravar no diretório, a instância da função VM deverá alterar as permissões do diretório, de forma que ele esteja disponível para contas com menos privilégios.
Escrevendo um adaptador que é executado durante a instalação do sistema operacional
Quando a imagem do servidor é implantada no Windows Azure, ela está em um estado generalizado, que é o resultado da execução da Ferramenta de Preparação do Sistema (sysprep) para preparar a imagem no local. Para que o sistema operacional seja executado na instância da função VM no Windows Azure, ele deve realizar uma fase de especialização como parte de seu processo de instalação. As informações usadas para automatizar essa fase de especialização são armazenadas no arquivo de resposta instalado na raiz da imagem do servidor (c:\unattend.xml) pelos Componentes de Integração do Windows Azure.
Ao personalizar o arquivo de resposta durante a criação da imagem, você pode executar um script que é chamado durante a fase de especialização, após a imagem ser carregada no Windows Azure. Para obter mais informações sobre como personalizar o arquivo de resposta, consulte Kit de Instalação Automatizada do Windows (Windows AIK).
Como alternativa, você pode escrever um provedor de sysprep que será incluído na imagem do servidor. Um provedor de sysprep amplia a ferramenta sysprep para incluir funcionalidades adicionais definidas por você. Os Componentes de Integração do Windows Azure oferecem suporte à ferramenta sysprep, que é usada para executar a fase de especialização que conclui a instalação do Windows quando a instância da função VM é iniciada pela primeira vez. Para obter detalhes sobre como escrever um provedor de sysprep, consulte Guia do Desenvolvedor do Provedor de Preparação do Sistema (Sysprep) para Windows 7.
Um adaptador desse tipo é executado somente durante a primeira sequência de inicialização da instância; ele não é executado quando a instância é reinicializada. Uma restrição desse estilo de adaptador é que ele não consegue responder às mudanças nas definições de configuração do serviço automaticamente. Se as alterações nas definições de configuração tiverem de ser aplicadas pelo adaptador à instância, o operador deverá refazer a imagem da instância manualmente para executar o adaptador e aplicar as novas configurações. Se o seu aplicativo depende das definições de configuração que podem ser alteradas durante o tempo de vida da imagem do servidor, considere escrever o adaptador como um serviço do Windows.
Escrevendo um adaptador que é executado quando o sistema operacional é iniciado
Você pode escrever um adaptador como um serviço do Windows que é iniciado automaticamente quando o Windows é iniciado e que usa a API de tempo de execução de serviço do Windows Azure para coletar dados dinâmicos do Windows Azure. Talvez seja necessário escrever um serviço do Windows se você precisar de informações de endereço de rede para a instância da função VM atual ou para outras instâncias de função em execução em seu serviço, se você precisar gravar em um recurso de armazenamento local ou se você precisar ler definições de configuração do serviço em tempo de execução ou responder quando elas forem alteradas.
O serviço do Windows deve ser um processo do Windows de 64 bits para poder usar a API de tempo de execução de serviço. Ele pode ser escrito em código gerenciado ou em código nativo. Consulte a Windows Azure Managed Library Reference e a Windows Azure Native Library Reference para obter informações sobre API.
É possível chamar a API de tempo de execução de serviço apenas a partir de um processo que esteja em execução em uma conta de administrador ou LocalSystem. Essa restrição garante que o serviço seja seguro por padrão, eliminando o risco de um processo com poucos privilégios usar a API de tempo de execução de serviço para ler as definições de configuração do serviço.
O seu serviço do Windows deve ser configurados para iniciar automaticamente quando o Windows for iniciado. Ele deve implementar os métodos de ciclo de vida da classe ServiceBase, incluindo OnStart e, se uma sequência de desligamento for necessária, OnStop ou OnShutdown. O código de inicialização deve ser concluído até o retorno do método OnStart. Todas as sequências de desligamento exigidas pelo serviço do Windows devem ser concluídas até o retorno de OnStop ou OnShutdown. Para obter mais informações sobre como escrever serviços do Windows, consulte Aplicativos de serviço do Windows.
Após todos os serviços de início automático serem iniciados, incluindo o seu adaptador, o Windows Azure reconhece que a instância está pronta para receber o tráfego do balanceador de carga. Por esse motivo, é importante assegurar que o adaptador tenha executado todas as tarefas necessárias para preparar a instância da função VM e para todos os softwares que ele esteja executando até a conclusão do método OnStart. A instância da função VM deve estar em um estado pronto desde a conclusão da sequência de inicialização até o início da sequência de desligamento, a menos que você retire a instância explicitamente da rotação definindo seu status como Busy. Faça isso adicionando um manipulador de eventos ao evento StatusCheck. Quando o evento é acionado, o método SetBusy pode ser chamado no objeto de argumento do evento. Você também pode usar o cmdlet do PowerShell Set-RoleInstanceStatus para alterar o status da instância da função VM.
Depois de instalar os Componentes de Integração do Windows Azure, você deve instalar seus aplicativos e fazer todas as alterações de configuração do sistema operacional necessárias, opcionalmente instalar o Agente do Connect do Windows Azure, opcionalmente criar e instalar um adaptador e, em seguida, preparar a imagem a ser carregada.
Preparar a imagem de servidor a ser carregada
Para que o VHD seja carregado corretamente no Windows Azure, a imagem de servidor deve ser generalizada usando o comando Sysprep. Para obter mais informações sobre como usar o Sysprep, consulte Como usar o Sysprep: Uma introdução. Para obter mais informações sobre como carregar o VHD, consulte Carregar um VHD para uma função VM no Windows Azure.