Visual Studio 2012 Team Foundation Server no Windows Azure


Resolvi montar um ambiente de laboratório no Windows Azure equivalente ao que costumo utilizar para fazer testes e demonstrações do Visual Studio ALM, aproveitando para conhecer os eventuais problemas inerentes a utilização de um ambiente de trabalho diferente.

Vale lembrar que o Visual Studio ALM possui uma oferta online já em produção atualmente, o Team Foundation Service, mas que ainda apresenta fortes restrições de uso, como o baixo número de usuários possíveis por projeto, e a ausência de alguns recursos, como a integração com o SharePoint, o que deixa a oferta semelhante à versão Express do Team Foundation Server. Em virtude disso, ainda há bastante espaço para utilização da versão tradicional do produto.

Neste laboratório, o Windows Azure foi utilizado como IaaS, ou Infrastructure as a Service, com uso dos serviços de Virtual Machines, Virtual Networks e Storage. É importante ressaltar que a Microsoft ainda classifica estes recursos como versões em Preview, mas que já estão disponíveis desta forma há um certo tempo.

Eu utilizei as últimas versões dos produtos e suas atualizações. Além dos produtos oferecidos pelo Azure, foram utilizados o SQL Server 2012 Service Pack 1, SharePoint e Project Server 2013, e o Visual Studio 2012 Team Foundation Server Update 1. O sistema operacional selecionado, oferecido como uma imagem pelo Windows Azure, foi o Windows Server 2012 Datacenter Edition, imagem de dezembro de 2012.

Para montar um laboratório complexo o suficiente para tornar a avaliação do Windows Azure interessante, eu optei por um cenário distribuído, com a utilização das quatro máquinas virtuais listadas aqui:

Máquina Virtual Softwares Tamanho da máquina virtual
AD Windows Server 2012Active Directory Domain Services Small2 discos
SQL Windows Server 2012SQL Server 2012 Service Pack 1 Medium2 discos
SPS Windows Server 2012SharePoint Server 2013

Project Server 2013

Large2 discos
TFS Windows Server 2012Visual Studio 2012 Team Foundation Server Update 1 Small1 disco

 

Trabalhar com o Windows Azure é uma experiência bastante interessante, visto que o seu Portal oferece os recursos administrativos necessários para a operação do ambiente, e ainda permite a utilização de scripts PowerShell ou outras linguagens de programação para automação de tarefas administrativas.

Um dos meus objetivos neste estudo era o de evitar ao máximo o uso de scripts, me restringindo aos recursos oferecidos pelo Portal de Gerenciamento, visto que acredito ser esta a maneira pela qual a grande maioria das pessoas começará a utilizar o produto. Achei interessante notar que a maior parte das informações que encontrei para a preparação do ambiente apresentavam logo de cara scripts PowerShell, indo no caminho oposto, mas posso adiantar que foi possível cumprir o meu objetivo.

A preparação do ambiente com as quatro máquinas virtuais exigiu a utilização do recurso de Virtual Network, que contempla a criação de uma subrede IPv4, um serviço de fornecimento de endereços IPs dinâmicos, como um DHCP, com reserva de endereços para cada máquina, e roteamento de rede. O principal objetivo deste recurso é permitir a comunicação entres as máquinas virtuais, como se elas estivessem em rede local, além de permitir o estabelecimento de VPNs site-to-site, para comunicação com a rede de uma empresa.

Outro item importante é a criação do Storage onde os arquivos VHD, que correspondem aos discos das máquinas virtuais, ficam armazenados.

 

Preparação do ambiente

Vou apresentar a seguinte a sequência de montagem do ambiente. A sequência considera o uso de uma conta do Windows Azure, disponível em www.windowsazure.com, inclusive com a oferta de avaliação gratuita.

Os passos de configuração do Windows Azure assumem o uso do Portal de Gerenciamento, acessível no endereço https://manage.windowsazure.com/.

 

Virtual Network

O Windows Azure não permite que o as máquinas virtuais trabalhem com endereços de IP fixos, mas para a criação de um servidor que forneça o serviço de domínio, é necessário que ele ofereça também o serviço de DNS, o que é bastante contraditório. E como fazer para os servidores consigam se comunicar?

