![Amazon EC2 上の Windows インスタンスの自動化](https://rvso.com/image/623640/Amazon%20EC2%20%E4%B8%8A%E3%81%AE%20Windows%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96.png)
私は、ソフトウェア (約 30 MB) の自動展開を必要とするコンピューティング サービスに取り組んでいます。ソフトウェアは WCF サービスなので、Windows でしか利用できません。Mono では実装されていないクラスを多数使用するため、Mono は使用できません。
デフォルトで有効になっている SSH と SFTP を介して Linux に簡単にデプロイできます。Windows インスタンスでは、telnet サービスを手動で開始する必要があります。これに RDP を活用する方法はありますか?
Telnet を有効にして AMI を作成できます。しかし、やりすぎのように思えます。
デフォルトの Windows インスタンスでの展開を自動化するにはどうすればよいでしょうか? それとも、ソフトウェアが既にインストールされた AMI を全員が作成するのでしょうか?
答え1
RDP は Windows の自動化には適していません。
Windows の SSH の代替手段は、WinRM - Windows リモート管理です。Powershell には WinRM のサポートが組み込まれています。また、EC2 を使用している場合 (質問には記載されていませんが、質問には EC2 のタグが付いています)、Amazon のデフォルトの Windows イメージで PowerShell が有効になっています。セキュリティ グループでポート 5985 を開くだけです。
PowerShell を使用して接続する方法については、次の説明を参照してください。https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313
Windows の SFTP の代替手段は CIFS (Windows ファイル共有) ですが、プロトコルが暗号化されていないため、特に良い選択肢ではありません。PowerShell スクリプトを使用してファイルを転送することもできます。サンプル スクリプトは、こちらを参照してください。http://poshcode.org/2216
独自の AMI を作成しても問題ない場合は、cygwin とその sshd サーバーをインストールします。これにより、Windows インスタンスへの ssh 経由のファイル転送とリモート実行が可能になります。
答え2
RDP はおそらく、あなたが求めていることを実現するための最良の方法ではありません。PowerShell リモート処理おそらく、Linux 展開の「ストーリー」と同様の体験を実現するには、これが最適な方法です。リモート マシンで対話型シェル セッションを取得したり、スクリプトをリモートで実行したりできます。
Linux OS に SFTP サーバーが組み込まれていることに慣れていると、Windows の世界でファイル転送を行うのはちょっとしたハックのように感じられるでしょう。
SMB ファイル共有プロトコルをインターネット経由で直接実行することもできますが、これは一般にセキュリティ上のリスクが多少あると考えられています。
RDP プロトコルにはファイル転送機能が組み込まれていますが、バッチ/非対話形式で RDP クライアントを使用するのは危険なハックになります (言うまでもなく、RDP のファイル転送メカニズム自体も危険なハックです)。
Powershell自体はリモートサーバーからファイルをダウンロードすると同様の方法でwget
。私は仕事でリモート Windows サーバーにコードを展開することはありませんが、この方法では組み込み機能のみを使用するため、リモート サーバーにコードを「プル」する場合は、この方法を使用することを強く検討します。
答え3
インフラストラクチャと WCF サービスの展開を自動化しようとしているかどうかは不明です。
コードの展開
Windows ではいくつかの方法がありますが、残念ながら魔法のような答えはなく、アーキテクチャは Linux と変わりません。違いは、使用するツールと、Windows ですぐに使用できるツールにあります。
1) SSH、SFTP、Telenet などのいずれかをインストールし、Linux で現在行っているのと同様の方法をバッチまたは PowerShell と組み合わせて使用します。Evan Anderson が言うように、Linux で使用できるツールのせいで、これは奇妙に感じるかもしれません。
Java を使用したことがある場合は、一般的なプロセスは同じです。つまり、デプロイする前にコードをビルドする必要があり、すべてをバッチ スクリプトまたは PowerShell を使用して自動化できます。
2) よりスケーラブルな方法は、Octopus などの自動デプロイメント サーバー (デプロイメント ターゲットにインストールされたエージェントとして) と、オプションで Jenkins や Bamboo などのビルド サーバーを使用することです。Git などのコード リポジトリに存在するコードとともに、Git リポジトリの特定のブランチに基づいて、継続的な統合とデプロイメントまたは手動の自動化を行うことができます。
繰り返しますが、一般的なプロセスは Linux 上の Java やその他の言語と同じです。