永遠の初級エンジニア

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

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を実際に使ってみます。