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からでも調べることが出来ます。

ヘルプは多用しましょう。

また、このままだとWindowsVMイメージの場合、リモートアクセスの為のボタンが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がプロビジョニングされてるんですね。すごいです。

これでSeleniumTomcatもプロビジョニングできるようにしたいですね。

ただこれ、VMがASMモードでできます。

ARMモードで作成したいな。