O Virtual Network é o recurso que possibilita resolver estes e outros problemas, e onde a diferença de se trabalhar com o Windows Azure se torna mais evidente.

Sempre que se deseja estabelecer a comunicação entre máquinas virtuais no Windows Azure, é necessário configurar o recurso.

Com o Virtual Network, estabelece-se um espaço de endereçamento reservado, com uso das faixas de endereço tradicionalmente reservadas para redes internas, ou seja, as faixas 10.x.x.x, 172.16.x.x e 192.168.x.x. Estas faixas de endereçamento podem ser divididas em subredes.

Toda máquina virtual no Windows Azure pode ser associada a uma subrede, e a partir dessa associação um endereço IP é atribuído, sendo alterado apenas se as configurações mudarem. Sempre que uma máquina virtual associada a um Virtual Network é ligada, ela recebe o mesmo endereço IP, e este endereço pode ser consultado na página de configuração da máquina virtual.

Como a atribuição de endereços é automática, realizada pelo Virtual Network, o endereço do servidor DNS também precisa ser atribuído, ou a máquina virtual não conseguirá resolver endereços por nome.

Para isso o Virtual Network permite o cadastro de servidores DNS, que são atribuídos às máquinas virtuais junto com os endereços IP.

Como o Virtual Network fornece sempre o mesmo endereço IP e também entrega o endereço do servidor DNS, os problemas de endereçamento estão quase todos resolvidos, exceto por um problema para o cenário deste laboratório.

As configurações do Virtual Network não podem ser alteradas depois de uma máquina virtual estar associada, então, se o servidor DNS será uma das máquinas virtuais associadas à Virtual Network, como saber qual será o endereço dele?

Eu percebi que os endereços atribuídos às máquinas virtuais são sempre sequenciais, e sempre começam recebendo o quarto endereço útil da subrede.

Por exemplo, eu configurei o meu Virtual Network com a faixa de endereços de 192.168.0.0 a 192.168.255.255, e uma subrede com endereços de 192.168.0.0 a 192.168.0.255.

Com estas configurações, a primeira máquina virtual associada ao Virtual Network sempre recebeu o endereço 192.168.0.4.

A partir desta percepção, eu configurei o meu Virtual Network com o endereço de DNS 192.168.0.4, e fiz com que a primeira máquina virtual fosse o meu servidor AD e DNS, resolvendo a questão.

Um outro aspecto importante do Virtual Network é o fato dele delimitar a região geográfica onde os servidores estarão. Todas as máquinas virtuais associadas ao Virtual Network precisam estar fisicamente na mesma região.

 

Configuração do Virtual Network

Os passos para criar o Virtual Network são:

1. No portal de gerenciamento, navegar por New -> Networks -> Virtual Network -> Custom Create

1.1. Virtual Network Details

1.1.1. Name: Fornecer o nome do Virtual Network

1.1.2. Affinity Group: Selecione um existente ou crie um novo

1.1.3. Region: Caso se esteja criando um novo Affinity Group, deve-se escolher a região. Percebi que algumas regiões não oferecem todas as imagens de máquinas virtuais, principalmente as mais recentes. As regiões East US e West US, por exemplo, fornecem todas, enquanto South Central US e North Central US não

1.1.4. Affinity Group Name: Forneça um nome para o Affinity Group e a Region, vale a pena montar um nome que indique a região, além do seu objetivo

 

1.2. Address Space and Subnets

1.2.1. Address Space: Escolha a faixa de endereços da sua rede virtual (10.x.x.x, 172.16.x.x ou 192.168.x.x)

1.2.2. Subnet: As subredes definem as faixas efetivamente utilizadas. É possível configurar mais de um Address Space e várias subnets para cada Virtual Network

 

2. Registrar DNS Server

2.1. Navegar por New -> Networks -> Virtual Network -> Register DNS Server

2.1.1. Name: Pode ser o nome da máquina virtual que hospedará o Active Directory, a ser criado na sequência

2.1.2. DNS Server IP Address: Escolha o quarto endereço útil da subrede, por exemplo 192.168.0.4, caso a subrede comece com o endereço 192.168.0.0

 

