# Terraform Workshop --- ## What is Terraform IaC (Infrastructure as Code) framework which enables programatic definition, deployment and management of infrastructure resources for cloud and on-premises in a declarative manner. It targets all major cloud platforms (GCP, AWS, Azure, DO etc.) --- ## Why do We Need it * Standardization of deployment to ensure a consistent state * Version control * Deploying an additional clone env for testing * Easier auditability to improve quality and security * Modular - reuse & ease of understanding * Resource Graph (dependency graph + parallel execution when possible) * Version control * Enables use of hardened deployment pipelines * Enables immutable infrastructure --- ## Human-Readible Configuration Language * HashiCorp Configuration Language (HCL) or JSON ``` provider "aws" { region = "us-west-2" } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI ID instance_type = "t2.micro" tags = { Name = "HelloWorldEC2Instance" } } output "instance_public_ip" { value = aws_instance.example.public_ip } ``` --- ## Workflow * Write your configuration file * Use the the `terraform plan` action to simulate deployment of resources and assess the outcome * Use `terraform apply` to actually deploy resources --- # Exercise * Set up local credentials for your cloud platform of choice * Write a file that deploys an EC2 instance * Use `terraform plan` and `terraform apply` in order to deploy the resource * Remove the resource by updating your configuration file and using `terraform plan` and `terraform apply` --- # Extend Configuration * Add a VPC * Define security group that limits ingress and egress to port 22 * Add SSH key(s) which may connect to the instance --- # Next Steps * ...