Edited at

Knife-Zero bootstrapを用いてAmazon EC2にChefをインストールする際の手順

More than 3 years have passed since last update.


目的

Amaon EC2インスタンスにKnife-Zeroを介してChefをインストールする。

ほぼ以下のsawanoboly氏の記事の通りに進めるため、EC2にインストールする際に必要な手順のみを記述する。


前提条件


環境


  • ローカルホストOS : CentOS 6.5

  • Vagrant : 1.6.5

  • Bundler : 1.7.7

  • EC2 AMI : Amazon Linux AMI 2014.09.1 (HVM)


  • AWS上にEC2インスタンスを作成・SSH接続が可能であること。


[local@localhost VagrantEC2]$ vagrant up --provider=aws

Bringing machine 'default' up with 'aws' provider...
==> default: HandleBoxUrl middleware is deprecated. Use HandleBox instead.
            ...

[local@localhost VagrantEC2]$ vagrant ssh-config --host ec2 >> ~/.ssh/config
[local@localhost VagrantEC2]$ ssh ec2

__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
16 package(s) needed for security, out of 41 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-29-xx ~]$

Vagrant経由でEC2インスタンス立ち上げからSSH接続が可能であることまでを確認。


EC2ユーザーの作成

※この項目は必須ではありません

 ec2デフォルトユーザー(ec2-user)でもこれ以降の処理は可能。

 ユーザー作成を行わない場合は、以降の処理のSSH接続ユーザーおよび認証鍵をデフォルトユーザーのものに読み替えること。

 

Knife-Zero実行の際にEC2側で使用するユーザーを追加。

[ec2-user@ip-172-31-29-xx ~]$ sudo su -                                        

[root@ip-172-31-29-xx ~]# adduser remote
[root@ip-172-31-29-xx ~]# passwd remote

sudo権限を持たせる。


visudo

remote ALL=(ALL) ALL


 

SSH認証鍵を作成し、ローカルからSSH接続を行えるよう環境を構築。

[local@localhost ~]$ ssh-keygen -t rsa

Generating public/private rsa key pair.
        ...

[local@localhost VagrantEC2]$ ssh remote@(EC2インスタンスのIPアドレス) -i ~/.ssh/id_rsa
Enter passphrase for key '/home/local/.ssh/id_rsa':
Last login: Wed Dec 3 08:13:20 2014 from penta.tokai-soft.net

__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
16 package(s) needed for security, out of 41 available
Run "sudo yum update" to apply all updates.
[remote@ip-172-31-29-xx ~]$

 



  • SSH認証の設定の仕方がわからない場合

  以下の記事を参考

  ssh公開鍵認証を実装する(自分メモ)

  SSH ログインで Permission Denied


Knife-Zeroインストールおよび実行

ホームディレクトリ以下にChef-Repoディレクトリを作成。

bundle initを行い、Knife-Zero実行環境を作成する。

[local@localhost Chef-Repo]$ bundle init

 

作成されたGemfileに、以下のようにKnife-Zeroおよび必要なgemを記述し、インストールする。


Gemfile

source "https://rubygems.org"                                                                      

gem 'chef'
gem 'knife-zero'
gem 'rb-readline'


[local@localhost Chef-Repo]$ bundle install --path vendor/bundle

 

インストールが無事成功したら、knifeコマンドのデフォルト動作をローカルモードにするためknife.rbを作る。

[local@localhost Chef-Repo]$ mkdir .chef

[local@localhost Chef-Repo]$ echo 'local_mode true' > .chef/knife.rb

次に、以下のコマンドを入力し、EC2にChefをインストールする。

[local@localhost Chef-Repo]$ bundle exec knife zero bootstrap <EC2インスタンスのIPアドレス> -x remote -i ~/.ssh/id_rsa --hint ec2 --sudo

オプション解説


  • -x user    :SSH接続ユーザー名


  • -i key_path :SSH認証鍵のパス


  • --hint ec2 :OhaiヒントをEC2に設定

            Ohaiは接続先ノードの構成情報(メタデータ)を収集するツールであり、

            設定されたヒントに従い、構成情報を収集、JSON形式に整形、またChef-Clientに提供を行う。

            ここでは、EC2ノードの構成情報を収集するようヒントを設定している。


  • --sudo    :sudo権限で実行させる


EC2への接続が開始される。

途中、SSH認証鍵および接続先ユーザーのパスワードを要求されるため、入力する。

DL is deprecated, please use Fiddle

ffi-yajl/json_gem is deprecated, these monkeypatches will be dropped shortly
WARNING: No knife configuration file found
WARN: No cookbooks directory found at or above current directory. Assuming /home/local/Chef-Repo.
Connecting to (EC2のIPアドレス)
Enter passphrase for /home/local/.ssh/id_rsa: ← SSH認証鍵のパスワードを入力
knife sudo password:
Enter your password: ← 接続先ユーザーのパスワードを入力
Installing Chef Client...

 

認証が問題なく通れば、以下のメッセージが表示され、Chefがインストールされる。

Starting Chef Client, version 11.16.4

Creating a new client identity for ip-172-31-29-xx.ap-northeast-1.compute.internal using the validator key.
resolving cookbooks for run list: []
Synchronizing Cookbooks:
Compiling Cookbooks...
[2014-12-03T08:13:43+00:00] WARN: Node ip-172-31-29-xx.ap-northeast-1.compute.internal has an empty run list.
Converging 0 resources

Running handlers:
Running handlers complete
Chef Client finished, 0/0 resources updated in 1.591018293 seconds
[local@localhost Chef-Repo]$

 

最後に、EC2側でChefがインストールされていることを確認する。

[remote@ip-172-31-29-xx ~]$ chef-

chef-apply chef-client chef-shell chef-solo
[remote@ip-172-31-29-xx ~]$ chef-client -v
Chef: 11.16.4


レシピの適用

bootstrapが成功したことでEC2インスタンスが管理ノードとして登録された。

[local@localhost Chef-Repo]$ bundle exec knife node list

ip-172-31-29-xx.ap-northeast-1.compute.internal

 

参考元に従い、knife zero chef_clientを用いて、ノードにレシピを実行させる。

ここでは自作のscalaインストールレシピをEC2に適用する。

 

まずは、ノードのrun_listにsetup-scalaレシピを追加する。

[local@localhost Chef-Repo]$ bundle exec knife node run_list add ip-172-31-29-xx.ap-northeast-1.compute.internal setup-scala

次に、chef_client でrun_listに登録されたレシピを実行させる。


[local@localhost Chef-Repo]$ bundle exec knife zero chef_client 'name:*' --attribute ec2.public_ipv4 -x remote -i ~/.ssh/id_rsa.pem --sudo

オプション解説


  • --attribute attribute_name

  bootstrap時にOhaiが収集した構成情報を参照する。

  ここでは、EC2インスタンスのパブリックIPを参照している。

 

最後に、EC2側で確認。問題なくインストールが完了している。

[remote@ip-172-31-29-xx ~]$ scala -version

Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL


参考