Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Terraform
Agenda Terraform
● Introduction to Terraform Instructions / Notes
● Terraform Installation ● Starts: 27 June, 7:30am PDT/PST or 27 June, 8pm IST
● Terraform command ● 2 Hours session with 10 minutes Break
Ashok Singh
Terraform
Introduction to Terraform
Terraform
What is Terraform?
● Infrastructure as a Code
● Execution plan
● Resource Graph
● Automation of Infrastructure
Terraform
Terraform
● Tool for building, changing, and versioning infrastructure.
● Terraform can work with many providers like AWS, Azure, Digital ocean and
in-house solutions.
Terraform
Use Case : Why Terraform?
Terraform
Terraform Installation
Terraform
Lab01: Install Terraform on bastion
Task: Prepare host and validate it by launching terraform version.
Step1 : Launch EC2 instance . Tag it as bastion and connect to bastion host
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-20-142 ~]$
Terraform
Lab01: Install Terraform on bastion
Step2 : Become root
[root@ip-172-31-24-224] #
[root@ip-172-31-24-224] # terraform --version
Terraform v0.12.28
[root@ip-172-31-47-70 ~]#
Terraform
Terraform initialisation
Terraform
Provider - Resource
● Resource Type and argument
Azure
provider
Terraform
Resources
Resources are the most important element in the Terraform language. Each resource
block describes one or more infrastructure objects, such as compute instances, VPC,
Subnet etc.
● Resource Syntax
Terraform
Lab01: Deploy Bastion in AWS
Step 1 : Connect to bastion host
ashoksingh@Ashoks-Air ~/Devops-Course/terra ssh -i ~/.ssh/aws-key.pem ec2-user@3.8.145.173
Last login: Sat Jun 27 22:05:42 2020 from 90.254.243.112
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 23 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-47-70 ~]$
Terraform
Lab01: Deploy Bastion in AWS
Step 3 : Instance.tf Overview
# Configure the AWS Provider
provider "aws" {
version = "~> 2.0"
region = "eu-west-2"
}
# Create a instance
resource "aws_instance" "bastion" {
ami = "ami-01a6e31ac994bbc09"
instance_type = "t2.micro"
}
Terraform
Lab01: Deploy Bastion in AWS
Step 3 : Attach a IAM role to bastion host OR add aws credential on bastion
Terraform
Lab01: Deploy Bastion in AWS
Step 4 : Add AWS credentials
[ec2-user@ip-172-31-47-70 ~]$ more credentials
[default]
aws_access_key_id = AKIAXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXX
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
[ec2-user@ip-172-31-47-70 ~]$
Terraform
Lab01: Deploy Bastion in AWS
Step 7 : Run Terraform apply
[ec2-user@ip-172-31-47-70 ~]$ terraform apply
aws_instance.bastion: Creating...
aws_instance.bastion: Still creating... [10s elapsed]
aws_instance.bastion: Still creating... [20s elapsed]
aws_instance.bastion: Creation complete after 21s [id=i-0220643a50c7fd1cd]
Terraform
Lab01: Deploy Bastion in AWS
Step 8 : Validate that instance is created
Terraform
Terraform Commands
Terraform
Terraform init
The terraform init command is used to initialize a working directory .
It read the configuration file and prepare for execution of plan command and download
necessary modules, provider or version needed for planning
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
Terraform
Terraform plan
The terraform plan command is used to create an execution plan.
It determines what actions are necessary to achieve the desired state specified in the
configuration files.
[ec2-user@ip-172-31-47-70 ~]$ terraform plan
Refreshing Terraform state in-memory prior to plan...
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
[ec2-user@ip-172-31-47-70 ~]$
Terraform
Terraform apply
The terraform apply command is used to apply the changes required to reach the desired
state of the configuration
[ec2-user@ip-172-31-47-70 ~]$ terraform apply
aws_instance.bastion: Creating...
aws_instance.bastion: Still creating... [10s elapsed]
aws_instance.bastion: Still creating... [20s elapsed]
aws_instance.bastion: Creation complete after 21s [id=i-0220643a50c7fd1cd]
Terraform
Terraform destroy
The terraform destroy command is used to destroy the Terraform-managed infrastructure.
Terraform
Terraform Validate
Validate runs checks that verify whether a configuration is syntactically valid and internally
consistent, regardless of any provided variables or existing state. It is thus primarily useful
for general verification of reusable modules, including correctness of attribute names and
value types.
[ec2-user@ip-172-31-47-70 aws-ec2]$ terraform validate
on provider.tf line 2:
2: provider "aws" {
[ec2-user@ip-172-31-47-70 aws-ec2]$
Terraform
Terraform Graph
The terraform graph command is used to generate a visual representation of either a
configuration or execution plan. The output is in the DOT format, which can be used by
GraphViz to generate charts.
Terraform
Terraform Graph
Graph.svg file
Terraform
Terraform troubleshooting
Terraform detailed logs can be enabled by setting the TF_LOG environment variable
● TRACE
● DEBUG
● INFO
● WARN
● ERROR
Logged output can be send to file and location exported in env var TF_LOG_PATH
Terraform
Terraform Variables
Terraform
Why Variables?
Terraform
Restructure the code
# Create a instance
}
provider.tf
resource "aws_instance" "bastion" {
ami = "ami-01a6e31ac994bbc09"
instance_type = "t2.micro"
}
ec2-instance.tf
Terraform
Declaring and Defining variables
# Define variables
aws_access_key = "XXXXXXXXXXXXXXXXXXXX"
variable "aws_access_key" { aws_secret_key = "XXXXXXXXXXXXXXXXXXXX"
type = string
}
variable "aws_secret_key" { terraform.tfvars
type = string
}
variable "region" {
type = string
default = "eu-west-2"
}
vars.tf
Terraform
Lab02: Spin ec2-instance in AWS
Step 1 : Connect to bastion
ashoksingh@Ashoks-Air ~/Devops-Course ssh -i ~/.ssh/aws-key.pem ec2-user@52.56.174.96
Last login: Sun Jun 28 10:44:09 2020 from 90.254.243.112
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 22 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-47-70 ~]$
Terraform
Lab02: Spin ec2-instance in AWS
Step 5 : Run terraform plan
[ec2-user@ip-172-31-47-70 lab02-variables]$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
[ec2-user@ip-172-31-47-70 lab02-variables]$
Terraform
Lab02: Spin ec2-instance in AWS
Step 6 : Run terraform apply
[ec2-user@ip-172-31-47-70 lab02-variables]$ terraform apply
aws_instance.bastion: Creating...
aws_instance.bastion: Still creating... [10s elapsed]
aws_instance.bastion: Still creating... [20s elapsed]
aws_instance.bastion: Creation complete after 21s [id=i-0de1419b788108a5e]
Terraform
Lab02: Spin ec2-instance in AWS
Step 7 : Validate EC2 instance from AWS console
Terraform
Lookup variable
# Define variables
# Create a instance
…
resource "aws_instance" "bastion" {
…
ami = "${lookup(var.aws-ami,
vars.tf
Use Lookup variable to launch different AMI for different AWS region
Terraform
Lab03: Spin ec2-instance in different region
Step 1 : Connect to bastion
ashoksingh@Ashoks-Air ~/Devops-Course ssh -i ~/.ssh/aws-key.pem ec2-user@52.56.174.96
Last login: Sun Jun 28 10:44:09 2020 from 90.254.243.112
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 22 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-47-70 ~]$
Terraform
Lab02: Spin ec2-instance in AWS
Step 5 : Run terraform plan
[ec2-user@ip-172-31-47-70 lab03-lookup-variables]$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
[ec2-user@ip-172-31-47-70 lab03-lookup-variables]$
Terraform
Lab02: Spin ec2-instance in AWS
Step 6 : Run terraform apply
[ec2-user@ip-172-31-47-70 lab03-lookup-variables]$ terraform apply
aws_instance.bastion: Creating...
aws_instance.bastion: Still creating... [10s elapsed]
aws_instance.bastion: Still creating... [20s elapsed]
aws_instance.bastion: Creation complete after 21s [id=i-0de1419b788108a5e]
Terraform
Lab03: Spin ec2-instance in different region
Step 7 : Validate EC2 instance from AWS console
Terraform
Software Provisioning
Terraform
AWS KEY PAIR
key pair is generated using ssh-key-gen utility and file name and path is provided to the
resource . This key pair's public key will be registered with AWS to allow logging-in to EC2
instances. "devops_public_key" {
variable
type = string
default = "foo.pub"
}
vars.tf
Terraform
Provisioner
Provisioners can be used to model specific actions on the local machine or on a remote
provisioner "file" {
source = "script.sh"
File script.sh will be copied from current
directory to EC2 in directory /tmp
destination = "/tmp/script.sh"
}
provisioner "remote-exec" {
inline = [ script.sh file will be made executable and in
" chmod +x /tmp/script.sh" , next step will be executed with root
permission
" sudo /tmp/script.sh"
]
}
Terraform
Connection
Most provisioners require access to the remote resource via SSH or WinRM, and expect a
Above blocks connect to ec2 instance using username defined variable file and
private key
Terraform
Lab04: Deploy nginx server using Terraform
Step 1 : Connect to bastion
ashoksingh@Ashoks-Air ~/Devops-Course ssh -i ~/.ssh/aws-key.pem ec2-user@52.56.174.96
Last login: Sun Jun 28 10:44:09 2020 from 90.254.243.112
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 22 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-47-70 ~]$
Terraform
Lab04: Deploy nginx server using Terraform
Step 5 : Generate key pair
[ec2-user@ip-172-31-47-70 lab04-install-nginx]$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
SHA256:H+d7uZ7cEf8rRhnzohgMTQfLJays1FAwGNmx8qdTe/o
ec2-user@ip-172-31-47-70.eu-west-2.compute.internal
The key's randomart image is:
+---[RSA 2048]----+
| .=++..o.. |
| o oo .o+. |
| . .+ +o. |
| o. = . o |
| ...oS . . =. |
| .+ .+ + + .o|
| o . .+ + .o.|
| . o. . =ooo|
| ..E oo*o+|
+----[SHA256]-----+
[ec2-user@ip-172-31-47-70 lab04-install-nginx]$
Terraform
Lab04: Deploy nginx server using Terraform
Step 6 : Run terraform plan
[ec2-user@ip-172-31-47-70 lab04-install-nginx]$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
------------------------------------------------------------------------
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
[ec2-user@ip-172-31-47-70 lab04-install-nginx]$
Terraform
Lab04: Deploy nginx server using Terraform
Step 7 : Run terraform apply
[ec2-user@ip-172-31-47-70 lab04-install-nginx]$ terraform apply
aws_key_pair.devops_key: Creating...
aws_key_pair.devops_key: Creation complete after 0s [id=foo]
aws_instance.nginx: Creating...
aws_instance.nginx: Still creating... [10s elapsed]
aws_instance.nginx: Provisioning with 'file'...
aws_instance.nginx: Still creating... [20s elapsed]
aws_instance.nginx: Still creating... [30s elapsed]
Terraform
Lab04: Deploy nginx server using Terraform
Step 7 : Run terraform apply
aws_instance.nginx: Provisioning with 'remote-exec'...
aws_instance.nginx (remote-exec): Connecting to remote host via SSH...
aws_instance.nginx (remote-exec): Host: 52.56.42.144
aws_instance.nginx (remote-exec): User: ec2-user
aws_instance.nginx (remote-exec): Password: false
aws_instance.nginx (remote-exec): Private key: true
aws_instance.nginx (remote-exec): Certificate: false
aws_instance.nginx (remote-exec): SSH Agent: false
aws_instance.nginx (remote-exec): Checking Host Key: false
aws_instance.nginx (remote-exec): Connected!
aws_instance.nginx (remote-exec): Loaded plugins: extras_suggestions,
Terraform
Lab04: Deploy nginx server using Terraform
Step 8 : Access nginx server from browser
Terraform
Deploying EKS using Terraform
Terraform
Deploying EKS using Terraform
● Step 1: Connect to bastion server . Become root
ashoksingh@Ashoks-Air ~/Devops-Course/git/ ssh -i ~/.ssh/aws-key.pem ec2-user@3.8.3.192
Last login: Sat Jul 4 00:16:03 2020 from 90.254.242.102
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 29 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-18-61 ~]$ sudo su -
Last login: Sat Jul 4 00:17:24 UTC 2020 on pts/0
[root@ip-172-31-18-61 ~]# git clone https://github.com/singh-ashok25/aws-eks.git
Terraform
Deploying EKS using Terraform
● Step 4 : Install Kubectl following instruction from below link
https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html
Terraform
Deploying EKS using Terraform
● Step 7 : Upload key pair in AWS
Terraform
Deploying EKS using Terraform
● Step 8 : Run terraform init
[root@ip-172-31-18-61 aws-eks]# terraform init
Terraform
Deploying EKS using Terraform
● Step 9 : Run terraform plan
[root@ip-172-31-18-61 aws-eks]# terraform plan
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
[root@ip-172-31-18-61 aws-eks]#
Terraform
Deploying EKS using Terraform
● Step 10 : Run terraform apply
[root@ip-172-31-18-61 aws-eks]# terraform apply
aws_iam_role.eks_cluster: Creating...
aws_iam_role.eks-node: Creating...
aws_vpc.eks_vpc: Creating...
aws_iam_role.eks_cluster: Creation complete after 0s [id=tejas-tech-IAM]
aws_iam_role.eks-node: Creation complete after 0s [id=tejas-tech-node]
aws_iam_role_policy_attachment.eks_cluster-AmazonEKSServicePolicy: Creating...
aws_iam_role_policy_attachment.eks-node-AmazonEC2ContainerRegistryReadOnly: Creating...
aws_iam_role_policy_attachment.eks_cluster-AmazonEKSClusterPolicy: Creating...
aws_iam_role_policy_attachment.eks-node-AmazonEKS_CNI_Policy: Creating...
aws_iam_role_policy_attachment.eks-node-AmazonEKSWorkerNodePolicy: Creating...
Terraform
Deploying EKS using Terraform
● Step 11 : Check the EKS cluster on AWS console
Terraform
Deploying EKS using Terraform
● Step 12: Configure kubectl and mapping nodes
Terraform
Deploying EKS using Terraform
● Step 11 : Deploy flask app on EKS
Terraform
Terraform Datasources
Terraform
Datasources
Data source definition and declaration
# Using these data sources allows the configuration to be
# generic for any region.
data "aws_region" "current" {}
Terraform )
Templates
The template_file data source renders a template from a template string, which is usually loaded
from an external file.
} # aws_ami = "ami-01a6e31ac994bbc09"
type = map
}
default = {
}
eu-west-2 = "ami-01a6e31ac994bbc09"
eu-west-1 = "ami-0ea3405d2d2522162"
output "init-template" {
} }
value = "${data.template_file.init.rendered}"
}
Terraform
Terraform output
Terraform
Output
Using resource generate in next section
VPC ID generated in
resource aws_vpc is used
in generating resource
aws_subnet
vpc_id = aws_vpc.eks_vpc.id
Terraform
Output
Data source definition and declaration
# Using these data sources allows the configuration to be
# generic for any region.
data "aws_region" "current" {}
Terraform )
Terraform Modules
Terraform
Modules
● A module is a group of terraform file to achieve desired functionality
● It creates multiple resources that are used together to perform one of more
● The .tf files in your working directory when you run terraform plan or terraform
apply together form the root module. That module may call other modules and
connect them together by passing output values from one to input values of
another.
Terraform
Registry
● Terraform registry is a web interface of all publically available modules
● Registry provide more structured information on available module and their use in
terraform eco-system
https://registry.terraform.io
Terraform
Lab06: Deploy ECS cluster in AWS using public module
Step1 : Connect to bastion and become root
ashoksingh@Ashoks-Air ~ ssh -i ~/.ssh/aws-key.pem ec2-user@35.177.231.210
Last login: Sat Jul 4 12:20:47 2020 from 90.254.242.102
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-18-61 ~]$ sudo su -
Terraform
Lab06: Deploy ECS cluster in AWS using public module
Step3 : change directory lab06-modules and run terraform init
[root@ip-172-31-18-61 ~]# cd terraform/lab06-modules/
[root@ip-172-31-18-61 lab06-modules]# ls
main.tf
[root@ip-172-31-18-61 lab06-modules]# terraform init
Initializing modules...
Downloading terraform-aws-modules/ecs/aws 2.3.0 for ecs...
- ecs in .terraform/modules/ecs/terraform-aws-ecs-2.3.0
Terraform
Lab06: Deploy ECS cluster in AWS using public module
Step4 : Run terraform init from the example of module
[root@ip-172-31-18-61 lab06-modules]# cd
.terraform/modules/ecs/terraform-aws-ecs-2.3.0/examples/complete-ecs/
[root@ip-172-31-18-61 complete-ecs]# ls
main.tf README.md service-hello-world templates
[root@ip-172-31-18-61 complete-ecs]# terraform init
Initializing modules...
- ec2-profile in ../../modules/ecs-instance-profile
- ecs in ../..
- hello-world in service-hello-world
Downloading terraform-aws-modules/autoscaling/aws 3.5.0 for this...
- this in .terraform/modules/this/terraform-aws-autoscaling-3.5.0
Downloading terraform-aws-modules/vpc/aws 2.44.0 for vpc...
- vpc in .terraform/modules/vpc/terraform-aws-vpc-2.44.0
[root@ip-172-31-18-61 complete-ecs]#
Terraform
Lab06: Deploy ECS cluster in AWS using public module
Step5 : Run terraform plan and provide variable values
[root@ip-172-31-18-61 complete-ecs]# terraform plan
provider.aws.region
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Terraform
Lab06: Deploy ECS cluster in AWS using public module
Step6 : Run terraform apply
[root@ip-172-31-18-61 complete-ecs]# terraform apply
provider.aws.region
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Terraform
Lab06: Deploy ECS cluster in AWS using public module
Step7 : Validate ECS cluster in AWS console
Terraform
Lab06: Deploy ECS cluster in AWS using public module
Step7 : Clean up
[root@ip-172-31-18-61 complete-ecs]# terraform destroy
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
module.ec2-profile.aws_iam_role_policy_attachment.ecs_ec2_cloudwatch_role: Destroying...
[id=complete-ecs_ecs_instance_role-20200704123828947900000001]
module.ec2-profile.aws_iam_instance_profile.this: Destruction complete after 0s
module.ec2-profile.aws_iam_role.this: Destroying... [id=complete-ecs_ecs_instance_role]
module.ec2-profile.aws_iam_role.this: Destruction complete after 1s
Terraform
Lab07: Deploy Resource group in Azure
Step1 : Launch Bastion on Azure and connect to bastion
ashoksingh@Ashoks-Air ~/.ssh ssh -i bastion_key.pem AzureUser@51.11.149.71
Last login: Sat Jul 4 13:21:16 2020 from 90.254.242.102
[AzureUser@bastion ~]$
Last login: Sat Jul 4 13:24:33 UTC 2020 on pts/0
[root@bastion ~]#
Terraform
Lab07: Deploy Resource group in Azure
Step3 : Launch Bastion on Azure and connect to bastion
ashoksingh@Ashoks-Air ~/.ssh ssh -i bastion_key.pem AzureUser@51.11.149.71
Last login: Sat Jul 4 13:21:16 2020 from 90.254.242.102
[AzureUser@bastion ~]$
Last login: Sat Jul 4 13:24:33 UTC 2020 on pts/0
[root@bastion ~]#
Terraform
Lab07: Deploy Resource group in Azure
Step5 : login to azure - az login
[root@bastion ~]# az login
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code
C3BDS3QEH to authenticate.
Terraform
Lab07: Deploy Resource group in Azure
Step6 : Create provider.tf and main.tf as below
resource "azurerm_resource_group"
provider "azurerm" { "example" {
version = "=2.0.0" name =
features {} "example-resource-group"
} location = "West Europe"
provider.tf timeouts {
create = "10m"
delete = "30m"
}
}
main.tf
Terraform
Lab07: Deploy Resource group in Azure
Step7 : Run terraform init
[root@bastion ~]# terraform init
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
Terraform
Lab07: Deploy Resource group in Azure
Step8 : Run terraform plan
[root@bastion ~]# terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
[root@bastion ~]#
Terraform
Lab07: Deploy Resource group in Azure
Step9 : Run terraform apply
[root@bastion ~]# terraform apply
Terraform will perform the following actions:
azurerm_resource_group.example: Creating...
azurerm_resource_group.example: Creation complete after 0s
[id=/subscriptions/4d80cf54-31f0-4a1f-b4be-8c757b93593d/resourceGroups/example-resource-group]
Terraform
Lab07: Deploy Resource group in Azure
Step 10 : Validate resource creation on Azure console
Terraform
Thanks you
Terraform
Devops - Project Lab
Terraform