Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

anuvindhs/Terraform-exam-StudyNotes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

29 Commits

Repository files navigation

10 Min - Revision notes for Terraform Associate Exam.

Terraform visitor badge-2

This repo is a collection of study note prepard to use it for revission before the exam.

Study materials Links
LINK
A Free Course Developed by Andrew Brown from ExamPro
LINK
LINK

Click on each topic below to expand the content

What is IAC ? Understanding Infrastructure As Code.

IAC

What Is IAC? Understanding Infrastructure As Code

  • Deploy your infrastucture resources with code.
  • It enables DevOps, version control, better collabration
  • Declarative - code in a readable format not worring about api
  • speed, cost , reduced risk

below code is an example for IAC, thi is a code to get current VPCs from AWS environment

example

Terraform

  • Terrform is declarative
  • Codify your Software defined networking
  • all cloud IAC solution (AWS,GCP,Azure) , cloud agnostic
  • check out all providers for terraform, LINK
Terraform Work Flow, IaC with Terraform.

Terraform Work Flow

Write -> Plan -> Deploy

Write the code, plan and review the code & once you are happy Apply to deploy the resources.

terraform init

  • it initialize the directory
  • which means it will add modules and plugins.
  • setup up backend
Terraform plan , terraform apply & terrraform destroy.

PLAN

terraform plan

  • it allow the users to review the code
  • helps to understand what are you deploying
  • your Auth keys are used only if needed

APPLY

terrform apply

  • deploy the code , create resources in your cloud
  • updates the statefile, terraform.tfstate
  • tfstate can store in local and remote

DESTROY

terraform destroy

  • destroy all your resources from cloud acording to the config file, that you created using code.
Provider Block, resource Block and data block.

provider block

aws , google , azure

terraform {
 required_providers {
 aws = {
 source = "hashicorp/aws"
 version = "4.8.0"
 }
 }
}
provider "aws" {
 # Configuration options
}

resource block

resource "aws_vpc" "example" {
 cidr_block = "10.0.0.0/16"
}

call it by resource.aws_vpc.example

data block

data "aws_ami" "web" {
 provider = aws.west
 #...
}

you can call it by data.aws_ami.web

terrform will look for providers first while excuting the .tf files in the folder.

Terraform installation and Providers.

Install

VS Code

  • Extention - HashiCorp Terraform, Terraform doc snippets

Configuring Terraform with AWS

Method One

  • Not a good practice but one way of doing it

terraform {
 required_providers {
 aws = {
 source = "hashicorp/aws"
 version = "4.6.0"
 }
 }
}
provider "aws" {
 region = "ap-southeast-2"
 aceess_key= ""
 secert_key = ""
}

Method Two

  • Use IAM Programatic access with least privilage access
  • then configure

Method Three

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_DEFAULT_REGION="us-west-2"
$ terraform plan

Method Four

terraform {
 required_providers {
 aws = {
 source = "hashicorp/aws"
 version = "4.6.0"
 }
 }
}
provider "aws" {
 profile = "default"
 region = "ap-southeast-2"
}

Terraform CLI Sub-Commands

terraform -help

Main commands:

init - Prepare your working directory for other commands.
validate - Check whether the configuration is valid / Making sure syntax is correct.
plan - Show changes required by the current configuration / lets us know what terraform will do with the script.
apply - Create or update infrastructure/ deploy Infrastucture.
destroy - Destroy previously-created infrastructure.

All other commands:

console - an interactive command prompt.
fmt - Reformat your configuration in the standard style.
output - output values from your root module.
force-unlock Release a stuck lock on the current workspace. get Install or upgrade remote Terraform modules.
graph Generate a Graphviz graph of the steps in an operation.
import Associate existing infrastructure with a Terraform resource.
login Obtain and save credentials for a remote host.
logout Remove locally-stored credentials for a remote host.
providers Show the providers required for this configuration.
refresh Update the state to match remote systems.
show Show the current state or a saved plan.
state Advanced state management.
taint Mark a resource instance as not fully functional.
test Experimental support for module integration testing.
untaint Remove the 'tainted' state from a resource instance.
version Show the current Terraform version.
workspace Workspace management.


Global options (use these before the subcommand, if any): -chdir=DIR Switch to a different working directory before executing the given subcommand. -help Show this help output, or the help for a specified subcommand. -version An alias for the "version" subcommand.
Terraform State.

Terraform state file - terraform.tfstate

  • track your resources state.

  • identify the changes and othe details about the deployed infrastructure is shown in this file

  • json format

  • sensitive file

  • can be kept in remote storage place (example: - S3)

  • tracked and stored in terraform.tfstate

  • terraform.tfstate.backup is a backup file

  • helps to detect drift

  • terraform refresh - helps to find drift

  • store state in local and can setup to store in remote like s3

  • remote state is more secure

  • terrform state can be locked and locks by default by terraform locally

Terraform variables & outputs.

varibles

examples how variables are declared.

variable "availability_zone" {
 type = string
 default = "us-west-1a"
}
variable "my-variable"{}
  • use it separate in variable.tfvars file.
  • you can add validation during running variables
  • can add sensitive to data, its a bool value - true or false

Types

base types

  • string
    • example
     variable "image_id" {
     type = string
     description = "The id of the machine image (AMI) to use for the server."
     }
    
  • number
  • bool
    • example
      variable "user_information" {
       type = object({
       name = string
       address = string
       })
       sensitive = true 
      }
      resource "some_resource" "a" {
       name = var.user_information.name
       address = var.user_information.address
      }
      

