Automação em instâncias do Windows no Amazon EC2

4

Estou trabalhando em um serviço de computação que exigirá a implantação automática de nosso software (~ 30 megas). O software é um serviço WCF, então estou preso com o Windows. Eu não posso usar o mono porque usamos muitas classes que não são implementadas nele.

Poderíamos facilmente fazer a implantação no linux através do SSH & SFTP, que são ativados por padrão. O serviço de telnet deve ser iniciado manualmente nas instâncias do Windows. Existe uma maneira de alavancar o RDP para isso?

Eu posso criar uma AMI com o telnet ativado. Mas parece um exagero.

Como as pessoas automatizam a implantação nas instâncias padrão do Windows? Ou todo mundo cria uma AMI com seus softwares já instalados?

    
por Partho 27.12.2013 / 17:03

3 respostas

4

O RDP não é uma boa opção para a automação do Windows.

Uma alternativa ao ssh para windows é o WinRM - Windows Remote management. Powershell tem suporte embutido para WinRM. E se você estiver usando o EC2 (não listado na pergunta, mas a pergunta está marcada como EC2), o powershell está habilitado na imagem do Windows padrão da Amazon. Você só precisa abrir a porta 5985 no seu grupo de segurança.

Existem algumas instruções sobre como se conectar usando o powershell aqui: link

A alternativa ao SFTP para windows é o CIFS (compartilhamento de arquivos do Windows), mas não é uma opção particularmente boa - o protocolo não é criptografado. Você também pode transferir arquivos usando um script do powershell - veja um exemplo de script aqui: link

Se você está certo em criar sua própria AMI, instale o cygwin e seu servidor sshd. Isso lhe dará a transferência de arquivos e a execução remota sobre o ssh para sua instância do Windows.

    
por 27.12.2013 / 19:59
2

O RDP provavelmente não é a melhor maneira de fazer o que você está procurando. O PowerShell Remoting é provavelmente o melhor método para proporcionar uma experiência semelhante à sua "história" de implantação do Linux . Você pode obter sessões de shell interativas em máquinas remotas ou executar scripts remotamente.

Por estar acostumado a ter um servidor SFTP incluído no sistema operacional Linux, a transferência de arquivos no mundo do Windows parecerá um pouco invasiva.

Você pode executar o protocolo de compartilhamento de arquivos SMB diretamente pela Internet, mas isso geralmente é considerado um risco de segurança.

O protocolo RDP tem o recurso de transferência de arquivos embutido, mas usar um cliente RDP de forma batch / não interativa será uma invasão desonesta (sem mencionar que o mecanismo de transferência de arquivos no RDP é, por si só, um pouco de um hack desonesto).

O próprio Powershell pode baixar arquivos de servidores remotos de uma maneira semelhante a wget . Eu não faço implantações de código para servidores remotos do Windows no meu trabalho, mas eu observaria strongmente o uso desse método para "puxar" o código para os servidores remotos se eu estivesse usando somente a funcionalidade integrada.

    
por 27.12.2013 / 17:56
1

Não está claro se você está tentando automatizar a infraestrutura, bem como a implantação do serviço WCF.

Implantação de código

No Windows há algumas maneiras, não tenho nenhuma resposta mágica, e a arquitetura não é diferente do Linux. As ferramentas que você usa e quais estão disponíveis no Windows fora da caixa são onde estão as diferenças.

1) Instale um dos tipos SSH, SFTP, Telenet, etc. e, em seguida, use métodos similares, como acontece agora no Linux junto com o batch ou o powershell. Como Evan Anderson diz, pode ser que isso pareça estranho para você por causa das ferramentas disponíveis no Linux.

Se você trabalhou com o Java, o processo genérico é o mesmo, ou seja, o código precisa ser criado antes da implantação e tudo pode ser automatizado usando o script em lote ou o powershell.

2) O método mais escalonável é usar um servidor de implementação automatizado, como o Octopus (como um agente instalado no destino de implementação) e, opcionalmente, um servidor de construção, como o Jenkins ou o Bamboo. Juntamente com seu código residente em um repositório de código, como o Git, você pode ter integração e implementação contínuas ou automatizadas manualmente com base em uma ramificação específica no seu git repo.

Novamente, o processo genérico é o mesmo que o Java ou alguma outra linguagem no Linux.

    
por 27.12.2013 / 18:50