AWS EC2上に作成したRHELのスナップショットをRubyで取得するまでの手順

======================================================================

# 目的
AWS EC2上にRHELを起動して、AWS SDK for Ruby のスナップショットスクリプトを動かします。
そのために、AWS EC2上のRHELに以下の設定を施します。

* ssh 設定（rootでなく、AmazonLinux 同様に、ec2-userでログインするようにする）
* ruby の最新版をインストール（ソースからインストールする）
* git の設定（サンプルスクリプトを取得するために設定）
* AWS SDK for Ruby のスナップショット（バックアップ）サンプルスクリプトを動かしてみる


***
# 前提
* [Vagrantで AWS EC2インスタンス（RHEL5.5）を作成する](http://qiita.com/Humangas/items/2997cc6701aa90687c04)の手順通り、予めVagrant でRHEL5.5 をAWS EC2 上に作成完了していること。

## バージョン
* REHL：5.5
* ruby：1.9.3（※本手順後）
* git：1.8.3.4（※本手順後）


***
# ssh 設定
## RHELサーバ側設定手順
EC2上にサーバ建てた直後のデフォルト状態では、Amazon Linux はec2-user でログインするが、RHELは、root でログインするようになっているため、それをセキュリティ向上のため、Amazon Linux 同様に変更する。

### パスワードログイン不許可設定
1. root でログイン
1.  ```# vi /etc/ssh/sshd_config``` で、以下の通り編集

  * パスワード認証 = no にする
  * チャレンジレスポンス認証、すなわちPAM認証 = no にする

   ```
   PasswordAuthentication no
   ChallengeResponseAuthentication no
   ```

### ssh root ログイン不許可設定	 
```# vi /etc/ssh/sshd_config``` で、以下の通り編集

  * root ログイン = no にする
  * コメント行は削除しても良い

  ```
  PermitRootLogin no
  # PermitRootLogin without-password
  ```

### root パスワード設定
```# passwd``` で、root パスワード設定(※構築時はパスワード設定なし)

### ログイン用ユーザ作成: ec2-user
```# useradd ec2-user -d /home/ec2-user```

### 公開鍵の移動
1. ```# mv /root/.ssh /home/ec2-user/``` ※root ログインはさせないため不要。そのため、公開鍵をログインユーザ側へ移動する
2.  ```# chown -R ec2-user:ec2-user /home/ec2-user/.ssh``` でユーザ権限

### ssh サービス再起動
```# service sshd restart```

###  接続確認
Teraterm や、Terminal などで、AWS のPublicDNS＆秘密鍵＆ec2-user でログイン出来ることを確認する。


## ワークステーション側設定
Vagrantfile のログインユーザをroot から、設定したログインユーザである、Pec2-user に変更する。

### Vagrantfile 設定
```$ vi Vagrantfile``` で、以下のログインユーザ設定をする。

* コメント行は削除しても良い 
	
  ```
  # override.ssh.username = "root"
  override.ssh.username = "ec2-user"
  ```

### 接続確認
```$ vagrant ssh``` でログインして、ec2-user でログインできるか確認する



***
# Ruby 設定
## RHELサーバ側設定
yum で取ってくるRuby は、1.8.5 と古いため、最新版をソースからインストールする。
> ※ 参考情報：[Rubyを最新ソースからインストール](http://centos.bungu-do.jp/archives/000294.html)

### 既にインストール済みの古いRuby をアンインストール
``` # yum remove ruby```

### ソースをコンパイルするために必要なパッケージを事前にインストール
``` # yum -y install gcc zlib-devel openssl-devel sqlite sqlite-devel```

### Ruby インストールに必要なyaml パッケージをソースからインストール

```
# cd /usr/local/src
# curl -# -O http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
# tar -zxvf yaml-0.1.4.tar.gz
# cd yaml-0.1.4
# ./configure
# make;　make install
```

### 安定版のRuby 1.9.3 をソースからインストール
	
```
# cd /usr/local/src
# curl -O -# ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p448.tar.gz
# tar zxvf ruby-1.9.3-p448.tar.gz
# cd ruby-1.9.3-p488
# ./configure
# make; make install
# ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-linux]
```

### aws-sdk for Ruby インストール前に必要なdevel パッケージ をyum インストール  
```
# yum -y install libxml2-devel libxslt-devel
```

* 以下のパッケージが無いと、```gem install aws-sdk``` でコケる。
  * libxml2-devel
  * libxslt-devel


> ※ 参考情報：develパッケージ
> devel = development の略。 主に開発に関連したものが入っているパッケージで、開発用のツールだったり、コンポーネントだったり。動的な仕組み（機能がモジュール化されているもの）を使うソフトウェアの場合は、通常の使用でも必要になることもある。

### RubyGems の最新化  
```
# gem install rubygems-update
# update_rubygems
# gem -v
```

* RubyGems はRuby 1.9 からRuby に同梱されているため、別途インストールは不要。
* ```gem update –-system``` でも良いが、以下に示す方法が現在(2013/08/09時点)の主流らしい。
* この方法であれば、バージョンダウンも可能で、バージョンダウンする際は、現在のRubyGems をアンインストール後、バージョン指定してインストールすれば良い。


### aws-sdk for Ruby インストール
```# gem install aws-sdk```


***
# git 設定
## RHELサーバ側設定
GitHub で公開されているスクリプト等利用する機会が多いため、git をインストールしておく。

### git 依存パッケージのインストール
```
# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel
```

### 最新のgit-core ファイル名を調べる
* [ココ](https://code.google.com/p/git-core/downloads/list)から最新のgit-core ファイル名を調べる
* その際、ファイル名にrc(RC版) を含まないもので正式リリースされたものを選択する。

> ※ 参考情報：RC版とは？
> RC版とは、ハードウエアやソフトウエアの開発段階のひとつで、製品候補としてのテスト工程に入ったもののことである。 評価段階として関係者などに提供されるベータ版の段階を終了し、より出荷段階に近づいた、出荷候補（release candidate）となるものがRC版であり、さらに改訂作業が進められることとなる。改訂の段階に応じてRC 1、RC 2、とバージョン分けされる場合も多い。RC版がテストを終了すれば、製品出荷（RTM）版として、製造の工程に移行されてゆく。

### git をソースからインストール
前述で調べたファイル名を ```http://git-core.googlecode.com/files/[file-name]``` file-name に入れてダウンロードURLを作成

* e.g. http://git-core.googlecode.com/files/git-1.8.3.4.tar.gz

```
# cd /usr/local/src
# curl -O -# http://git-core.googlecode.com/files/git-1.8.3.4.tar.gz
# tar zxvf git-1.8.3.4.tar.gz
# cd git-1.8.1.1/
# ./configure 
# make prefix=/usr/local all
# make prefix=/usr/local install
```

* ※ 以後は、Git のインストール後、アップデートでGit を通して最新版のGit を得ることができる。
  * ```$ git clone git://git.kernel.org/pub/scm/git/git.git```

> ※ 参考情報：[CentOS6.3にgitをソースコードから入れる](http://qiita.com/naonya3@github/items/54c8e3436212ad6686b3)


***
# スナップショットのサンプルスクリプトを動かしてみる
## RHELサーバ側作業
ネットを探って見つけた、[AWS EBS のSnapshot 機能を動作させるRuby スクリプトサンプル](https://gist.github.com/mechamogera/4248981) をお借りして動作させてみる。

### git clone でソースを取得する
HTTPS でgithub サーバからダウンロードしようとすると、落ちるので、git://　にする。

* ```$ cd /home/ec2-user/```
* ```$ git clone git://gist.github.com/4248981.git create_ebs_snapshot```

### コマンドを起動する
```$ ruby create_ebs_snapshot.rb -a [access-key-id] -s [secret-access-key] -v [volume-name] -g [save-snapshot-count]```

* ※ 他のオプションは、ソース参照

### コマンドをcron 登録して自動実行させてみる  
e.g. 5分置きに起動して、指定Volume のスナップショットを取得する

* ```$ crontab -e```
		
```
*/5 * * * * /usr/local/bin/ruby create_ebs_snapshot.rb -a [access-key-id] -s [secret-access-key] -v [volume-name] -g [save-snapshot-count]
```

### スナップショットの取得確認をする
AWS Management Console > EC2 > Snapshot 画面より5分置きにスナップショットが指定世代数取得できているか確認する。