LoginSignup
78
76

More than 5 years have passed since last update.

Vagrant VirtualBoxとAWS EC2での環境構築例

Last updated at Posted at 2015-04-29

概要

  • 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環境を構築する

流れとしては以下の通りです。

  1. CentOS7のboxの登録
  2. Vagrantのprojectを作成する
  3. Vagrantfileの編集
  4. 仮想環境の操作

1. Boxの登録

Box

Boxとは、OSとセットアップ状態を1つにまとめたイメージです。自作することも可能ですが、今回はWeb上からダウンロードします。

Boxのダウンロードできる場所
- https://atlas.hashicorp.com/boxes/search
- http://www.vagrantbox.es

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イメージがあることを前提とします。

流れとしては以下の通りです。

  1. vagrant-awsプラグインのインストール
  2. dummy boxの登録
  3. Vagrantのprojectを作成する
  4. AWSから必要な情報を取得する
  5. Vagrantfileの編集
  6. .envファイルに環境変数を追加
  7. 仮想環境の操作

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とシークレットアクセスキーを取得します。

スクリーンショット 2015-04-29 7.24.06.png


スクリーンショット 2015-04-29 10.13.17.png


スクリーンショット 2015-04-29 10.13.26.png


スクリーンショット 2015-04-29 10.13.51.png


スクリーンショット 2015-04-29 10.14.53.png


以下のアクセスキーIDとシークレットアクセスキーを控えます。
スクリーンショット 2015-04-29 10.14.08.png


スクリーンショット 2015-04-29 10.15.13.png


※より適切なポリシーがあるかもしれませんが、ここではEC2へのフルアクセス権を設定します。

スクリーンショット 2015-04-29 10.17.23.png

以上です。

  • キーペアの生成と取得

以下に従い、キーペアを作成します。

スクリーンショット 2015-04-29 10.32.50.png


スクリーンショット 2015-04-29 10.35.09.png


スクリーンショット 2015-04-29 10.30.25.png

  • ダウンロードされた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

以上です。

78
76
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
78
76