Vagrantで AWS EC2インスタンス（RHEL5.5）を作成する

# 目的
Vagrant のAWS-Provider (プラグイン) を使用して、AWS EC2 インスタンス(RHEL5.5)を作成する。  
クライアントは、Windows7 とMacOSXです（本文中のパスはWindowsで記載してありますが、Macでも適宜置き換えれば特に問題ないと思います）。

***
# 前提条件
## 環境
### 作業前
* OS: Windows 7 Home Premium、MacOSX 10.8.5
* Vagrant: 1.2.4

### 作業後（※差異部のみ記載）
* vagrant-aws: 0.2.2


***
# 参考情報
* [Vagrant 1.1 で EC2 を vagrant up](http://d.hatena.ne.jp/naoya/20130315/1363340698)
* [Vagrant AWS Provider-README.md](https://github.com/mitchellh/vagrant-aws)


***
# 構築手順：概要
1. Vagrant インストール
1. Vagrant のAWS 用プラグインをインストール = vagrant plugin install [plugin-name]
1. AWS EC2 用の Dummy Box を入手 = vagrant box add dummy [URL]
1. AWS EC2 用の Dummy Box を初期化 = vagrant init
1. Vagrantfile を EC2 用に修正 = vi Vagrantfile
1. 仮想サーバ起動 & 作成 = vagrant up
1. 仮想サーバへssh 接続 = vagrant ssh
1. 仮想サーバ停止 = vagrant halt
1. 仮想サーバ削除 = vagrant destroy

***
# 構築手順：詳細
## Vagrant インストール
※ RubyGems（gem） でインストールすると、古いv.1.0 系しかダウンロードされないため、v.1.1系(他の仮想マシンにも対応するプラグイン構成版)以降は、パッケージ インストールする。

1. [Vagrant HP](http://downloads.vagrantup.com/tags/v1.2.3) にアクセス
  * [最新版ダウンロードはコチラ](http://downloads.vagrantup.com)
1. インストーラをダウンロード
  * Windows版インストーラ：Vagrant_1.2.3.msi
  * Mac版インストーラ：Vagrant-1.2.3.dmg
1. ダウンロードした インストーラ（e.g. Vagrant_1.2.3.msi） を起動
1. インストール完了後、コマンドプロンプトで、以下のように表示されることを確認

```
$ vagrat --version  
Vagrant version 1.2.3
```

## Vagrant のAWS-Provider インストール

```
$ vagrant plugin install vagrant-aws
$ vagrant plugin list
vagrant-aws (0.2.2)
```

## AWS EC2 用のDummyBox 取得＆初期化
AWS EC2を利用する場合、OS のイメージは必要ないが、Vagrant Box は必要なのでダミーを用意する。

```
$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
$ vagrant box list
dummy                               (aws)
```

## Vagrant Box 用ディレクトリ作成

```
$ mkdir -p /c/_/data/vagrant-aws-test/
```

## Vagrant Box 初期化 → Vagrantfile 作成
vagrant init した場所(Vagrantfile がある場所)に対して操作する。

```
$ cd /c/_/data/vagrant-aws-test/
$ vagrant init
```


## Vagrantfile 修正

```
$ vi /c/_/data/vagrant-aws-test/Vagrantfile
```

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = 'アクセスキーID'
    aws.secret_access_key = 'シークレットキーID'
    aws.region = 'ap-northeast-1'
    aws.instance_type = 't1.micro'    
    aws.ami = 'ami-3ddd543c'
    aws.security_groups = ['仮想マシンに設定するセキュリティグループ名']
    aws.keypair_name = '仮想マシンに設定するキーペア名'
    aws.tags = { 
      'Name' => 'サーバ名等、EC2インスタンスの名前に相当する名称'
    }
    # aws.use_iam_profile = ''
    # aws.subnet_id = ''
    # aws.private_ip_address = ''
    override.ssh.username = "root"
    override.ssh.private_key_path = 'pvivatekey(*.pem)のフルパス'

  end
end
```

### 各属性の調べ方
TODO: 後で書く

* access_key_id, secret_access_key:
* region:
* availability_zone:
* instance_type:
* ami:
* security_groups:
* keypair_name:
* tags:
  * Name: サーバ名に該当する名称
  * その他Tag: 任意で定義する
* ssh.username:
* ssh.private_key_path:



## vagrant 起動(= 仮想サーバ作成）

```
$ vagrant up --provider=aws
```

※ もう一回同じコマンドを打ったらどうなるか？  
* → 既に作られている。と表示される。
* → 作り直したい場合は、```$ vagrant destroy``` してから、もう一度 ```vagrant up --provider=aws``` すればOK

```
Bringing machine 'default' up with 'aws' provider...
[default] The machine is already created.
```


## 作成した仮想サーバにssh 接続

```
$ vagrant ssh
```

これで、public DNS を意識せずにssh 接続できる。


## 作成した仮想サーバを停止

```
$ vagrant halt
```

※ただし、まだ対応されていない(2013/08/06時点)。  
以下のエラーメッセージが表示される。

なので、停止したい場合は、以下の方法で停止する。
* 対象仮想マシン上で直接、`shutdown -h now` などOSのシャットダウンコマンドで停止する
* AWS Management Console で停止する

```
$ vagrant halt
Vagrant attempted to call the action 'halt' on the provider
'AWS (i-78438a7d)', but this provider doesn't support this action. This
is probably a bug in either the provider or the plugin calling this
action, and should be reported.
```


## 作成した仮想サーバを削除

```
$ vagrant destroy
```

これで、Terminate される。