Chefのテストをするために、簡単に使い捨てられる環境があると便利です。
以前、VagrantとVirtualBoxを使って、ローカルマシンで仮想環境を立ち上げる方法について書きました。
VagrantとVirtualBoxで簡単に仮想環境の一発構築!
Chefのテストができたところで、今度はEC2インスタンスを起動して、Chefによる環境構築をしたくなりました。
そこで今回は、VagrantからEC2インスタンスを起動してみたいと思います。
AWSプラグインとダミーボックスのインストール
そんな時に便利なのが、vagrant-awsプラグインです。
mitchellh/vagrant-aws
vagrantコマンドから簡単にインストールできます。
$ vagrant plugin install vagrant-aws
VagrantでCentOSの仮想環境を起動するときには、CentOSのイメージをダウンロードしましたが、今回もボックスを追加します。
$ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
これでインストールは完了です。
Vagrantfileの作成と記述
続いて、Vagrantfileを作成します。
まず、テキトーな作業ディレクトリでinitサブコマンドを実行します。
$ vagrant init
これで、Vagrantfileが作成されます。そして、それを書き換えるのですが、今回は次のような形にしました。
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "dummy"
config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
config.vm.provider :aws do |aws, override|
aws.access_key_id = ENV['AWS_ACCESS_KEY']
aws.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
aws.keypair_name = ENV['AWS_KEYPAIR_NAME']
override.ssh.username = 'ec2-user'
override.ssh.private_key_path = ENV['AWS_PRIVATE_KEY_PATH']
aws.region = 'ap-northeast-1'
aws.ami = 'ami-25dd9324'
aws.instance_type = 'c3.large'
aws.security_groups = ['vagrant']
aws.tags = {"Name"=>"vagrant"}
aws.user_data = "#!/bin/sh\nsed -i 's/^.*requiretty/# Defaults requiretty/' /etc/sudoers\n"
end
end
ここで、いくつかの設定を環境変数にしていますので、事前に環境変数を読み込んでおきます。
# Vagrant for AWS
export AWS_ACCESS_KEY='xxxx'
export AWS_SECRET_ACCESS_KEY='yyyy'
export AWS_KEYPAIR_NAME=zzzz
export AWS_PRIVATE_KEY_PATH=/path/to/zzzz.pem
ここに指定するAWSのアクセスキーとキーペアは事前に発行しておきます。Vagrantfileの中にセキュリティグループも指定していますので、これも作成しておく必要があります。
ユーザーデータでsudoersの設定を変更していますが、これはknifeからChefを実行するために入れているので、EC2インスタンスを起動するだけであれば必須ではありません。
これで設定は完了です!
VagrantからEC2インスタンスの起動
いざ起動をしてみます。CentOSを起動した時と違って、providerオプションをつける必要があるので注意です。
$ vagrant up --provider=aws
無事に起動できたら、SSHで接続してみます!
$ vagrant ssh
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
AWS | Amazon Linux AMI
16 package(s) needed for security, out of 36 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-xx-xx-xx-xx ~]$
起動できています!
このホストへの接続設定を.ssh/configに追加したい場合は、ssh-configサブコマンドで設定を出力させて、それを.ssh/configに追加すれば良いです。
$ vagrant ssh-config
Host default
HostName xx.xx.xx.xx
User ec2-user
Port 22
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /path/to/zzzz.pem
IdentitiesOnly yes
LogLevel FATAL
VagrantからEC2インスタンスの停止
起動も簡単ですが、停止も一発です。
$ vagrant destroy
これでEC2に対してChefのテストをする場合も、サクッと起動して環境構築して、いらなくなったらサクッと削除できて楽になります!
参考ページ
参考にさせていただきました。
VagrantをEC2と使ってみた « サーバーワークス エンジニアブログ