永遠の初級エンジニア

元OracleDBA、現AWSな低脳エンジニアの日記

EC2のRHELにKnife-Zeroインストール

EC2上の多数のインスタンスを管理する目的でChefを導入検討。

どのChefを選ぶべきかは以下が参考になる。
http://www.creationline.com/lab/9970


以下からEC2上にchef-dkをインストールします。
https://downloads.chef.io/chef-dk/redhat/Chef Development Kit | Chef Downloads | Chef


待ちます...
ダウンロードが完了したら、実行してください。
ツールのインストールが始まります。
インストールが完了すればターミナルに戻ってknife-zeroを入れます。

$ chef gem install knife-zero
$ chef generate repo chef
$ chef exec knife cookbook create apache -o cookbooks

試しにレシピを作成する

vi cookbooks/apache/recipes/default.rb
package "httpd" do
  action :install
end

service "httpd" do
  action [ :enable, :start ]
end

対象ノードを用意する(sgにknife-zeroのipを追加する必要)

新規ノードを追加、Chefクライアントインストールのみ→--nameでNameタグのvalueを追加

knife zero bootstrap 54.169.166.107 -x root -i ~/.ssh/aws_ap-southeast-1.pem --node-name Chef-node1
knife zero bootstrap 54.179.160.36 -x root -i ~/.ssh/aws_ap-southeast-1.pem --node-name Chef-node2

ロールリストを追加&レシピ実行

今回はnodeを2台追加する。

knife zero bootstrap 54.169.166.107 -x root -i ~/.ssh/aws_ap-southeast-1.pem --node-name Chef-node1 -r 'role[chef-sample]'
knife zero bootstrap 54.179.160.36 -x root -i ~/.ssh/aws_ap-southeast-1.pem --node-name Chef-node2 -r 'role[chef-sample]'

追加したノードにChef-Clientを再実行

これを実行すると更新したレシピをnodeに送信してChef-Clientを実行してレシピの内容を反映してくれる。
./nodeディレクトリのある場所で実行する

knife zero converge "name:*" -a knife_zero.host -x root -i ~/.ssh/aws_ap-southeast-1.pem -o 'role[chef-sample]' -C 2
  • -C 並列度
  • -o ランリストを上書きする

これで複数台のnodeを管理するknife-zero環境が出来上がった。

次はレシピとテンプレートを作成する。

CodeDeploy agentを既存EC2インスタンス(CentOS6)に入れてみた

CodeDeployとは

  • CodeDeployはEC2/AutoScalingのみに特化したデプロイ系サービス
  • 似たものではElasticBeanstalk、OpsWorksなどがある
  • ローテーションやCIツールとの連携などの細やかなデプロイが可能なサービス
  • 費用はかからずEC2インスタンス利用料のみ


東京、オレゴンシンガポールの3リージョンで実行したかったがシンガポールが未対応。
今後の対応に期待してシンガポールではなくアイルランドかフランクフルトを選択することにする。

Supported Regions

米国東部 (バージニア北部)
米国西部 (オレゴン)
EU (アイルランド)
EU (フランクフルト)
アジアパシフィック (シドニー)
アジアパシフィック (東京)

既存のインスタンスで使うにはCodeDeploy Agentを入れる必要がある。
環境としてはCentOS6に色々入っている状態のAMIを使用する。

CentOSにagentインストール

sudo yum update
sudo yum install ruby → 1.8.7インストール済み
sudo yum install aws-cli → インストール済み
cd ~
aws s3 cp s3://aws-codedeploy-eu-central-1/latest/install . --region eu-central-1
sudo ./install auto

インストールしようとしたらソースの置いてあるS3にアクセスができずにエラーが出た。
どうやら事前にIAMロールでCodeDeployServiceRoleを付与する必要があるらしい。

個別でIAMを作ってみたがEC2作成画面でIAMを選択出来ない。
調べてみるとインスタンスプロファイルを作成して登録していないと選択出来ないようだ。
この辺りはよくわかっていないので後ほど調べる。

インスタンスプロファイル作成
aws iam create-instance-profile --instance-profile-name CodeDeployServiceRole
インスタンスプロファイル登録
aws iam add-role-to-instance-profile --role-name CodeDeployServiceRole --instance-profile-name CodeDeployServiceRole

さらにcredentialsも設定できていなかったので設定。

# aws configure
AWS Access Key ID [None]: AKIAJTDHWNRQ64IKDGBQ
AWS Secret Access Key [None]: ****************************
Default region name [None]:
Default output format [None]:

再度

# aws s3 cp s3://aws-codedeploy-eu-central-1/latest/install . --region eu-central-1

やっと進んだ、と思ったら

