knife で Azure に VMを作成する方法
実行環境:
Windows 7 (64bit)
以下を参照し、Chef SDKをインストールします。
※以下の記事の内容そのままではうまくいかないので、注意。
注意箇所は後で述べます。
https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-automation-with-chef/
1.Chef ワークステーションの構成
"chef-starter\chef-repo.chef にある~"とありますが、"C:/chef/chef-starter/chef-repo/.chef"と読み替えてください。
2.Knife.rbの編集
knife[:azure_publish_settings_file]を含め、以下の4つの設定が必要です。
knife[:azure_publish_settings_file] = "#{current_dir}/xxxxx.publishsettings" knife[:azure_subscription_id] = "xxxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxxxx" knife[:azure_mgmt_cert] = "#{current_dir}/management-certificate.pem" knife[:azure_api_host_name] = "management.core.windows.net"
※区切り文字は、'/'でOKです。
※azure_mgmt_certの指定には、https://github.com/chef/knife-azure/blob/master/README.md を参照し、base64+openssl(Windows環境で実践している人は、cygwinなどが便利)をしてください。
3.Chef開発キットのインストール
インストール後に環境変数Pathに以下を追加します。
chefdkのフォルダ名が異なりますので注意です。
私はbinフォルダが無かったので、作成しました。(このPathが役に立っているかは謎です)
C:\opscode\chefdk\bin; C:\opscode\chefdk\embedded\bin; C:\Users\ユーザ名\AppData\Local\chefdk\gem\ruby\2.1.0\bin;
4.knife-azureのインストール
chef gem install knife-azure ––pre
ありますが、"--pre"は不要です。
5.knife azure image list
この後knife azure server createコマンドを実行する際に、VMイメージを指定しますが、このリストの中からイメージ名を取得しますので、コマンドのバッファを2000くらいにしておいてください。
6.テンプレートの作成
「C:\chef\cookbooks\webserver\templates\default\Default.htm.erb ファイルに移動します。シンプルな「Hello World」 HTML コードを追加して、」とありますが、本当にこのファイルにHello Worldと書き込むだけでいいです。
7.knife azure server createコマンドを実行
書かれている通り通りに実行すると躓きます。
--tcp-endpoints の指定の仕方がこれだと内部IPしか指定されていません。アクセスするには外側のポートも指定する必要があります。
--tcp-endpoints '80:80,3389:3389'と指定してください。
knife azure server create --helpからでも調べることが出来ます。
ヘルプは多用しましょう。
また、このままだとWindowsのVMイメージの場合、リモートアクセスの為のボタンがAzure portal上で非活性のままです。
--bootstrap-protocol 'winrm' と指定してあげましょう。
Windows VM Imageの場合、winrmがデフォルトなので、このオプション自体を指定しなくてもOKです。
コマンドはこんな感じになります。
knife azure server create --azure-dns-name 'test01' --azure-vm-name 'testsv01' --azure-vm-size 'Small' --bootstrap-protocol 'winrm' --azure-source-image 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-20151120-en.us-127GB.vhd' --azure-service-location 'Japan West' --winrm-user azureuser --winrm-password 'myPassword123' --tcp-endpoints '80:80,3389:3389' --r 'recipe[webserver]'
この辺のオプションはKnife.rbに指定しても良いと思います。
以上で、出来上がったcloudサービスのURLに接続すると、6で追加した"Hello World"を記載されたページが表示されます。
VM作成時にIISがプロビジョニングされてるんですね。すごいです。
これでSeleniumやTomcatもプロビジョニングできるようにしたいですね。
ただこれ、VMがASMモードでできます。
ARMモードで作成したいな。