Ubuntu 16.04をインストールしたECSでChef Server Workstationを設定する方法

このチュートリアルでは、Ubuntu 16.04をインストールした**Alibaba Cloud Elastic Compute Service (ECS)**上に**Chef Server Workstation**を設定します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/how-to-install-chef-server-workstation-on-ecs_595054)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

アルスラーン・ウド・ディン・シャフィク（Alslan Ud Din Shafiq）著、[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.2fbd8a85OagnzQ) 執筆、 [Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.2fbd8a85OagnzQ)は、技術的な知識やベストプラクティスをクラウドコミュニティ内で共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

Chefは自動化のための強力なプラットフォームで、インフラストラクチャの設定、デプロイ、ネットワーク全体の管理を自動化するのに役立ちます。インフラストラクチャをコードに変換し、複数のノードやサーバーにまたがるリソースの管理とデプロイを可能にします。コードを他の環境に展開する前に、コードを作成し、ワークステーションでテストします。ワークステーションでは、インフラストラクチャを管理し、クックブックを書くことができます。

このチュートリアルでは、Ubuntu 16.04でAlibaba Cloud Elastic Compute Service (ECS)にChef Serverワークステーションをインストールして設定する方法を紹介します。

#前提条件
- Alibaba Cloud [Elastic Compute Service](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.2fbd8a85OagnzQ) (ECS)を有効にし、有効な支払い方法を確認する必要があります。新規ユーザーの場合は、新規アカウントで[300ドル～1200ドル相当のAlibaba Cloudクレジットを獲得](https://www.alibabacloud.com/referral?spm=a2c65.11461447.0.0.2fbd8a85OagnzQ&referralCode=ffxt3q)できます。ECSインスタンスのセットアップ方法がわからない場合は、こちらの[チュートリアル](https://www.alibabacloud.com/blog/3-ways-to-set-up-a-linux-server-on-alibaba-cloud_572384?spm=a2c65.11461447.0.0.2fbd8a85OagnzQ)または[クイックスタートガイド](https://www.alibabacloud.com/help/doc-detail/25422.htm?spm=a2c65.11461447.0.0.2fbd8a85OagnzQ)を参照してください。ECSインスタンスは、少なくとも8GBのRAMと4コアプロセッサを搭載している必要があります。
- Alibaba Cloudから登録されたドメイン名。すでにAlibaba Cloudまたは他のホストからドメインを登録している場合は、そのドメインネームサーバーレコードを更新することができます。
- [ドメイン名]()は、あなたのAlibaba Cloud ECSのIPアドレスを指している必要があります。
- Alibaba CloudのVNCコンソールまたはPCにインストールされているSSHクライアントにアクセスします。
- サーバーのホスト名を設定し、root権限を持つユーザーを作成します。

#サーバーの設定
パッケージのインストールを進める前に、以下のコマンドを使用してUbuntuシステムをアップデートしてください。このコマンドを実行するには、root 以外のユーザから sudo 権限でログインすることを忘れないでください。

```
# sudo apt update && sudo apt upgrade
```

#Chef Serverをインストール
Chefサーバーは、Chefを使用するすべてのノードとワークステーション間の相互作用のハブとして動作します。変更が加えられると、これらはChefサーバーにアップロードされます。その後、ChefクライアントはChefサーバにアクセスし、各ノードの設定をサポートします。Chefサーバーをインストールするには、以下の手順に従ってください。

Chefサーバーのコアをダウンロードする必要があります。ダウンロードするには、以下のコマンドを実行します。


```
# wget https://packages.chef.io/files/stable/chef-server/12.17.33/ubuntu/16.04/chef-server-core_12.17.33-1_amd64.deb  
```

以下のコマンドを使用して.debをデパッケージしてインストールする必要があります。

```
# sudo dpkg -i chef-server-core_12.17.33-1_amd64.deb
```

以下のコマンドを実行して、ダウンロードした.debファイルを削除します。

```
# sudo rm chef-server-core_12.17.33-1_amd64.deb
```

以下のコマンドを実行して、Chefサーバーのコマンドラインユーティリティを起動します。これでChefサーバーのサービスが起動します。

```
# sudo chef-server-ctl reconfigure
```

インストールが成功すると以下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/456dffc3-5a94-2ede-e528-ab7afde6724a.png)


#Chefのユーザーと組織を作成
ノードとワークステーションをChefサーバーにリンクするには、RSA秘密鍵を関連付けた管理者ユーザーと組織を作成する必要があります。そのためには、以下の手順に従ってください。

以下のコマンドを実行して、キーを保存するディレクトリを作成します。

```
# mkdir .chef
```

ユーザーを作成するには、Chefコマンドラインユーティリティを使用します。以下のコマンドを実行してユーザーを作成し、aareezを希望のユーザー名に、123@example.comを希望のメールアドレスに、ファイル名 aareez.pemをyour_username.pemに、654321Abを希望のパスワードに、Arslanをファーストネームに、Malikをラストネームに置き換えることを忘れないようにしてください。

```
# sudo chef-server-ctl user-create aareez Arslan Shafiq 123@example.com '654321Ab' --filename ~/.chef/aareez.pem
```

組織を作成し、上記の手順で作成したユーザーをadminsとbilling adminsのセキュリティグループに追加します。そのためには、以下のコマンドを実行します。


```
# sudo chef-server-ctl org-create org_name "org_full_name" --association_user aareez --filename ~/.chef/org_name.pem
```