3. Associar o DNS Server registrado ao Virtual Network

3.1. No portal de gerenciamento, clique em Networks na lateral esquerda, e em seguida procure na lista o Virtual Network que acabou de ser criado. Clique na seta para a direita ao lado do nome

3.2. Você estará no Dashboard do Virtual Network, como pode ser visto no alto da página, logo abaixo do nome. Clique em Configure

3.2.1. Procure por DNS Servers e faça a atribuição do DNS Server cadastrado no passo anterior

 

A referência utilizada para esta configuração foi esta:

http://www.windowsazure.com/en-us/manage/services/networking/create-a-virtual-network/

 

Storage

O recurso de Storage do Windows Azure é equivalente a um Storage que pode estar conectado à sua rede local, mas que pode ser encarado como um conjunto infinito de discos, pois não há um limite pré-definido de espaço, e também pode ser replicado geograficamente, entre as regiões.

O Storage precisa receber um endereço, no formato de uma URL, para que possa ser acessado. Para ser utilizado junto com as máquinas virtuais, precisa estar no mesmo Affinity Group criado para o Virtual Network, o que garante que ele estará na mesma região.

 

Configuração do Storage

Os passos para criar o Storage são:

1. Navegar por New -> Data Services -> Storage -> Quick Create

1.1. URL: Defina o endereço público, com o formato *.core.windows.net, pelo qual o seu Storage poderá ser acessado

1.2. Region / Affinity Group: Selecione o Affinity Group criado com o Virtual Network

1.3. Enable Geo-Replication: O site informa que caso se selecione esta opção depois, poderá haver um impacto na precificação

 

Referência:

http://www.windowsazure.com/en-us/manage/services/networking/add-a-vm-to-a-virtual-network/

 

A primeira máquina virtual

A primeira máquina virtual para este ambiente foi o servidor de Active Directory Domain Services e DNS, fechando o ponto iniciado na configuração do servidor DNS para o Virtual Network.

Importante ressaltar que para este laboratório foi criado uma nova floresta e domínio, mas poderia ser estabelecida uma VPN com a rede da empresa, e incluir este servidor em um domínio ou floresta existentes.

Vale uma atenção em relação aos discos das máquinas virtuais. Os discos são classificados em OS disk e Data disk, sendo que o OS disk é configurado inicialmente, recebendo a imagem do sistema operacional selecionado. O OS disk vem configurado com um cache do tipo Read Write, o que não é recomendado para os discos de dados, pelas referências que encontrei, pela remota possibilidade de perda de dados.

 

Configuração da primeira máquina virtual

Para configurar a máquina virtual:

1. Navegar por New -> Compute -> Virtual Machine -> From Gallery

1.1. Escolha o sistema operacional. Eu usei a última versão disponível, no caso a Windows Server 2012, December 2012, que não estava disponível em algumas regiões

1.2. Virtual machine configuration

1.2.1. Virtual machine name: Escolha o nome que da máquina virtual

1.2.2. Password: Senha da conta administratora

1.2.3. Size: Eu usei o tamanho Small, para possibilitar o uso de um segundo disco, tive alguns problemas para fazer isso com a instância Extra Small mas não tenho certeza se foi circunstancial, apesar da documentação informar que ela suportaria

 

1.3. Virtual machine mode

1.3.1. A opção usada foi a Standalone virtual machine, a outra opção permite trabalhar com máquinas criadas para balanceamento de carga

1.3.2. DNS name: nome para acesso externo à máquina. Este nome será importante para a publicação dos serviços pela Internet

1.3.3. Storage account: criado no tópico Storage

1.3.4. Region / Affinity Group / Virtual Network: Selecione o Virtual Network criado anteriormente, por ser a opção mais específica

1.3.5. Virtual network subnet: selecione a subrede criada com o Virtual Network

 

1.4. Virtual machine options

1.4.1. Availability set: None -> Esta opção permite a criação de camadas de servidores espelhados, como em cenários de load balancing. Mais informações sobre isto podem ser obtidas aqui:

https://www.windowsazure.com/en-us/manage/windows/common-tasks/manage-vm-availability/

 

