※2017/9/12現在の記事です。
ドキュメント
以下の knife の Azure プラグインの公式ドキュメントは必ず目を通します。
chef/knife-azure: Chef knife plug-in for Microsoft Azure
https://github.com/chef/knife-azure
手順
■ Azure AD のサービスプリンシパルの設定
1. アプリの登録
Chef クライアントがユーザーの代わりにアクセスするためのサービスプリンシパルを登録します。
Azure Active Directory のメニューから、[アプリの登録] - [+アプリケーションの登録]でアプリケーションを登録します。
- 名前
- 任意の名前
- アプリケーションの種類
- 既定のまま
- サインオン URL
2. クライアント ID と シークレットキーの取得
作成したアプリケーションに移動し、[キー]メニューから、新しいキーを作成します。
※作成したキーは、メニューから移動すると消えるためメモしておきます。

3. 権限の割り当て
Chef クライアントからサブスクリプションにアクセスできるように、権限を割り当てます。
[サブスクリプション]の画面から登録したアプリケーションを所有者として割り当てます。
■ Chef Development Kit のインストール
1. ダウンロード
Windows の場合は、MSIを実行します。
※最新版は、knife-azureが動かない(listen のバージョンが、3.1.5と3.0.6でconflictする)ため、古いバージョン(1.6.1等)をインストールします。
※Linux版・Windows版ともに同じです。
2. knife-azure のインストール
コマンドプロンプト もしくは PowerShell を開き、knife の Azure 用モジュールをインストールします。
chef gem install knife-azure
■ Starter Kit のダウンロードと knife.rb の編集
1. Chef のポータルからStarter Kitをダウンロード
管理用の設定ファイルや公開鍵をダウンロードします。
ポータル: https://manage.chef.io/organizations/[組織名]/getting_started
※組織名は読み替えます。
2. knife.rb の編集
ダウンロードした Starter Kit を展開すると、.chef フォルダーに、knife.rb が入っています。

中身を開いて、以下を追加します。
knife[:azure_subscription_id] = "33325c7f-089d-493b-9ad9-1400a8da5394"
knife[:azure_tenant_id] = "72f988bf-86f1-41af-91ab-2d7cd011db47"
knife[:azure_client_id] = "<クライアント ID>"
knife[:azure_client_secret] = "<シークレットキー>"
ファイルの全体
# See http://docs.chef.io/config_rb_knife.html for more information on knife configuration options
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name "tsunomur"
client_key "#{current_dir}/tsunomur.pem"
chef_server_url "https://api.chef.io/organizations/tsunomurit"
cookbook_path ["#{current_dir}/../cookbooks"]
knife[:azure_subscription_id] = "33325c7f-089d-493b-9ad9-1400a8da5394"
knife[:azure_tenant_id] = "72f988bf-86f1-41af-91ab-2d7cd011db47"
knife[:azure_client_id] = "<クライアント ID>"
knife[:azure_client_secret] = "<シークレットキー>"
Cookbook の作成
以下ドキュメントの[Cookbook の作成] から [Chef サーバーに Cookbook をアップロードする]を参考にします。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/chef-automation#creating-a-cookbook
■ Azure へデプロイ
Starter Kit を展開したフォルダーでコマンドを実行します。
サーバーの一覧
knife azurerm server list
サーバーの展開
【Windows】
knife azurerm server create --azure-resource-group-name 20170912_chefvm4 --azure-vm-name tsnrvm04 --azure-service-location 'westus' --azure-image-reference-publisher 'MicrosoftWindowsServer' --azure-image-reference-offer 'WindowsServer' --azure-image-reference-sku '2012-R2-Datacenter' --azure-image-reference-version 'latest' -x azureuser -P 1qazXSW2! -r "recipe[webserver]" -N "tsnrvm04"
-N オプションは、Chef に登録される Node です。組織内で重複は許されないため、ユニークなものを設定します(仮想マシン名と合わせると便利です)。
指定しないと、以下のようなエラーが出ます。
Node exists, overwrite it? (Y/N) y
ERROR: 405 "Method Not Allowed"
ERROR: Something went wrong. Please use -VV option for more details.
C:\chef>knife azurerm server create --azure-resource-group-name 20170912_chefvm --azure-vm-name tsnrvm01 --azure-service-location 'westus' --azure-image-reference-publisher 'MicrosoftWindowsServer' --azure-image-reference-offer 'WindowsServer' --azure-image-reference-sku '2012-R2-Datacenter' --azure-image-reference-version 'latest' -x azureuser -P 1qazXSW2! -r "recipe[cbk1::rec2]" -c ./knife.rb -N tsunomurcf4
WARN: Azurerm subcommands are experimental and of alpha quality. Not suitable for production use. Please use ASM subcommands for production.
WARN: Azurerm subcommands are experimental and of alpha quality. Not suitable for production use. Please use ASM subcommands for production.
Creating new client for tsunomurcf4
Creating new node for tsunomurcf4
INFO:Resource Group 20170912_chefvm already exist. Skipping its creation.
INFO:Adding new VM tsnrvm01 to this resource group.
Creating Virtual Machine....
Virtual Machine creation successfull.
Deployment name is: tsnrvm01_deploy
Deployment ID is: /subscriptions/33325c7f-089d-493b-9ad9-1400a8da5394/resourceGroups/20170912_chefvm/providers/Microsoft.Resources/deployments/tsnrvm01_deploy
VM Details ...
-------------------------------
Virtual Machine name is: tsnrvm01
Virtual Machine ID is: /subscriptions/33325c7f-089d-493b-9ad9-1400a8da5394/resourceGroups/20170912_chefvm/providers/Microsoft.Compute/virtualMachines/tsnrvm01
Server Name tsnrvm01
Size Standard_A1
Provisioning State Succeeded
Location westus
Publisher MicrosoftWindowsServer
Offer WindowsServer
Sku 2012-R2-Datacenter
Version latest
OS Type Windows
Public IP address 13.88.13.25
FQDN tsnrvm01.westus.cloudapp.azure.com
■展開後の確認
仮想マシンの拡張
拡張を確認すると、Chef クライアントがインストールされています。

