Using Terraform to Deploy and Configure a Ready to use Backup Repo into an AWS VPC

A month of so ago I wrote a post on deploying Veeam Powered Network into an AWS VPC as a way to extend the VPC network to a remote site to leverage a Veeam Linux Repository running as an EC2 instance.  During the course of deploying that solution I came across a lot of little check boxes and settings that needed to by tweaked in order to get things working.  After that, I set myself the goal of trying to automate and orchestrate the deployment end to end. 

For an overview of the intended purpose behind the solution head to the original blog post here.  That post was mainly focused around the Veeam PN component, however I was using that as a mechanism to create a site-to-site connection to allow Veeam Backup & Replication to talk to the other EC2 instance which was the Veeam Linux Repository. 

Terraform by HashiCorp:

In order to automate the deployment into AWS, I looked at Cloudformation first…but found that learning curve to be a little steep…so I went back to HashiCorp’sTerraform which I have been familiar with for a number of years, but never gotten my hands dirty with.  HashiCorp specialise in Cloud Infrastructure Automation and their provisioning product is called Terraform. 

Terraform is used to create, manage, and update infrastructure resources such as physical machines, VMs, network switches, containers, and more.  Almost any infrastructure type can be represented as a resource in Terraform. 

Terraform supports a host of providers and once you wrap your head around the basics and view some example code, provisioning Infrastructure as Code can be achieved with relatively no coding experience…however, as I did find out, you need to be careful in this world and not make the same initial mistake I did as explained in this post. 

Going from Manual to Orchestrated with Automation:

The Terraform AWS provider is what I used to create the code required to deploy the required components.  Like everything that’s automated, you need to understand the manual process first and that is where the previous experience came in handy.  I knew what the end result was…I just needed to work backwards and make sure that the Terraform provider had all the instructions it needed to orchestrate the build. 

the basic flow is:

Fetch AWS Access Key and Secret

Fetch AWS Key Pair

Create AWS VPC

Configure Networking and Routing for VPC

Create CentOS EC2 Instance for Veeam Linux Repo

Add new disk and set size

Execute configuration script

Install PERL modules

Create Ubuntu EC2 Instance for Veeam PN

Execute configuration script

Install VeeamPN modules from repo

Login to Veeam PN Web Console and Import Site Configuration. 

I’ve uploaded the code to a GitHub project.  An overview and instructions for the project can be found here.  I’ve also posted a video to YouTube showing the end to end process which i’ve embedded below (best watched at 2x speed):

In order to get the Terraform plan to work there are some variables that need modifying in the GitHub Project and you will need to download, install and initialise Terraform.  I’m intending to continue to tweak the project and complete the provisioning end to end, including the Veeam PN site configuration part at the end.  The remote execution feature of Terraform allows some pretty cool things by way of script initiation.