# sudo ./install auto
I, [2015-11-17T12:34:04.863059 #3583]  INFO -- : Starting Ruby version check.
E, [2015-11-17T12:34:04.863244 #3583] ERROR -- : Current running Ruby version for root is 1.8.7, but Ruby version 2.0.x needs to be installed.
E, [2015-11-17T12:34:04.863280 #3583] ERROR -- : If you have Ruby version 2.0.x installed for other users, please create a symlink to /usr/bin/ruby2.0.
E, [2015-11-17T12:34:04.863309 #3583] ERROR -- : Otherwise please install Ruby 2.0.x for root user.

今度はRubyのバージョンでエラー。

# ruby -v
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]

現状1.8.7なのでこれを2.0以上に上げる必要がある。

rubyをremoveして安定版をインストール
yum remove ruby
cd /opt
git clone git://github.com/sstephenson/rbenv.git
mkdir /opt/rbenv/plugins
cd /opt/rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git

vi /etc/profilevi 
export RBENV_ROOT="/opt/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

再ログインするとか、シェルを再起動して環境設定を反映。

# yum install gcc make openssl-devel libffi-devel readline-devel

2015/11/17現在で2.2.3が最新安定バージョンのようなのでそちらを適用。

# rbenv install 2.2.3
# rbenv global 2.2.3
# ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

再度やってみる
[root@khkstg-RMQ-uw2b ~]# ./install auto
I, [2015-11-17T14:47:36.808461 #30200]  INFO -- : Starting Ruby version check.
E, [2015-11-17T14:47:36.808562 #30200] ERROR -- : Current running Ruby version for root is 2.2.3, but Ruby version 2.0.x needs to be installed.
E, [2015-11-17T14:47:36.808586 #30200] ERROR -- : If you have Ruby version 2.0.x installed for other users, please create a symlink to /usr/bin/ruby2.0.
E, [2015-11-17T14:47:36.808603 #30200] ERROR -- : Otherwise please install Ruby 2.0.x for root user.

あれ、、、?、、、あっ。
2.0.x以上じゃなくて。2.0.x系じゃないとダメなんだね。英語が読めないつらみ。

ruby2.0.0を入れる

rbenvだとglobalでデフォルトのバージョンを指定できるので削除する必要はなく指定するだけでOKっぽい。

# rbenv install 2.0.0-p647
# rbenv global 2.0.0-p647
# ruby -v
agentインストール実行
# ./install auto

  インストールしています  : codedeploy-agent-1.0-1.825.noarch                                                                       1/1
Starting codedeploy-agent:Installing codedeploy-agent auto-update cron in '/etc/cron.d/codedeploy-agent-update'...
Installing codedeploy-agent auto-update cron in '/etc/cron.d/codedeploy-agent-update'...Complete
  Verifying               : codedeploy-agent-1.0-1.825.noarch                                                                       1/1

インストール:
  codedeploy-agent.noarch 0:1.0-1.825                                                                                                  

完了しました!

無事に成功しました!

最後に自動起動を設定して完了。

chkconfig --level 3 codedeploy-agent

次はCodeDeployを実際に使ってみます。

ロードバランサとDNSラウンドロビン

Webエンジニアが知っておきたいインフラの基礎」を読んでいて気になった部分をメモ。

ネットワークに弱いのでこの辺りも必修。

ロードバランサ

L4 TCP UDPまで

  • メリット:確実に意図通りに分散できる
  • デメリット:機器の追加が必要、障害点が増える

DNSラウンドロビン

L7 HTTP SMTPまで
L7のロードバランサはリバースプロキシともいう

  • メリット:追加の設備が必要なく障害点が増えない、一人からの大量アクセスが分散できない
  • デメリット:切り替えが遅い

基本はロードバランサを利用しつつ、適宜DNSラウンドロビンを併用していくのが良いらしい。ロードバランサにはヘルスチェックと言って振り分け先の応答を確認して応答なければ切り離したりも出来る。

高機能なロードバランサだと振り分け先がダメだとエラーを返さずに別の振り分け先に振り分け直す機能もある。nginxはOSSだか同じ機能があるらしい。nginxはapacheと似たようなものだけど高機能、というイメージがあったがやはり細かい部分で違いがあるようだ。

vim初級者脱却の為にその1

Linuxvim自体は何年も前から使っていたが多少効率が悪くても気にしていなかった。

別にそれほど困っているわけではないが作業画面を見て貰いながらの作業で使い慣れてないんですね、とツッコミを受ける。覚えたほうがいいよ、と。

恥ずかしいので少しはvimの扱いに慣れようと思う次第。

vim用途

程度。

普段使っているコマンド、キー

  • 保存:wq/q!
  • 編集:i
  • 変換:%s/text1/text2/gcc

本当に最低限。変換はつい最近覚えた程度。

抱えている問題

矢印キーカーソル移動が遅くて、、、。

まずはこれだけ覚える

  • w/e/b/W/E/B:単語単位の移動

取りあえず単語の頭に移動してくれる「w」だけ覚える。

  • h/j/k/l:カーソル移動

10lで右に10文字移動等。
今まで右矢印キーでピーっと移動していた時間が短縮できる。