LoginSignup
2
2

More than 5 years have passed since last update.

Chef を使って Azure に仮想マシンをデプロイする(ARM)

Last updated at Posted at 2017-10-13

※2017/9/12現在の記事です。

:one:ドキュメント

以下の knife の Azure プラグインの公式ドキュメントは必ず目を通します。
chef/knife-azure: Chef knife plug-in for Microsoft Azure
https://github.com/chef/knife-azure

:two:手順

■ Azure AD のサービスプリンシパルの設定

1. アプリの登録

Chef クライアントがユーザーの代わりにアクセスするためのサービスプリンシパルを登録します。
Azure Active Directory のメニューから、[アプリの登録] - [+アプリケーションの登録]でアプリケーションを登録します。

image.png

  • 名前
    • 任意の名前
  • アプリケーションの種類
    • 既定のまま
  • サインオン URL

2. クライアント ID と シークレットキーの取得

作成したアプリケーションに移動し、[キー]メニューから、新しいキーを作成します。
※作成したキーは、メニューから移動すると消えるためメモしておきます。
image.png

また、アプリケーション ID も併せてメモしておきます。
image.png

3. 権限の割り当て

Chef クライアントからサブスクリプションにアクセスできるように、権限を割り当てます。
[サブスクリプション]の画面から登録したアプリケーションを所有者として割り当てます。

image.png

■ 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
※組織名は読み替えます。

image.png

2. knife.rb の編集

ダウンロードした Starter Kit を展開すると、.chef フォルダーに、knife.rb が入っています。
image.png

中身を開いて、以下を追加します。

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] = "<シークレットキー>"

ファイルの全体

knife.rb
# 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 クライアントがインストールされています。
image.png

【Windows】

C:ドライブにchefフォルダが作成

image.png

レシピの適用

chef-client.bat を実行するとレシピが適用されます。
image.png

注意

なぜか、client.rb の node_name の末尾に 0 が付与されているため要編集です。
※設定が間違っている可能性もあり

client.rb
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 のダッシュボードから確認

IPアドレスや Uptime が入っています。
image.png

:three: 参考

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2