org_name と org_full_name を組織名に、aareez をユーザー名に置き換えることを忘れないでください。

#Gitをインストール
Chef Workstation用のAlibaba Cloudインスタンスを新規作成し、アップデートします。

```
# sudo apt update && sudo apt upgrade
```

以下のコマンドでGitをインストールします。

```
# sudo apt-get install git
```

(オプション) 以下のコマンドを実行して Git を設定します。名前と有効なメールアドレスを指定することで、コミットメッセージに正しい情報が含まれるようになります。

```
# git config --global user.name "Aareez"
# git config --global user.email "xyz@example.com”
```


#Chef ワークステーションを設定
Chef ワークステーションを使用すると、レシピ、クックブック、属性、および Chef の設定に加えられたその他の変更を作成して設定することができます。Chef Development Kitをインストールして設定するには、以下の手順に従ってください。

以下のコマンドを実行してChef Development Kitをダウンロードする必要があります。

```
# wget https://packages.chef.io/files/stable/chefdk/3.3.23/ubuntu/16.04/chefdk_3.3.23-1_amd64.deb
```

Chef Development Kitをインストールするには、以下のコマンドを実行します。

```
# sudo dpkg -i chefdk_3.3.23.23-1_amd64.deb
```

以下のコマンドを実行して、ダウンロードした.debファイルを削除します。

```
# sudo rm chefdk_3.3.23-1_amd64.deb
```

以下のコマンドを実行してchef-repoを生成します。

```
# chef generate app chef-repo
```

chef-repoに移動します。

```
# cd chef-repo
```

aareez.pem、organization-validator.pem、knife.rbを格納する.chefディレクトリを作成します。以下のコマンドを実行します。

```
# mkdir .chef
```

#RSA 秘密鍵の追加
Chefサーバの設定・インストール時に生成されたRSAキーをワークステーションに配置します。そのためには、以下のコマンドを実行します。

```
# scp aareez@softpedia.xyz:~/.chef/*.pem ~/chef-repo/.chef/.chef/.
```

aareezをユーザー名に、softpedia.xyzをドメイン名またはECSのIPアドレスに置き換えることを忘れないでください。

ファイルが正常にコピーされたかどうかを確認するには、以下のコマンドを実行します。

```
# ls ~/chef-repo/.chef
```


#バージョン管理の設定
.gitignore ファイルに .chef ディレクトリを追加する必要があります。そのためには、以下のコマンドを実行します。

```
# echo ".chef" > .gitignore
```

既存のファイルをすべて追加してコミットする必要があります。そのためには、以下のコマンドを実行します。

追加するには、以下のコマンドを実行します：# git add .

コミットする場合は以下のコマンドを実行します: # git commit -m "initial commit"

以下のコマンドを実行することでステータスを確認することができます。

```
# git status
```


#knife.rbを生成する
knife.rbファイルを生成するには、以下の手順に従います。

以下のコマンドを実行して/chef-repo/.chefに移動します。

```
# cd ~/chef-repo/.chef
```

knife.rbというファイルを作成し、以下のコマンドを実行するとnano text editorでファイルが開きます。

```
# sudo nano knife.rb
```

開いたファイルに以下のテキストをコピーして貼り付けます。aareezはChefサーバーのユーザー名、org_nameは組織名、chef_server_urlの値は独自のドメインまたはIPアドレスに置き換えることを忘れないでください。

```
current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                'aareez'
client_key               "aareez.pem"
validation_client_name   'org_name-validator'
validation_key           "org_name-validator.pem"
chef_server_url          'https://softpedia.xyz/organizations/org_name'
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"] 
```

/chef-repo に移動して、以下のコマンドを使って取得してください。

```
# cd ..
# knife ssl fetch
```

knife.rbが正しく設定されているかどうかは、以下のコマンドを実行することで確認できます。

```
# knife client list
```

ワークステーションとサーバが設定されていれば、最初のノードをブートストラップすることができます。

#ノードをブートストラップする
ノードのブートストラップでは、Chefクライアントがインストールされます。これはノードを検証し、Chefサーバからの読み込みと設定を可能にします。ノードをブートストラップするには、以下の手順に従ってください。

以下のコマンドを実行して/chef-repo/.chefに移動します。

```
# cd ~/chef-repo/.chef
```

sudo権限を持つユーザーとして、以下のコマンドを実行します。aareezにはノードのユーザ名、654321Abにはユーザのパスワード、softpedia.xyzにはChefサーバのIPアドレスまたはドメイン、imaareezにはノードに付けたい名前を指定します。

```
# knife bootstrap softpedia.xyz -x aareez -P 654321Ab -sudo --node-name imaareez
```

以下のコマンドを実行することで、ノードがブートストラップされているかどうかを確認することができます。

```
# knife client list
```


#ファイアウォールとポートの設定
ファイアウォールを有効にしている場合は、クラウドサーバーの Alibaba Cloud セキュリティグループで、ポート 80/tcp と 443/tcp の例外を追加するルールを定義する必要があります。ECSインスタンスを作成する際にこれらのポートを有効にすることができますが、これらのポートのブロックを解除し忘れた場合は、このガイドの手順に従うことができます: [https://www.alibabacloud.com/help/doc-detail/25471.htm](https://www.alibabacloud.com/help/doc-detail/25471.htm?spm=a2c65.11461447.0.0.2fbd8a85OagnzQ)

おめでとうございます。これで、ECSインスタンスにChef ServerとChef Server Workstationが正常にインストールされ、設定されました。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*