![Automação em instâncias do Windows no Amazon EC2](https://rvso.com/image/623640/Automa%C3%A7%C3%A3o%20em%20inst%C3%A2ncias%20do%20Windows%20no%20Amazon%20EC2.png)
Estou trabalhando em um serviço de computação que exigirá implantação automática de nosso software (~30 megas). O software é um serviço WCF, então estou preso ao Windows. Não posso usar mono porque usamos muitas classes que não estão implementadas nele.
Poderíamos facilmente fazer a implantação no Linux através de SSH e SFTP, que são habilitados por padrão. O serviço telnet deve ser iniciado manualmente nas instâncias do Windows. Existe uma maneira de aproveitar o RDP para isso?
Posso criar uma AMI com telnet habilitado. Mas, parece um exagero.
Como as pessoas automatizam a implantação em instâncias padrão do Windows? Ou todo mundo cria uma AMI com seus softwares já instalados?
Responder1
RDP não é uma boa escolha para automação do Windows.
Uma alternativa ao ssh para Windows é o WinRM - Windows Remote Management. Powershell possui suporte integrado para WinRM. E se você estiver usando EC2 (não listado na pergunta, mas a pergunta está marcada como EC2), o PowerShell está habilitado na imagem padrão do Windows da Amazon. Você só precisa abrir a porta 5985 no seu grupo de segurança.
Existem algumas instruções sobre como conectar usando o PowerShell aqui:https://stackoverflow.com/questions/10237083/how-to-programmaticamente-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313
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 PowerShell - veja um exemplo de script aqui:http://poshcode.org/2216
Se você concordar em criar sua própria AMI, instale o cygwin e seu servidor sshd. Isso lhe dará transferência de arquivos e execução remota por ssh para sua instância do Windows.
Responder2
O RDP provavelmente não é a melhor maneira de fazer o que você procura.Comunicação remota do PowerShellé provavelmente o seu melhor método para proporcionar uma experiência semelhante à "história" de implantação do Linux. Você pode obter sessões de shell interativas em máquinas remotas ou executar scripts remotamente.
Estando acostumado a ter um servidor SFTP incluído no sistema operacional Linux, a transferência de arquivos no mundo Windows vai parecer um hack.
Você pode executar o protocolo de compartilhamento de arquivos SMB diretamente pela Internet, mas isso geralmente é considerado um risco à segurança.
O protocolo RDP possui capacidade de transferência de arquivos integrada, mas usar um cliente RDP de maneira em lote/não interativa será um hack duvidoso (sem mencionar que o mecanismo de transferência de arquivos no RDP é, em si, um pouco complicado). hack desonesto).
O próprio Powershell podebaixar arquivos de servidores remotosde maneira semelhante a wget
. Eu não faço nenhuma implantação de código em servidores remotos do Windows em meu trabalho, mas eu consideraria fortemente usar esse método para "extrair" o código para os servidores remotos, se eu estivesse, já que ele usa apenas funcionalidades integradas.
Responder3
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, existem algumas maneiras, mas infelizmente não há resposta mágica, e a arquitetura não é diferente do Linux. As ferramentas que você usa e quais estão disponíveis no Windows imediatamente é onde estão as diferenças.
1) Instale um SSH, SFTP, Telenet etc. e, em seguida, use métodos semelhantes aos que você faz agora no Linux junto com lote ou powershell. Como diz Evan Anderson, isso pode parecer estranho para você por causa das ferramentas disponíveis no Linux.
Se você trabalhou com Java, o processo genérico é o mesmo, ou seja, o código precisa ser construído antes da implantação e tudo pode ser automatizado usando script em lote ou PowerShell.
2) O método mais escalável é usar um servidor de implantação automatizado como o Octopus (como um agente instalado no destino de implantação) e opcionalmente um servidor de construção como Jenkins ou Bamboo. Junto com seu código residindo em um repositório de código como o Git, você pode ter integração e implantação contínuas ou automatizadas manualmente com base em uma ramificação específica em seu repositório git.
Novamente, o processo genérico é o mesmo do Java ou de alguma outra linguagem no Linux.