Automatisierung in Windows-Instances auf Amazon EC2

Automatisierung in Windows-Instances auf Amazon EC2

Ich arbeite an einem Computerdienst, der eine automatische Bereitstellung unserer Software erfordert (~30 MB). Die Software ist ein WCF-Dienst, daher bin ich auf Windows angewiesen. Ich kann Mono nicht verwenden, da wir viele Klassen verwenden, die darin nicht implementiert sind.

Wir könnten die Bereitstellung unter Linux problemlos über SSH und SFTP durchführen, die standardmäßig aktiviert sind. Der Telnet-Dienst muss auf Windows-Instanzen manuell gestartet werden. Gibt es eine Möglichkeit, dafür RDP zu nutzen?

Ich kann ein AMI mit aktiviertem Telnet erstellen. Aber das scheint übertrieben.

Wie automatisieren Benutzer die Bereitstellung auf Standard-Windows-Instanzen? Oder erstellt jeder ein AMI mit seiner bereits installierten Software?

Antwort1

RDP ist keine gute Wahl für die Windows-Automatisierung.

Eine Alternative zu SSH für Windows ist WinRM – Windows Remote Management. Powershell bietet integrierte Unterstützung für WinRM. Und wenn Sie EC2 verwenden (nicht in der Frage aufgeführt, aber die Frage ist mit EC2 gekennzeichnet), ist Powershell auf dem Amazon-Standard-Windows-Image aktiviert. Sie müssen nur Port 5985 in Ihrer Sicherheitsgruppe öffnen.

Hier finden Sie einige Anweisungen zum Herstellen einer Verbindung mithilfe von Powershell:https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313

Die Alternative zu SFTP für Windows ist CIFS (Windows File Sharing), aber das ist keine besonders gute Option – das Protokoll ist nicht verschlüsselt. Sie können Dateien auch mit einem Powershell-Skript übertragen – ein Beispielskript finden Sie hier:http://poshcode.org/2216

Wenn Sie mit der Erstellung Ihres eigenen AMI einverstanden sind, installieren Sie Cygwin und seinen SSHD-Server. Dadurch erhalten Sie Dateiübertragung und Remote-Ausführung über SSH auf Ihre Windows-Instanz.

Antwort2

RDP ist wahrscheinlich nicht die beste Möglichkeit für Ihr Anliegen.PowerShell-Remotingist wahrscheinlich die beste Methode, um Ihnen eine ähnliche Erfahrung wie bei Ihrer Linux-Bereitstellungs-"Story" zu bieten. Sie können interaktive Shell-Sitzungen auf Remote-Rechnern durchführen oder Skripte remote ausführen.

Wenn Sie daran gewöhnt sind, dass das Linux-Betriebssystem einen SFTP-Server enthält, wird Ihnen die Dateiübertragung in der Windows-Welt ein wenig wie ein Hack vorkommen.

Sie können das SMB-Dateifreigabeprotokoll direkt über das Internet ausführen, dies wird jedoch im Allgemeinen als gewisses Sicherheitsrisiko angesehen.

Das RDP-Protokoll verfügt über eine integrierte Dateiübertragungsfunktion, aber die Verwendung eines RDP-Clients im Batch- bzw. nicht interaktiven Modus ist ein fragwürdiger Hack (ganz zu schweigen davon, dass der Dateiübertragungsmechanismus in RDP selbst ein ziemlich fragwürdiger Hack ist).

Powershell selbst kannDateien von Remote-Servern herunterladenauf ähnliche Weise wie wget. Ich führe bei meiner Arbeit keine Codebereitstellungen auf Remote-Windows-Servern durch, würde aber diese Methode zum „Herausziehen“ von Code auf die Remote-Server unbedingt in Betracht ziehen, wenn ich dies täte, da dabei nur integrierte Funktionen verwendet werden.

Antwort3

Es ist nicht klar, ob Sie versuchen, die Infrastruktur sowie die Bereitstellung des WCF-Dienstes zu automatisieren.

Codebereitstellung

Unter Windows gibt es ein paar Möglichkeiten, aber leider keine Zauberlösung, und die Architektur unterscheidet sich nicht von Linux. Die Unterschiede liegen in den Tools, die Sie verwenden, und in den Tools, die unter Windows standardmäßig verfügbar sind.

1) Installieren Sie eines von SSH, SFTP, Telenet usw. und verwenden Sie dann ähnliche Methoden wie jetzt unter Linux zusammen mit Batch oder Powershell. Wie Evan Anderson sagt, kommt Ihnen das vielleicht aufgrund der unter Linux verfügbaren Tools komisch vor.

Wenn Sie mit Java gearbeitet haben, ist der allgemeine Prozess derselbe, d. h. vor der Bereitstellung muss Code erstellt werden und alles kann mithilfe eines Batch-Skripts oder Powershell automatisiert werden.

2) Die skalierbarere Methode ist die Verwendung eines automatisierten Bereitstellungsservers wie Octopus (als Agent, der auf dem Bereitstellungsziel installiert ist) und optional eines Build-Servers wie Jenkins oder Bamboo. Wenn Ihr Code in einem Code-Repository wie Git gespeichert ist, können Sie eine kontinuierliche Integration und Bereitstellung oder eine manuelle Automatisierung basierend auf einem bestimmten Zweig in Ihrem Git-Repository durchführen.

Auch hier ist der allgemeine Prozess derselbe wie bei Java oder einer anderen Sprache unter Linux.

verwandte Informationen