![Автоматизация в экземплярах Windows на Amazon EC2](https://rvso.com/image/623640/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%20%D1%8D%D0%BA%D0%B7%D0%B5%D0%BC%D0%BF%D0%BB%D1%8F%D1%80%D0%B0%D1%85%20Windows%20%D0%BD%D0%B0%20Amazon%20EC2.png)
Я работаю над вычислительным сервисом, который потребует автоматического развертывания нашего программного обеспечения (~30 мегабайт). Программное обеспечение представляет собой сервис WCF, поэтому я застрял с Windows. Я не могу использовать Mono, потому что мы используем много классов, которые в нем не реализованы.
Мы могли бы легко выполнить развертывание на Linux через SSH и SFTP, которые включены по умолчанию. Служба telnet должна быть запущена вручную на экземплярах Windows. Есть ли способ использовать RDP для этого?
Я могу создать AMI с включенным telnet. Но это кажется излишеством.
Как люди автоматизируют развертывание на экземплярах Windows по умолчанию? Или все создают AMI с уже установленным ПО?
решение1
RDP — не лучший выбор для автоматизации Windows.
Альтернативой ssh для Windows является WinRM - Windows Remote management. Powershell имеет встроенную поддержку WinRM. А если вы используете EC2 (не указано в вопросе, но вопрос помечен тегом EC2), powershell включен в образе Windows по умолчанию Amazon. Вам просто нужно открыть порт 5985 в вашей группе безопасности.
Некоторые инструкции по подключению с помощью PowerShell можно найти здесь:https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313
Альтернативой SFTP для Windows является CIFS (Windows file sharing), но это не очень хороший вариант - протокол не шифруется. Вы также можете передавать файлы с помощью скрипта powershell - см. пример скрипта здесь:http://poshcode.org/2216
Если вы согласны создать свой собственный AMI, установите cygwin и его сервер sshd. Это даст вам возможность передавать файлы и выполнять удаленно через ssh на вашем экземпляре Windows.
решение2
RDP, вероятно, не лучший способ сделать то, что вы ищете.Удаленное взаимодействие PowerShellвероятно, ваш лучший метод, чтобы дать вам подобный опыт вашей "истории" развертывания Linux. Вы можете получить интерактивные сеансы оболочки на удаленных машинах или запускать скрипты удаленно.
Привыкнув к наличию SFTP-сервера, встроенного в ОС Linux, передача файлов в мире Windows покажется вам чем-то вроде хака.
Вы можете запустить протокол обмена файлами SMB напрямую через Интернет, но это обычно считается рискованным для безопасности.
Протокол RDP имеет встроенную возможность передачи файлов, но использование клиента RDP в пакетном/неинтерактивном режиме будет сомнительным приемом (не говоря уже о том, что сам механизм передачи файлов в RDP является немного сомнительным приемом).
Powershell сам по себе можетзагрузка файлов с удаленных серверованалогично wget
. В своей работе я не занимаюсь развертыванием кода на удаленных серверах Windows, но если бы я это делал, я бы настоятельно рекомендовал использовать этот метод для «вытягивания» кода на удаленные серверы, поскольку он использует только встроенную функциональность.
решение3
Неясно, пытаетесь ли вы автоматизировать инфраструктуру, а также развертывание службы WCF.
Развертывание кода
В Windows есть несколько способов, но, боюсь, волшебного ответа нет, и архитектура не отличается от Linux. Различия заключаются в инструментах, которые вы используете, и в том, какие из них доступны в Windows из коробки.
1) Установите один из SSH, SFTP, Telenet и т. д., а затем используйте аналогичные методы, которые вы используете сейчас в Linux вместе с batch или powershell. Как говорит Эван Андерсон, это может показаться вам странным из-за инструментов, доступных в Linux.
Если вы работали с Java, то общий процесс тот же самый: код необходимо скомпилировать перед развертыванием, и все это можно автоматизировать с помощью пакетного скрипта или PowerShell.
2) Более масштабируемый метод заключается в использовании автоматизированного сервера развертывания, такого как Octopus (в качестве агента, установленного на цели развертывания) и опционально сервера сборки, такого как Jenkins или Bamboo. Наряду с вашим кодом, находящимся в репозитории кода, таком как Git, вы можете иметь непрерывную интеграцию и развертывание или ручную автоматизацию на основе определенной ветки в вашем репозитории git.
Опять же, общий процесс такой же, как в Java или каком-либо другом языке на Linux.