何の話?
AWS OpsWorks For Chef Automateはre:invent2016で発表された、フルマネージドのChef serverです。
https://aws.amazon.com/jp/opsworks/chefautomate/
OpsWorksは以前からChefに対応していましたが、スタックとかレイヤーとか色々概念があって、単にChefやりたいだけなんだけど・・・って人は結構いたんではないでしょうか?
OpsWorks For Chef Automate は単純にAWS上で動かせるChef Serverですので、そういう人にも使えるんではないかと思います。
Chef Automateをデプロイ
マネージメントコンソールからOpsWorksの画面を開きます。
Go to OpsWorks for Chef Automate
をクリックします。
Create Chef Automate server
をクリックします。
Chef Serverの名前、リージョン、インスタンスタイプを決めます。
Chef serverにSSHログインする場合は、Keyペアを選択します。
VPC、SG、IAM関連を選択します。
メンテナンス期間、バックアップ時間を設定します。
Chef Serverの作成が始まります。
20分くらいかかるみたいです。
完了しました。
Download credentials
をクリックすると、Chef serverのダッシュボードにログインするユーザ名、パスワード情報がダウンロードされます。
Download Starter Kit
をクリックし、starter_kit.zipをダウンロードしておきます。
Server Information を見るとChefのバージョンは現在12.11.1でした。
画面上のChef Automate Dashboard
をクリックして、ダッシュボードにアクセスします。
オレゴンリージョンにインスタンスが作成されています。
グローバルIPを持っていますので、ノードは別リージョンでも管理できます。オンプレでもいけるではないかと思います。
デフォルトで作成されるSGはSSHとHTTPSがAll Permitなので、必要に応じて制限をかける必要があります。
Download credentials
でダウンロードしたログイン情報でログインします。
Chef Automateに接続する
ダウンロードしたStarterKitを展開します。
こんな構成になっています。
$ tree -a
.
├── .chef
│ ├── ca_certs
│ │ └── opsworks-cm-ca-2016-root.pem
│ ├── knife.rb
│ └── private.pem
├── Berksfile
├── README.md
├── chefignore
├── cookbooks
│ └── README.md
├── environments
│ └── README.md
├── roles
│ └── README.md
└── userdata.sh
.chef配下に接続するための情報がすでに構成済みなので、そのままknifeコマンドが使えます。
base_dir = File.join(File.dirname(File.expand_path(__FILE__)), '..')
log_level :info
log_location STDOUT
node_name 'pivotal'
client_key File.join(base_dir, '.chef', 'private.pem')
syntax_check_cache_path File.join(base_dir, '.chef', 'syntax_check_cache')
cookbook_path [File.join(base_dir, 'cookbooks')]
chef_server_url 'https://chef-server-y3rrxxxxxxxxxx.us-west-2.opsworks-cm.io/organizations/default'
ssl_ca_file File.join(base_dir, '.chef', 'ca_certs', 'opsworks-cm-ca-2016-root.pem')
trusted_certs_dir File.join(base_dir, '.chef', 'ca_certs')
$ knife client list
default-validator
knife client show default-validator
admin: false
chef_type: client
name: default-validator
validator: true
Chefを使ってみる
ここからはChefを使っている人は普通にChefを使えると思います。
下記を参照に動かしてみます。
http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/opscm-starterkit.html
Berkshelfを使ってApacheをインストールしてみます。
source "https://supermarket.chef.io"
cookbook "chef-client"
cookbook 'apache2'
Cookbookをダウンロードします。
$ berks install
Resolving cookbook dependencies...
Fetching cookbook index from https://supermarket.chef.io...
Using apache2 (3.2.2)
Installing chef-client (7.0.2)
Using compat_resource (12.16.2)
Using cron (3.0.0)
Using logrotate (2.1.0)
Using windows (2.1.1)
Installing ohai (4.2.3)
Chef Serverにアップロードします。
$ SSL_CERT_FILE='.chef/ca_certs/opsworks-cm-ca-2016-root.pem' berks upload
Uploaded apache2 (3.2.2) to: 'https://chef-server-y3rrxxxxxxxxxx.us-west-2.opsworks-cm.io:443/organizations/default'
Uploaded chef-client (7.0.2) to: 'https://chef-server-y3rrxxxxxxxxxx.us-west-2.opsworks-cm.io:443/organizations/default'
Uploaded compat_resource (12.16.2) to: 'https://chef-server-y3rxxxxxxxxxx.us-west-2.opsworks-cm.io:443/organizations/default'
Uploaded cron (3.0.0) to: 'https://chef-server-y3rrxxxxxxxxxx.us-west-2.opsworks-cm.io:443/organizations/default'
Uploaded logrotate (2.1.0) to: 'https://chef-server-y3rrxxxxxxxxxx.us-west-2.opsworks-cm.io:443/organizations/default'
Uploaded ohai (4.2.3) to: 'https://chef-server-y3rrxxxxxxxxxx.us-west-2.opsworks-cm.io:443/organizations/default'
Uploaded windows (2.1.1) to: 'https://chef-server-y3rrxxxxxxxxxx.us-west-2.opsworks-cm.io:443/organizations/default'
$ knife cookbook list
apache2 3.2.2
chef-client 7.0.2
compat_resource 12.16.2
cron 3.0.0
logrotate 2.1.0
ohai 4.2.3
windows 2.1.1
デプロイしてみます。
knife bootstrap xx.xx.xx.xx -N test-linux -x ec2-user --sudo --run-list "recipe[apache2]"
(略)
xx.xx.xx.xx Running handlers:
xx.xx.xx.xx Running handlers complete
xx.xx.xx.xx Chef Client finished, 81/103 resources updated in 12 seconds
ダッシュボードではこんな感じで見えます。
費用
費用は 管理ノード×時間 みたいです。
10ノードくらいまでは無料なのかな?
それとは別にEC2の費用がかかるようです。
まとめ
簡単になってきたとはいえ、Chef Serverを立てるのはめんどくさいですし、Hosted Chefとかは費用も気になりますが、普段使っているAWS上で簡単にセットアップできます。また最初の接続設定とか結構ハマったりしますが、starter-kitがあるので、そこも簡単にできると思います。
自動バックアップとかもあるので、管理はかなり簡単にできるのではないかと思います。
ただ、Chefをがっつり使っている人はすでに環境があるでしょうし、これをきっかけにChef始めようかなーって人がどんだけいるのか?っていう気もしないではないです。