1.5. Neste ponto a máquina virtual já deverá estar em processo de criação, o que deve levar cerca de 10 minutos

 

2. Adicionar disco de dados

2.1. Navegue até a página de configuração da máquina virtual criada clicando em Virtual Machines do lado esquerdo do portal de gerenciamento

2.2. Selecione a sua máquina virtual recém criada

2.3. Na barra de ferramentas inferior selecione Attach -> Attach empty disk (esta opção não estará habilitada enquanto a máquina virtual não estiver pronta)

2.3.1. Confirme se a máquina virtual escolhida está correta

2.3.2. Os parâmetros Storage Location e File Name já vêm preenchidos, só o File Name pode ser alterado

2.3.3. Defina um tamanho para o disco. Não escolha um tamanho muito pequeno, pois não há opção de modificação

2.3.4. Host Cache Preference: None, Read Only e Read Write -> A opção Read Write pode ocasionar perda de dados em caso de problemas

 

2.4. Este processo deve levar mais alguns minutos

 

3. Aproveite que você está na página de configuração da máquina virtual para confirmar se o endereço IP atribuído a ela corresponde ao endereço registrado como DNS Server, durante a configuração do Virtual Network. Esta informação deve aparecer como o campo INTERNAL IP ADDRESS, nas informações agrupadas como “quick glance”, do lado direito desta página

4. Quando a máquina virtual estiver pronta, será possível conectar-se a ela usando a opção Connect, também disponível na barra de ferramentas inferior. Esta conexão utilizará o Remote Desktop Connection, e abrirá um terminal para a sua nova máquina virtual

5. Lembre-se de configurar o disco de dados adicionado no passo 2, a primeira letra disponível para configurar a unidade costuma ser a F. Recomendo utilizar esta unidade para armazenar os dados do Active Directory, mas não é necessário utiliza-la para os executáveis

6. Os passos de configuração do Active Directory Domain Services e do DNS são bastante comuns, e podem ser facilmente encontrados em outras referências, e por este motivo não serão detalhados aqui

7. Estes dois artigos apresentam o processo de configuração de máquinas virtuais no Windows Azure com o Active Directory, de maneira semelhante ao apresentado aqui, mas com o uso de scritps PowerShell:
http://www.windowsazure.com/en-us/manage/services/networking/active-directory-forest/

http://www.windowsazure.com/en-us/develop/training-kit/hol-deployingactivedirectoryps/

Vale observar que as referências recomendam a configuração de um segundo disco de dados, para realização de backup. Não me importei em fazer este procedimento para a construção deste ambiente de laboratório.

 

Acrescentando as outras máquinas virtuais

Depois de configurada a primeira máquina virtual e configurado o Active Directory Domain Services e o DNS, basta criar as máquinas virtuais adicionais, seguindo os mesmos passos utilizados para criar a primeira.

Note que, como o Virtual Network já foi configurado com o endereçamento da subrede e do servidor DNS, basta associar as novas máquinas virtuais, e todos os detalhes de configuração de rede já estarão prontos.

Da mesma forma que para a primeira máquina virtual, não entrarei nos detalhes de configuração dos produtos aqui, visto que são os mesmos procedimentos necessários para a instalação em outros ambientes, mas vou mencionar os detalhes específicos do ambiente no Windows Azure, bem como citar alguns detalhes referentes a ambientes distribuídos como este.

 

Configuração da segunda máquina virtual, SQL

Para configurar a máquina virtual:

1. Repita o primeiro passo para criação da máquina virtual, mas para o servidor SQL utilize pelo menos a configuração Medium

2. Adicionar pelo menos um disco de dados, para armazenar os bancos de dados

3. Conecte-se à máquina virtual, configure o disco adicional

4. Cadastre a máquina no domínio

5. Utilize uma conta do domínio, pode ser a Administrator mesmo, para realizar a instalação do SQL Server. Utilize a documentação de instalação do Visual Studio 2012 Team Foundation Server para consultar os detalhes de instalação

6. Habilite o protocolo TCP/IP no SQL Server

