web-dev-qa-db-ja.com

ChefSoloを使用してWindowsEC2インスタンスをプロビジョニングし、bootstrap it

いくつかの.NETアプリのCIプロセスを自動化しようとしていますが、完璧な世界では、それぞれにWindowsEC2インスタンスを起動したいと思いますbootstrapインストールするインスタンスChef Soloを実行してから、Chefレシピを実行して、いくつかの依存関係とパッケージ化されたソフトウェア自体をインストールします。

しかし-私は初心者であり、どこから始めればよいのかは言うまでもなく、それが実現可能であるとしてもわかりません:)

私はAWSのコマンドラインツールにかなり精通しているので、AMIを起動できますが、それを超えるとかなり行き詰まります。 ChefがプリインストールされたカスタムAMIを構築することは避けたいと思います。それは、多くの利点を奪うからです。

これは本質的に私がしなければならないことだと思いますが、(当然のことながら)Linuxに焦点を当てています。

http://www.opinionatedprogrammer.com/2011/06/chef-solo-tutorial-managing-a-single-server-with-chef/

誰かが以前にこれまたは同様のことをしたことがある誰かへのリンクを持っていますか?または私がやりたいことを達成するためのより良い方法は?

助けていただければ幸いです。

4
Kieran Benton

ほとんどのWindows bootstrapリソースは、Hosted Chefに焦点を当てており、knife-windowsプラグインを使用しています。

ただし、これはChefsoloで可能になるはずです。

chef-clientを使用してAMIを構築していない場合、最初のステップは、そこに フルシェフWindowsインストーラー を取得することです。

幸いなことに、私が覚えているように、winrmはWindowsAmazonAMIでデフォルトで有効になっています。潜在的なbootstrapソリューション: https://stackoverflow.com/a/13284313/2205881

bootstrap他のものを同時に; Ruby Windowsインストーラーなど。同じプロセスで、クックブック、ロールなどを取得し、Chefプロビジョニングを開始できます。 。

[〜#〜]更新[〜#〜]

インスタンスの作成時に--user-data-fileを使用して、これを少し異なる方法で開始しました。これは、AWS API、コマンドラインツールで使用するか、インスタンスの起動時にWebインターフェイスに貼り付けることができます。

私は、パッケージマネージャーである Chocolatey を使用してchef-clientをインストールしています。

<script>
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
cinst chef-client
</script>

基本的に:<script>は、処理するバッチファイルがあることをAWSのユーザーデータスクリプトに通知します。
@powershell...(etc)は、Chocolateyを ドキュメント からインストールするコマンドです。
cinst chef-clientchef-clientパッケージ をインストールします。

これには、ユーザー入力は必要ありません。ユーザーデータはローカル管理者として実行されます。

すべてのAmazonAMIは、後続のブートではなく、最初のブート(デフォルト)でユーザーデータを実行します。したがって、これは、RDPに接続したり、管理者パスワードを取得したりすることなく、chef-clientを配置するための非常に簡単な方法です。

8
rjocoleman

別の方法は、Powershellで記述された「ユーザーデータスクリプト」を渡すだけです。次のようなテキストファイル(hello.ps1)を作成するだけです。

<PowerShell>

#アプリケーションをダウンロードしてインストールするためのコードはここにあります

</ powershell>

次に、インスタンスを起動するときに、userdataファイルを渡すだけです。

ec2run --region "us-east-1" "$ AMI" `

    --group "$mygroup" `

    --subnet "$mySubnet" --instance-type  "m1.medium" `

    --key "$myKey" `

    --user-data-file "hello.ps1"

S3からバイナリをダウンロードし、単一のPowerShellスクリプトを介して完全にインストールを行うことができます。 ここ 参考のためにAmazonからのいくつかのドキュメントです

1
Ameer Deen