AWS OpsWorks For Chef Automate で 簡単フルマネージドChef Server 【cloudpack大阪ブログ】


## 何の話？
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` をクリックします。

![Kobito.1l1oi0.png](https://qiita-image-store.s3.amazonaws.com/0/3246/08434c17-e7b7-b44c-70b3-5c79f3170687.png "Kobito.1l1oi0.png")

`Create Chef Automate server` をクリックします。

![Kobito.rcZ6rK.png](https://qiita-image-store.s3.amazonaws.com/0/3246/a562f6d7-7c18-f4e0-6663-bb793bb60f38.png "Kobito.rcZ6rK.png")

Chef Serverの名前、リージョン、インスタンスタイプを決めます。

![Kobito.8dzIdp.png](https://qiita-image-store.s3.amazonaws.com/0/3246/b3c3609a-5794-0c85-361d-ea63d8c94e43.png "Kobito.8dzIdp.png")

Chef serverにSSHログインする場合は、Keyペアを選択します。

![Kobito.YpQrG0.png](https://qiita-image-store.s3.amazonaws.com/0/3246/b418107b-3201-fff4-6570-479079b7d2af.png "Kobito.YpQrG0.png")

VPC、SG、IAM関連を選択します。

![Kobito.b3ktzU.png](https://qiita-image-store.s3.amazonaws.com/0/3246/4d024906-e212-e70a-66ac-e3900f932c33.png "Kobito.b3ktzU.png")

メンテナンス期間、バックアップ時間を設定します。

![Kobito.ReT8kE.png](https://qiita-image-store.s3.amazonaws.com/0/3246/b4b89457-d0f4-97b5-5371-d4d2eb04d373.png "Kobito.ReT8kE.png")


Chef Serverの作成が始まります。
20分くらいかかるみたいです。

![Kobito.v2eTbr.png](https://qiita-image-store.s3.amazonaws.com/0/3246/bd14cc34-36a4-589a-8340-5509aa681852.png "Kobito.v2eTbr.png")

完了しました。
`Download credentials` をクリックすると、Chef serverのダッシュボードにログインするユーザ名、パスワード情報がダウンロードされます。

`Download Starter Kit`をクリックし、starter_kit.zipをダウンロードしておきます。

Server Information を見るとChefのバージョンは現在12.11.1でした。

画面上の`Chef Automate Dashboard` をクリックして、ダッシュボードにアクセスします。

![Kobito.saexn4.png](https://qiita-image-store.s3.amazonaws.com/0/3246/3f16fbf8-46fc-59b4-59f1-b1936e1f7449.png "Kobito.saexn4.png")


オレゴンリージョンにインスタンスが作成されています。
グローバルIPを持っていますので、ノードは別リージョンでも管理できます。オンプレでもいけるではないかと思います。

![Kobito.hR71TY.png](https://qiita-image-store.s3.amazonaws.com/0/3246/46cb3e65-39de-6fb5-2a56-4faa01b72667.png "Kobito.hR71TY.png")

デフォルトで作成されるSGはSSHとHTTPSがAll Permitなので、必要に応じて制限をかける必要があります。

![Kobito.FhwzJU.png](https://qiita-image-store.s3.amazonaws.com/0/3246/b54c4a60-f921-8d81-f290-d14aacb83b2c.png "Kobito.FhwzJU.png")



`Download credentials` でダウンロードしたログイン情報でログインします。
![Kobito.UWJD5E.png](https://qiita-image-store.s3.amazonaws.com/0/3246/bfe70b0a-2aa5-61b5-3921-ff56c4e145ea.png "Kobito.UWJD5E.png")

ログインできました。
![Kobito.XwYCo3.png](https://qiita-image-store.s3.amazonaws.com/0/3246/1c7e9303-fdbd-5ecb-2791-37dc3ce90d75.png "Kobito.XwYCo3.png")

## Chef Automateに接続する

ダウンロードしたStarterKitを展開します。
こんな構成になっています。

```bash:
$ 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コマンドが使えます。

```bash:.chef/knife.rb
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')
```

```bash:
$ knife client list
default-validator
```

```bash:
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をインストールしてみます。

```bash:Berksfile
source "https://supermarket.chef.io"
cookbook "chef-client"
cookbook 'apache2'
```

Cookbookをダウンロードします。

```bash:
$ 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にアップロードします。

```bash:
$ 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'
```

```bash:
$ 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
```

ダッシュボードを見てもアップロードされているみたいです。
![Kobito.tGEXVX.png](https://qiita-image-store.s3.amazonaws.com/0/3246/10e18d9f-da94-07cc-8b6a-47dda1d8a96c.png "Kobito.tGEXVX.png")

デプロイしてみます。

```bash:
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
```

ダッシュボードではこんな感じで見えます。

![Kobito.5Od6gX.png](https://qiita-image-store.s3.amazonaws.com/0/3246/d5a919ad-3498-4a85-77f0-f338fe611ea8.png "Kobito.5Od6gX.png")



## 費用

費用は 管理ノード×時間 みたいです。
10ノードくらいまでは無料なのかな？
それとは別にEC2の費用がかかるようです。

![Kobito.yPr1HS.png](https://qiita-image-store.s3.amazonaws.com/0/3246/3f55cd19-f5a3-a867-90c4-c66e4eae34e6.png "Kobito.yPr1HS.png")


## まとめ

簡単になってきたとはいえ、Chef Serverを立てるのはめんどくさいですし、Hosted Chefとかは費用も気になりますが、普段使っているAWS上で簡単にセットアップできます。また最初の接続設定とか結構ハマったりしますが、starter-kitがあるので、そこも簡単にできると思います。
自動バックアップとかもあるので、管理はかなり簡単にできるのではないかと思います。
ただ、Chefをがっつり使っている人はすでに環境があるでしょうし、これをきっかけにChef始めようかなーって人がどんだけいるのか？っていう気もしないではないです。