7. Configure o Windows Firewall para liberar o acesso às portas TCP 80, 1433 e 2383, para liberar o acesso ao Reporting Services, Database Services e Analysis Services, considerando as portas padrões. As portas referentes ao Database Services e Analysis Services não serão publicadas na Internet, então não há necessidade de alterá-las

 

Configuração da terceira máquina virtual, SharePoint

Para configurar a máquina virtual:

1. Repita o primeiro passo para criação da máquina virtual, para o servidor SharePoint é possível começar com a configuração Medium, mas eu só conseguir ativar todos os serviços, incluindo o Project Server, após a mudança para a configuração Large

2. Adicione pelo menos um disco de dados, para armazenar os arquivos temporários e logs do SharePoint

3. Conecte-se à máquina virtual, configure o disco adicional

4. Cadastre a máquina no domínio

5. Utilize uma conta do domínio, pode ser a Administrator mesmo, para realizar a instalação e configuração do SharePoint Server. Utilize a documentação de instalação do Visual Studio 2012 Team Foundation Server para consultar os detalhes de instalação

6. A Farm SharePoint precisará ser configurada, assim como os serviços, e um portal deverá ser criado

7. Instale o Visual Studio 2012 Team Foundation Server e configure o portal SharePoint para que os sites do TFS e os Dashboards possam ser criados

8. Não mencionei o Project Server, mas ele pode ser instalado nesta máquina virtual, assim como o recurso de integração dele com o TFS

 

Configuração da quarta máquina virtual, TFS

Para configurar a máquina virtual:

1. Repita o primeiro passo para criação da máquina virtual, para o servidor TFS é viável trabalhar com a configuração Small. O setup do produto apresentará um aviso, mas não encontrei nenhum tipo de problema

2. Não há necessidade de acrescentar um disco dados para esta máquina

3. Conecte-se à máquina virtual e cadastre-a no domínio

4. Instale os componentes de acesso a dados do SQL Server, que pode ser feito usando-se o disco de instalação do SQL Server e restringindo a instalação ao item “Client Tools Connectivity” em “Features Selection -> Shared Features” durante o setup

5. Utilize uma conta do domínio, pode ser a Administrator mesmo, para realizar a instalação e configuração do Visual Studio 2012 Team Foundation Server. Utilize a documentação do produto para consultar os detalhes de instalação

 

Validação do ambiente

Depois de realizada a configuração inicial, confirme se o SharePoint e o TFS estão funcionando como esperado, acessando os recursos pelo Internet Explorer das próprias máquinas virtuais.

 

Publicação do serviços

Para que o ambiente seja acessível externamente é necessário realizar a publicação dos serviços, o que pode ser feito pelo Portal de Gerenciamento do Windows Azure.

 

Publicação do TFS

Por padrão a porta a ser publicada para o TFS é a 8080:

1. Navegue até a página de configuração da máquina virtual TFS, clicando em Virtual Machines do lado esquerdo do Portal de Gerenciamento;

2. Clique na seta para a direita ao lado do nome da máquina virtual;

3. Na tela do Dashboard, clique em Endpoints na parte superior da página. Observe que o RemoteDesktop deverá aparecer na lista de publicação;

4. Clique em Add Endpoint, na barra de ferramentas inferior. Selecione um nome de identificação para a porta, informe o número da porta pública e privada (8080), que pode receber um valor diferente externamente, e use o protocolo TCP.

 

Publicação do SharePoint

Para o SharePoint basta realizar a publicação da porta 80:

1. Se você fizer esta configuração na sequência do item anterior, bastará clicar no nome na máquina virtual do SharePoint, que deve estar visível do lado esquerdo do Portal de Gerenciamento, e a página de Endpoints deste servidor será exibida;

2. Adicione o Endpoint para a porta 80 com protocolo TCP.

 

Publicação do SQL

Para a máquina virtual do SQL, basta realizar a publicação da porta 80 para disponibilizar o serviço de Reporting Services:

1. Se você fizer esta configuração na sequência do item anterior, bastará clicar no nome na máquina virtual do SQL, que deve estar visível do lado esquerdo do Portal de Gerenciamento, e a página de Endpoints deste servidor será exibida;

2. Adicione o Endpoint para a porta 80 com protocolo TCP.

 

