LoginSignup
35

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-03

目的

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

参考

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
35