目的
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権限を持たせる。
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を記述し、インストールする。
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