【Windows】
C:ドライブにchefフォルダが作成
レシピの適用
chef-client.bat を実行するとレシピが適用されます。

注意
なぜか、client.rb の node_name の末尾に 0 が付与されているため要編集です。
※設定が間違っている可能性もあり
chef_server_url "https://api.chef.io/organizations/tsunomurit"
validation_client_name "chef-validator"
log_level :info
file_cache_path 'c:/chef/cache'
file_backup_path 'c:/chef/backup'
cache_options ({:path => 'c:/chef/cache/checksums', :skip_expires => true})
node_name 'tsunomurcf40' <----------------------------- ここ
verify_api_cert
trusted_certs_dir "c:/chef/trusted_certs"
log_location 'C:\WindowsAzure\Logs\Plugins\Chef.Bootstrap.WindowsAzure.ChefClient\1210.12.109.1005/chef-client.log'
chef_server_url 'https://api.chef.io/organizations/tsunomurit'
validation_client_name 'chef-validator'
client_key 'c:/chef/client.pem'
validation_key 'c:/chef/validation.pem'
# Add support to use chef Handlers for heartbeat and
# status reporting to Azure
require "chef/azure/chefhandlers/start_handler"
require "chef/azure/chefhandlers/report_handler"
require "chef/azure/chefhandlers/exception_handler"
start_handlers << AzureExtension::StartHandler.new("C:/Packages/Plugins/Chef.Bootstrap.WindowsAzure.ChefClient/1210.12.109.1005")
report_handlers << AzureExtension::ReportHandler.new("C:/Packages/Plugins/Chef.Bootstrap.WindowsAzure.ChefClient/1210.12.109.1005")
exception_handlers << AzureExtension::ExceptionHandler.new("C:/Packages/Plugins/Chef.Bootstrap.WindowsAzure.ChefClient/1210.12.109.1005")
Hosted Chef のダッシュボードから確認
参考
chef/knife-azure: Chef knife plug-in for Microsoft Azure
https://github.com/chef/knife-azure
https://github.com/chef/knife-azure/blob/master/docs/ARM.md
Chef による Azure 仮想マシンのデプロイ | Microsoft Docs
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/chef-automation
chef-client — Chef Docs
※chef-client の実行からサーバーへの適用までの動作が書かれています。
https://docs.chef.io/chef_client.html#the-chef-client-title-run
chef-partners/azure-chef-extension: The development repository for the Chef Extension available through Azure
※Azure の Chef 拡張のリポジトリです
https://github.com/chef-partners/azure-chef-extension





