概要
- Vagrantのセットアップ
- VirtualBoxにCentOS7の環境を構築する
- AWSのEC2インスタンスの環境を構築する
Vagrantについては、公式サイトのチュートリアルを読むと、より正しい知識が手に入ります。
環境
記事作成時のソフトウェアバージョンは以下の通り.
- Vagrant 1.7.2
- Vagrant-aws 0.6.0
- VirtualBox 4.3.26
- ruby 2.2.2
Vagrantってなに?
VirtualBoxやAWSなどに対して「仮想環境の構築、起動、削除」などの共通インターフェースを提供する。(と私は理解しました)
Vagrant単体では面白いことはなくchefなどと組み合わせると効果を発揮します。
Vagrantのインストール
Vagrantの公式サイトからインストーラをダウンロードして、インストールします。
インストールすると、ターミナルからvagrantコマンドが利用できるようになります。
※ VirtualBoxがインストールされていない場合は、予めインストールしておきます。
Vagrantのログ出力について
Vagrant中にエラーなどで困ったらまずはログを出力をしてググりましょう。
#ログ出力.
VAGRANT_LOG=info vagrant オプション
Vagrantを使って、VirtualBoxにCentOS7環境を構築する
流れとしては以下の通りです。
- CentOS7のboxの登録
- Vagrantのprojectを作成する
- Vagrantfileの編集
- 仮想環境の操作
1. Boxの登録
Box
Boxとは、OSとセットアップ状態を1つにまとめたイメージです。自作することも可能ですが、今回はWeb上からダウンロードします。
Boxのダウンロードできる場所
CentOS7のBoxの登録
# vagrant box add {title:任意} {boxのurl}
# CentOS7のBoxを登録する(http://www.vagrantbox.esのCentOS7.0 x86_64 minimal (VirtualBoxGuestAddtions 4.3.14)を利用します。
vagrant box add centos7 https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box
2. Vagrantのprojectを作成する
# projectを生成するディレクトリに移動する
cd ~/
mkdir myproj_vb
cd myproj_vb
# projectを生成する.
# vagrant init {title: vagrant box addで指定したタイトル}
vagrant init centos7 # Vagrantfileが生成される
3. Vagrantfileの編集
最低限の編集として、vagrantを起動したホストPCと仮想環境とのプライベートネットワークの設定」を行います。これにより、ホストPCと仮想環境でTCP/IP通信が行えるようになります。
※ 参考 Vagrantのネットワーク通信について
# 既に例が定義されているので、コメントアウトを外すだけです。
config.vm.network "private_network", ip: "192.168.33.10"
4 Vagrantを介したVirtualBoxの操作
いずれもVagrantfileのあるディレクトリで行います。
# 仮想環境を起動、再開する
vagrant up
# 仮想環境を停止する
vagrant halt
# 仮想環境を破棄する
vagrant destroy
仮想環境へのSSHアクセス
vagrant ssh
どのディレクトリにいてもsshできるようにするには、以下を実行して.ssh/configの設定を行います。
※ 参考.ssh/configについて
vagrant ssh-config --host 任意のホスト名 >> ~/.ssh/config
ssh 設定したホスト名 # これでsshでログインできます。
Vagrantを使って、EC2環境を構築する
※ 既にEC2インスタンスのAMIイメージがあることを前提とします。
流れとしては以下の通りです。
- vagrant-awsプラグインのインストール
- dummy boxの登録
- Vagrantのprojectを作成する
- AWSから必要な情報を取得する
- Vagrantfileの編集
- .envファイルに環境変数を追加
- 仮想環境の操作
1 vagrant-awsプラグインのインストール
Vagrant標準はAWSに対応していないため、vagrant-awsプラグインをインストールします。
vagrant plugin install vagrant-aws
2 dummy boxの登録
AWS用のDummy Boxを登録します。
vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
3 Vagrantのprojectを作成する
# projectを生成するディレクトリに移動する
cd ~/
mkdir myproj_aws
cd myproj_aws
# projectを生成する.
vagrant init dummy
4 AWSから必要な情報の取得
アクセスキーの取得
以下に従い、アクセスキーIDとシークレットアクセスキーを取得します。
以下のアクセスキーIDとシークレットアクセスキーを控えます。
※より適切なポリシーがあるかもしれませんが、ここではEC2へのフルアクセス権を設定します。
以上です。
- キーペアの生成と取得
以下に従い、キーペアを作成します。
- ダウンロードされたpemファイルのパーミションを変更します。※変更しないとSSHでEC2にアクセスできません。
chmod 600 ダウンロードしたpemファイル
5 Vagrantfileの編集
※ 環境変数だったり直値だったりするのは説明を端折るためです。全ての環境変数にした方が一括管理出来て良いと思います。
config.vm.provider :aws do |aws, override|
# IAMで取得したアクセスキーID
aws.access_key_id = ENV['AWS_ACCESS_KEY_ID']
# IAMで取得したシークレットアクセスキー
aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
# 作成したキーペアの名称
aws.keypair_name = ENV['AWS_KEYPAIR_NAME']
aws.ami = # EC2で利用する仮想環境のイメージ
override.ssh.username = "ec2-user"
override.ssh.private_key_path = "ダウンロードしたpemファイルのパス"
aws.security_groups = ["セキュリティグループ名かID"]
# 以下はVagrant_chefのREADMEより抜粋
# An array of security groups for the instance. If this instance will be launched in VPC, this must be a list of security group Name. For a nondefault VPC, you must use security group IDs instead (http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html).
# 以下はSSH上でsudoを実行できるようにするために必要。
# config.ssh.pty=true
aws.user_data =<<USER_DATA
#!/bin/sh
sed -i -e 's/^\\(Defaults.*requiretty\\)/#\\1/' /etc/sudoers
USER_DATA
end
# .bash_profileを読み直して、設定を反映します。
source .bash_profile
補足 SSH上でsudoするために
aws.user_dataの設定をしなければ、vagrant upの起動に失敗します。
sudoを実行できるようにするためには、2つ方法があるようです。
- Vagrantfileにconf.ssh.pty=trueにする.#Vagrant公式サイトでは、falseが推奨されています。
- 起動時にrequirettyの設定を無効にする。(aws.user_dataの設定)
6 環境変数の設定
.bash_profileや.env等に環境変数を定義します。
# .bash_profile
export AWS_ACCESS_KEY_ID="IAMで取得したアクセスキーID"
export AWS_SECRET_ACCESS_KEY="IAMで取得したシークレットアクセスキー"
export AWS_KEYPAIR_NAME="キーペア名"
# ファイルを読み直して、変更を反映します。
source .bash_profile
7. 仮想環境の操作
# 仮想環境を起動、再開する
vagrant up --provider=aws
# 仮想環境を停止する
vagrant halt
# 仮想環境を破棄する
vagrant destroy
以上です。