complex types

  • list

    • example
    variable "az_names"{
     type = list(string)
     default=["ap-southeast-2"]
    }
    
  • set

  • map

  • object

  • tuple

Output

output "instance_ip_addr" {
 value = aws_instance.server.private_ip
}
  • return values from the config file
  • if you declare it, you will get outputs printed acording to the code
Terraform Provisioners.

Provisioners

run script locally or on remote resources

There are Two type of Provisioners

  • Create-time , run when resource creation
  • Destroy-time , run when resource distruction

Best Practice

  • if there is a inherent way to pass the script by public cloud provider , use that.
  • terraform cannot track through state files.

if the script running on a resource fails it taint the resource and re-provission on next terraform apply.

Official Documentation

  • example
resource "null_resource" "mk" {
 provisioner "local-exec" {
 command = "echo '0' > status.txt"
 }
 provisioner "local-exec" {
 # this runs only during when destroy 
 when = destroy
 command = "echo '1' > status.txt"
 }
}
Terraform state file.

Terraform State

  • Real world resources mapped to terraform code locally
  • default Stored locally named terraforms.tfstate
  • checks the state before modification.
  • metadata tracked via.tfstate

Terraform command

  • State Management
  • terraform state list - helps to list all resources.
  • terraform state rm - delete a resource from state file to untrack or unmanage. (resource will not be removed when you run terraform destroy)
  • terraform state show - shows details of a resource.
Terraform local and remote state files.

By defaut terraform state files stored locally

Remote State storage

Ex: s3, google storage

  • can use version control
  • allows work between teams

state locking

  • Helps to lock the .tfstate file.
  • supports on s3 , google cloud and Hasicrop Cosole.
  • Contains output values if defined.
Terraform Modules.

Modules

  • Container which have codes for reusability.

How to?

  • refer from public terraform library.

  • can host private registery.

  • can store locally and reference.

  • can provide outputs if configured to main block.

  • example for a terraform-aws-modules from terraform registry.

    module "ec2_instances" {
    source = "terraform-aws-modules/ec2-instance/aws"
    version = "2.12.0"
    name = "my-ec2-cluster"
    instance_count = 2
    ami = "ami-0c5204531f799e0c6"
    instance_type = "t2.micro"
    vpc_security_group_ids = [module.vpc.default_security_group_id]
    subnet_id = module.vpc.public_subnets[0]
    tags = {
    Terraform = "true"
    Environment = "dev"
     }
    }
    
Terraform input and output modules.

Inputs

  • Inputs that passed to Modules

Outputs

  • Output can be called in main module using module.module_name.output_name
Build in functions.

build in functions

https://www.terraform.io/language/functions

  • file
  • max
  • log(50, 10)

are some examples

Type constraints.

Sigle type value number = 3 stringtype- "this is a string" boolvalue = "true"

Collections type list() map() set()

Structrural object(type) tuple(type) set(type)

Dynamic Blocks.

Dynamic Blocks

Helps to create repatable nested configarations

  • data blocks
  • resources block
  • provider block
  • provissioner block

Dynamic blocks makes code cleaner but bit harder than normal so use it with caution.

Terraform fmt, taint, import.

terraform fmt

  • Format code for readability
  • can run at any time
  • doesnot change anything else

terraform taint resource_address

  • marks the resources neeed to be tainted, recreate on next apply.
  • Modify only statefile.

terraform import resource_address_id

  • import already deployed resources to terraform.

Terraform configuration block

 terraform {
 required_providers {
 aws = {
 source = "hashicorp/aws"
 version = "4.8.0"
 }
 }
}
provider "aws" {
 # Configuration options
}
Terraform Workspace.

WorkSpaces

  • always have default workspace.
  • used for multipple work environments
  • like dev-test-prod
  • Check terraform workspace -help

terraform workspace new <workspace-name>

  • create new work space

terraform workspace select <workspace-name>

  • jump into new workspace
Debugging.

export tf_LOG=TRACE

  • Turn on verbose for logging

export TF_LOG_PATH=Terraform.log

  • to export log into file name called terraform.log
terraform fmt, terraform taint, terraform import.

terraform fmt - beautify the code and make syntax consistant.
terraform taint - mark a resource to del , and it will be deleted on next terraform apply
terraform import - bring already build resources to terraform.

Terraform Cloud and Enterprise.

Sentinal

  • Policy as code
  • Has its own laungage
  • Version control
  • Testing and Automation
  • ex :- enforce CIS Security standards

Vault

  • Secrets Management Software
  • Pass temparory creds

terrform Registry

  • Modules are stored in registry
  • Publically accessable
  • Anyone can contribute to Registry

Cloud Workspaces

  • workspaces hold in cloud rather than in local
  • records activity
  • Can trigger via github actions

OSS and Terraform Cloud workspace

OSS

  • Create statefile locally
  • Variables are stored in.tfvars file
  • creds are stord locally

Cloud

  • Version control
  • communicated via API/CLi
  • State files stored in Cloud
  • variables are stored in cloud work space
  • creds are stord in cloud

Benifits of Terraform Cloud

  • remote execution
  • workspace on org model
  • version control
  • manage remotely
  • Private registry avilable to host privately
  • cost estimation
  • policy as code with sentinal

More Useful links

  • Terraform Best Practices - Link
  • 250 Practice Questions For Terraform Associate Certification - Link

About

This repository might help you to do a revision that helps to pass the Terraform Associate Exam

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /