Terraform Provisioning
-
Scenario: You are asked to create a VM in the cloud with the latest version of the application installed gameoflife
-
Steps:
- Create a VM using terraform template
- Now login into the vm and execute the commands
-
As of now we dont know how to login into resources and execute commands and that is what a Terraform Provisioner does.
-
For Docs Refer Here
-
Workflow of Provisioining in Terraform
- Create a resource
- Estabish a Connection
- Execute Provisioning:
-
Steps: Installing game of life on AWS EC2
- Create an EC2 instance and once ec2 is ready
- Login and execute the following commands
# Ubuntu VM is ready sudo apt-get update sudo apt-get install openjdk-8-jdk -y sudo apt-get install tomcat8 -y cd /tmp wget https://war-jar-files.s3-us-west-2.amazonaws.com/gameoflife.war sudo cp /tmp/gameoflife.war /var/lib/tomcat8/webapps
- Navigate to
http://<publicip>:8080/gameoflife
-
Thinking in Terraform:
- Terraform can create resources and to provision terraform relies on Built-in Provisioners
Solution for Gameoflife in AWS Ec2
- Create a new directory gameoflife and create
- provider.tf
provider "aws" { }
- main.tf
resource "aws_instance" "gameoflifeprimary" { ami = var.ubuntuami instance_type = "t2.micro" key_name = var.keyname security_groups = var.securitygroups associate_public_ip_address = true provisioner "remote-exec" { inline = [ "sudo apt-get update", "sleep 5", "sudo apt-get install openjdk-8-jdk -y", "sleep 5", "sudo apt-get install tomcat8 -y", "sleep 5", "cd /var/lib/tomcat8/webapps", "sudo wget https://github.com/GitPracticeRepo/game-of-life/blob/master/gameoflife.war", "sleep 5", "sudo service tomcat8 restart" ] connection { type = "ssh" user = "ubuntu" private_key = file("./sample.pem") host = aws_instance.gameoflifeprimary.public_ip } }
}
```
* outputs.tf
```
output "publicip" {
value = aws_instance.gameoflifeprimary.public_ip
}
```
- Now apply terraform to create aws ec2 instance with game of life installed