lynaghk / Vagrant Ec2
Programming Languages
Vagrant-EC2
Deprecated
Everything these scripts do is done much better by the vagrant-aws plugin (which happens to be written by Vagrant's author).
This repository shows how to use the same chef-solo
-based provisioning scheme for Vagrant virtual machines and Amazon's EC2. This is useful because you'll be able to test the deployment procedures as you develop within a clean Vagrant machine. Running continuous deployment locally also saves tons of partial instance-hours, which can run into the hundreds of cents (I'm not made of money, people).
These scripts have been tested only on Ubuntu Linux.
Development (local)
Just use Vagrant as you normally would:
cd a_vagrant_machine/
vagrant up
vagrant ssh
Production (EC2)
Start up a new EC2 instance (ami-af7e2eea
is a US west coast Ubuntu 10.10 64-bit server)
ec2-run-instances ami-af7e2eea \
--instance-type t1.micro \
--key yournamehere \
--user-data-file bootstrap.sh
find its IP with
ec2-describe-instances
and provision it using the same recipes as the demo Vagrant machine machine by running
./setup.sh <ip address> a_vagrant_machine/
DONE!
Don't forget to turn off your instances when you're finished:
ec2-terminate-instances <i-instance_id>
Converting existing Vagrantfiles
Just add three lines in the provisioning section of your Vagrantfile
so it looks like this:
Note: fixed problem (tar command does not have --transform option) on MacOS X
config.vm.provision :chef_solo do |chef|
<your provisioning here>
require 'json'
open('dna.json', 'w') do |f|
chef.json[:run_list] = chef.run_list
f.write chef.json.to_json
end
open('.cookbooks_path.json', 'w') do |f|
f.puts JSON.generate([chef.cookbooks_path]
.flatten
.map{|x| x})
end
end
Setup local machine
On your local machine, you will need the following
-
ec2-api-tools Ubuntu multiverse package (this is not currently in Debian's apt repositories; you'll need to download the Ubuntu
.deb
package and usedpkg --install
) - VirtualBox 4
-
Vagrant rubygem;
gem install vagrant
- The
lucid32
Vagrant base box;vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
. Take a look at the vagrant-ubuntu repository for scripts to make custom Ubuntu-based Vagrant base boxes.
Add to your .bashrc
EC2_PRIVATE_KEY=/path/to/pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem
EC2_CERT=/path/to/cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem
EC2_SSH_PRIVATE_KEY=/path/to/pk-yournamehere.pem
JAVA_HOME=/usr/lib/jvm/java-6-sun/
EC2_URL=https://ec2.us-west-1.amazonaws.com
Thanks
This project is sponsored by Keming Labs, a technical design studio specializing in data visualization.