Terraform allows you to setup Infrastructure as expressed by code, (Infrastructure As Code IaC). It’s platform independent, and supports a wide range of different things, from cloud providers like Azure, AWS, GCP, to databases to DNS, pretty much everything.
What were going to do:
- Install Terraform on Debian
- Install Docker
- Create a terraform script to download a docker image of jekyll
- Modify our terraform script to spin up the jekyll container.
Setting up your workstation
I’m using Debian 10 (buster) for my installation here but Terraform can literally be installed on anything since it is written in golang.
1. Install Terraform
Windows
Goto the following link on the terraform website Terraform Download page
And click either 32-bit or 64-bit for windows download.
This will download terraform.exe, a standalone executable, I like to copy this into c:\terrafrom\ you will want to add this to your path variable.
Add to PATH environment variable
- Click start and type Control Panel
- In the search box at the top right type “path”
- In the results you will see “Edit the system environment variables”
- This will bring up the system properties
- Click Environment Properties button at the bottom
- The Environment Variables screen will be displayed
- Selct the Path Variable under System Variables at the bottom, and click Edit.
- Click New and add a new variable of “C:\terraform"
- Fire up Command Prompt or Powershell and type terraform, you should get the terraform output in any directory you are in.
Debian
Download the most recent package for your operating system from the terraform download page
|
|
Unzip the package into our /usr/local/bin to install it locally
|
|
Confirm it’s working
Now lets run the following command to check that it’s working and available
|
|
You should receive the following version output Terraform v0.12.10
As you can see Terraform is still not at version 1, it’s still in beta and is in active development and each version can and has change quite drastically. So just be aware of this.
2. Install Docker
Windows
Goto the following link: Docker for windows
And install Docker for windows following the instructions.
Debian
If you already have docker installed locally you can skip these steps
Install the prerequisites to add a new repository over https
|
|
Import the GPG key from docker
|
|
Add the docker apt repository to our repository list
|
|
update apt and install Docker CE
|
|
3. Creating our first Terraform script
Pull a docker image from the Terraform Docker provider
Create our new script
|
|
Create the script content
Now open up the main.tf in your favourite text editor and add the following:
|
|
Initialise our Terraform directory
This command will initialise our directory by creating a .terraform directory. And download any providers that are necessary.
|
|
This will download the terraform docker provider. The providers are stored in the .terraform directory. If you look in .terraform/plugins/linux_amd64/ you will see the terraform provider.
View the changes that will happen
|
|
By running terraform plan we will see all the changes that are going to be applied.
Run our new script
Once we have viewed the plan, and we are happy it isn’t doing something we didn’t expect we will run the following command:
|
|
This will download the docker image that we specified in the main.tf file.
See what was applied
|
|
This will return the docker image id that we asked it to download
4. Interpolation syntax
Interpolational syntax is a way for you to reference variables and other objects from within your infrastructure.
The documentation on terraform.io explains this in depth. (Link)[https://www.terraform.io/docs/configuration/interpolation.html]
Create a docker container of the image
Let’s add to our main.tf file and actually create a container using the image above, referenced with interpolation syntax
Open main.tf and edit
Let’s go ahead and open the main.tf file that we created above, and add the following code below:
|
|
You can see the $ sign, this is how we are referencing the image above.
Run our changes
Now lets view the plan of the changes by running the below:
|
|
You’ll see that it is referencing our id of our image
Now lets apply our changes
|
|
Now if you run:
|
|
You will see our container is running with the ports open.
If you now browse to port 80 in a web browser you will see the jekyll blog setup.
Clear terraform infrastructure
To remove all the infrastructure we just created above we can use the destroy command.
|
|
It will tell you what you are about to destroy, and require you to type yes.