summaryrefslogtreecommitdiff
path: root/posts/2014-02-01-provision-an-ec2-instance-with-vagrant-and-ansible.org
diff options
context:
space:
mode:
authorFranck Cuny <franckcuny@gmail.com>2016-08-04 11:12:37 -0700
committerFranck Cuny <franckcuny@gmail.com>2016-08-04 11:12:37 -0700
commit2d2a43f200b88627253f2906fbae87cef7c1e8ce (patch)
treec65377350d12bd1e62e0bdd58458c1044541c27b /posts/2014-02-01-provision-an-ec2-instance-with-vagrant-and-ansible.org
parentUse Bullet list for the index. (diff)
downloadlumberjaph-2d2a43f200b88627253f2906fbae87cef7c1e8ce.tar.gz
Mass convert all posts from markdown to org.
Diffstat (limited to '')
-rw-r--r--posts/2014-02-01-provision-an-ec2-instance-with-vagrant-and-ansible.org101
1 files changed, 101 insertions, 0 deletions
diff --git a/posts/2014-02-01-provision-an-ec2-instance-with-vagrant-and-ansible.org b/posts/2014-02-01-provision-an-ec2-instance-with-vagrant-and-ansible.org
new file mode 100644
index 0000000..a4ef407
--- /dev/null
+++ b/posts/2014-02-01-provision-an-ec2-instance-with-vagrant-and-ansible.org
@@ -0,0 +1,101 @@
+I like to use [[http://www.ansible.com/][Ansible]] to manage my personal
+servers. It forces me to make the environment reproducible so I don't
+have to care about a specific box: I can throw them away easily, knowing
+I can get a new one when I need, with the exact same configuration.
+
+I also find Ansible easier to reason about than Chef or Puppet. The fact
+that I have to manage and maintain only a few machines is probably why.
+
+When I develop on my personal projects, I use a lot of VMs, and that's
+where [[http://www.vagrantup.com/][Vagrant]] enters the picture. Being
+able to start a local VM and get a clean environment quickly is
+invaluable to me. It makes it easy to test an application or library in
+different situation, without carrying about local dependencies and
+conflicts created by having multiple versions of the same library
+installed on the system.
+
+But sometimes a local VM is not enough, and you need a more powerful
+server, so now you need an EC2 instance.
+
+My goal with this article is to show how easy you can combine Vagrant
+with Ansible to provision an EC2 instance.
+
+** The basic
+
+I have a private repository with all my rules for Ansible. But for this
+post, all we need is a simple playbook. So let's start by creating a
+directory named /vagrant/, and put inside a configuration file named
+/playbook.yml/, with the following content:
+
+#+BEGIN_HTML
+ <script src="https://gist.github.com/franckcuny/fae46135ad0f3581ce6b.js"></script>
+#+END_HTML
+
+What we're describing, is that for all the hosts in our inventory we
+will use =sudo= to install the program =htop= using =apt-get= (yes, I
+assume you're using a debian-based system, but you get the idea).
+
+First, we will try the setup on a local box. If you don't already have a
+Vagrant box installed, you can grab a new one by running
+=vagrant box add precise64 http://files.vagrantup.com/precise64.box=.
+
+Now we can add the configuration file named /Vagrantfile/ with this
+content.
+
+#+BEGIN_HTML
+ <script src="https://gist.github.com/franckcuny/aadd788101c08744a22a.js"></script>
+#+END_HTML
+
+This file says that we will use the box named /precise64/, located at
+the given URL, and we want to provision it using Ansible, and the path
+to the playbook.
+
+By running =vagrant up=, a box gets started and provisioned. An
+inventory file is generated for us inside the directory, so ansible will
+know what to do. The output should be similar to this:
+
+#+BEGIN_HTML
+ <script src="https://gist.github.com/franckcuny/e3df9a2424e4a4a12f60.js"></script>
+#+END_HTML
+
+As we can see, everything went well, and the application =htop= was
+successfully installed. We can now run =vagrant ssh= and once logged
+inside the VM, run =htop=.
+
+** AWS
+
+I've created a key pair for Vagrant in the AWS console. Note the access
+and secret access keys, and download the SSH private key too. For this
+article, we will put the key into the same directory as our playbook and
+Vagrant's configuration.
+
+We need to install a plugin for that:
+=vagrant plugin install vagrant-aws=. We also need to modify our
+/Vagrantfile/ to use a different box, and also add the configuration for
+AWS.
+
+#+BEGIN_HTML
+ <script src="https://gist.github.com/franckcuny/ac8cad84af5f51a923f6.js"></script>
+#+END_HTML
+
+We need to override the user name to /ubuntu/ and specify the path to
+the private key (the one we got from the AWS console when we created our
+new key pair) to log into the instance. The box also needs to be
+overridden.
+
+Running =vagrant up --provider=aws= will provision the box. It will
+takes a few minutes to start the instance and run the provisioning part.
+Wait a few minutes, but if it looks like the system is stuck, you can
+re-run the previous command by exporting =VAGRANT_LOG=debug= in order to
+get more detailed information.
+
+#+BEGIN_QUOTE
+ If the provisioning blocks while trying to connect to ssh, it's
+ probably because your security group doesn't allow SSH connections.
+#+END_QUOTE
+
+Now =vagrant ssh= will dump you into the VM and you should be able to
+run =htop=.
+
+Don't forget to run =vagrant halt= and =vagrant destroy= once you're
+done!