Using Vagrant to deploy AWS EC2 Instances
Vagrant is an open source tool for building and distributing virtual development environments. It provides framework to manage and create complete portable development environments.
Vagrant machines are provisioned on the top of VirtualBox, VMware, AWS, or any other provider supported by vagrant.This blog illustrates how we can launch and provision instances in EC2 using AWS provider supported by Vagrant.
Major advantage of using Vagrant to deploy AWS EC2 is that we can test our provisioning scripts in the actual environment where it will be deployed for production before deploying on actual EC2 machines.
Follow the following steps to configure an EC2 machine using vagrant:
1. Install vagrant-aws plugin.
[code]
$vagrant plugin install vagrant-aws
[/code]
2. Fetch a Vagrant box image
Box images vary depending on the Vagrant “provider” that we use. Run the following command to download the dummy box which is provided by Vagrant-aws plugin:
[code]
$vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
[/code]
3.Configure Vagrant file
Make a directory to hold your Vagrant machine metadata.
Run the following commands:
[code]
$ mkdir aws-demo
$ cd aws-demo
$ vagrant init
[/code]
This will create a default Vagrant file in the present working directory which will be used to configure the vagrant machine. Edit this file as follows to specify the provider and configuration parameters to use AWS:
[code]
require ‘vagrant-aws’
Vagrant.configure(‘2’) do |config|
config.vm.box = ‘dummy’
config.vm.provider ‘aws’ do |aws, override|
aws.access_key_id = “xxxxxxxxxxxxxxxxxxxxxxxxxxx”
aws.secret_access_key = “xxxxxxxxxxxxxxxxxxxxxxxxxx”
aws.keypair_name = ‘ssh-keypair-name’
aws.instance_type = "t2.micro”
aws.region = ‘us-east-1’
aws.ami = ‘ami-20be7540’
aws.security_groups = [‘default’]
override.ssh.username = ‘ubuntu’
override.ssh.private_key_path = ‘~/.ssh/ssh-keypair-file’
end
end
[/code]
4. Launch the instance that is configured by the Vagrant file by running the following command:
[code]
$vagrant up –provider=aws
[/code]
5. Login to the AWS EC2 instance:
[code]
$vagrant ssh
[/code]
The above setup will successfully provision a t2.micro EC2 machine via vagrant.
You can use this setup and integrate with other Vagrant provisioners such as Chef, Ansible etc. which will automatically install software and alter configurations directly on EC2 machines.
Thanks a lot for valuable information. I tried the above steps, however got the below errors. Could you please suggest any workaround. Thank you.
*****************
INFO provision: Checking provisioner sentinel file…
INFO warden: Calling IN action: #
INFO synced_folders: SyncedFolders loading from cache: false
INFO subprocess: Starting process: [“C:\\Windows\\System32\\WindowsPowerShell\\
v1.0\\/powershell.EXE”, “-NoLogo”, “-NoProfile”, “-NonInteractive”, “-ExecutionP
olicy”, “Bypass”, “-Command”, “$PSVersionTable.PSVersion.Major”]
INFO subprocess: Command not in installer, restoring original environment…
DEBUG subprocess: Selecting on IO
DEBUG subprocess: stdout: 2
*****************