Ajustes no SharePoint

O acesso externo ao servidor SharePoint será feito pelo endereço cadastrado como DNS name, informado durante o processo de criação da máquina virtual.

Para que o SharePoint aceite o acesso por este endereço, será necessário cadastrá-lo na lista Alternate Access Mappings, a partir do SharePoint Central Administration.

 

Ajustes no TFS

Para que o acesso funcione corretamente, é necessário ajustar os endereços do SharePoint e do Reporting Services para os endereços externos, no formato *.cloudapp.net, cadastrados como DNS name.

Estes ajustes podem ser feitos pelo Team Foundation Server Administration Console, nos seguintes pontos:

1. Application Tier

1.1. Change URLs

1.1.1. Altere o parâmetro Notification URL para o endereço externo do servidor TFS

Ao realizar esta configuração, encontrei um erro de validação do endereço, que foi resolvido criando-se a chave de registry BackConnectionHostNames, conforme a solução 1 apresentada neste artigo:

http://support.microsoft.com/kb/926642

 

2. Application Tier -> SharePoint Web Applications

2.1. Change

2.1.1. Altere o parâmetro Web Application URL para o endereço externo do servidor SharePoint

 

3. Application Tier -> Reporting

3.1. Edit -> Na aba Reports da janela Reporting

3.1.1. Altere os parâmetros Web Service e Report Manager para o endereço externo do servidor SQL

 

Utilização do serviços

Depois de todas estas configurações, você deverá ser capaz de acessar os serviços instalados a partir de uma estação qualquer, para isto tente acessar estes recursos:

  1. http://<servidorTFS>.cloudapp.net:8080/tfs
  2. http://<servidorSharePoint>.cloudapp.net/
  3. http://<servidorSQL>.cloudapp.net/Reports/

Você deverá ser capaz também de cadastrar o servidor TFS no Visual Studio.

 

Conclusões

O ambiente montado aqui foi o do Visual Studio ALM, mas boa parte das informações apresentadas permitem a criação de qualquer outra configuração usando o Windwos Azure como IaaS. E como pode-se observar, as diferenças não são tantas assim.

Vale ressaltar que nesta modalidade de serviços, o Windows Azure irá fornecer os recursos físicos, como servidores, infraestrutura de rede e eletricidade, além de vários mecanismos de redundância e tolerância a falhas. Porém, nenhum serviço será oferecido para manutenção do ambiente, como realização de backups dos bancos de dados, monitoração dos serviços, ou aplicação de patches.

Todas estas tarefas de operação e manutenção são de responsabilidade do cliente, contratante do serviço.

Faltam poucos detalhes para transformar esta configuração em um ambiente de produção. Mas acredito que as máquinas virtuais utilizadas devam comportar de 50 a 100 usuários simultâneos, pela experiência acumulada.

Para maiores necessidades, seria possível incluir outros servidores para balanceamento de carga para o TFS e para o SharePoint, além de aumentar a capacidade do servidor SQL ou dividir os seus serviços e bancos de dados em mais de uma máquina virtual.

2 Comments

Add yours →

  1. Boa tarde Marcelo,

    Cara estou tentando implementar TFS aqui na minha empresa hospedado no Windows Azure, em um ambiente bem parecido com o seu, a única diferença é que estou usando uma máquina só para hospedar o TFS e utilizando SQL EXPRESS na mesma máquina.
    Na parte que você realizou alguns ajustes o link postado não abre.
    Poderia me ajudar nessa parte?

    http://code-journey.com/2009/account-failed-to-log-on-0xc000006d-unable-to-load-website-from-local-server/

    Obrigado

    • Olá Rodrigo, obrigado pelo contato.
      Eu alterei o link para o artigo do KB da Microsoft equivalente http://support.microsoft.com/kb/926642, não tenho mais o artigo anterior para comparar e não validei os passos, mas pelo que me lembro o problema é o mesmo, assim como a solução. Espero que resolva.
      Fiquei curioso a respeito do uso do SQL Express, você sabia que o SQL Server 2012 Standard está incluso no licença do TFS?

      Abraços.

Deixe uma resposta

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: