diff options
| author | Franck Cuny <franckcuny@gmail.com> | 2016-08-04 11:12:37 -0700 |
|---|---|---|
| committer | Franck Cuny <franckcuny@gmail.com> | 2016-08-04 11:12:37 -0700 |
| commit | 2d2a43f200b88627253f2906fbae87cef7c1e8ce (patch) | |
| tree | c65377350d12bd1e62e0bdd58458c1044541c27b /posts/2014-02-01-provision-an-ec2-instance-with-vagrant-and-ansible.org | |
| parent | Use Bullet list for the index. (diff) | |
| download | lumberjaph-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.org | 101 |
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! |
