Назад | Перейти на главную страницу

Автоматизация в экземплярах Windows на Amazon EC2

Я работаю над вычислительным сервисом, который потребует автоматического развертывания нашего программного обеспечения (~ 30 мегабайт). Программное обеспечение представляет собой службу WCF, поэтому я застрял в окнах. Я не могу использовать моно, потому что мы используем множество классов, которые в нем не реализованы.

Мы могли бы легко выполнить развертывание в Linux через SSH и SFTP, которые включены по умолчанию. Службу telnet необходимо запускать вручную на экземплярах Windows. Есть ли способ использовать для этого RDP?

Я могу создать AMI с включенным telnet. Но это кажется излишеством.

Как люди автоматизируют развертывание на экземплярах Windows по умолчанию? Или все создают AMI с уже установленным программным обеспечением?

RDP - не лучший выбор для автоматизации Windows.

Альтернативой ssh ​​для Windows является WinRM - удаленное управление Windows. 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), но это не особенно хороший вариант - протокол не зашифрован. Вы также можете передавать файлы с помощью сценария PowerShell - см. Пример сценария здесь: http://poshcode.org/2216

Если у вас все в порядке с созданием собственного AMI, установите cygwin и его sshd-сервер. Это даст вам передачу файлов и удаленное выполнение через ssh в ваш экземпляр Windows.

RDP, вероятно, не лучший способ сделать то, что вы ищете. Удаленное взаимодействие PowerShell вероятно, ваш лучший способ дать вам опыт, подобный вашей «истории» развертывания Linux. Вы можете получать интерактивные сеансы оболочки на удаленных машинах или запускать сценарии удаленно.

Когда вы привыкли к тому, что в ОС Linux включен SFTP-сервер, передача файлов в мире Windows будет похожа на взлом.

Вы можете запустить протокол обмена файлами SMB непосредственно через Интернет, но это обычно считается небольшой угрозой безопасности.

Протокол RDP имеет встроенную возможность передачи файлов, но использование RDP-клиента в пакетной / неинтерактивной манере будет изворотливым взломом (не говоря уже о том, что механизм передачи файлов в RDP сам по себе является чем-то вроде хитрый хак).

Сам Powershell может скачивать файлы с удаленных серверов аналогично wget. Я не выполняю никаких развертываний кода на удаленных серверах Windows в своей работе, но я бы очень внимательно посмотрел на использование этого метода для «вытаскивания» кода на удаленные серверы, если бы я был, поскольку он использует только встроенные функции.

Неясно, пытаетесь ли вы автоматизировать инфраструктуру, а также развертывание службы WCF.

Развертывание кода

В Windows есть несколько способов, но я боюсь, что волшебного ответа нет, и архитектура ничем не отличается от Linux. В инструментах, которые вы используете и какие из них доступны в Windows из коробки, есть различия.

1) Установите один из SSH, SFTP, Telenet и т. Д., А затем используйте те же методы, что и в Linux, вместе с пакетом или PowerShell. Как говорит Эван Андерсон, это может показаться вам странным из-за инструментов, доступных в Linux.

Если вы работали с Java, общий процесс такой же, т.е. код необходимо создать перед развертыванием, и все это можно автоматизировать с помощью пакетного сценария или PowerShell.

2) Более масштабируемым методом является использование сервера автоматического развертывания, такого как Octopus (в качестве агента, установленного на целевом объекте развертывания), и, возможно, сервера сборки, такого как Jenkins или Bamboo. Наряду с вашим кодом, находящимся в репозитории кода, таком как Git, у вас может быть непрерывная интеграция и развертывание или ручная автоматизация на основе конкретной ветки в вашем репозитории git.

Опять же, общий процесс такой же, как Java или какой-либо другой язык в Linux.