Logging has to be turned on locally if you want to debug the issues during terraform plan or apply.
Terraform depends on two environment variables being configured. These two variables are TF_LOG and TF_LOG_PATH. I will be setting my TF_LOG environment variable to the TRACE log level and the TF_LOG_PATH environment variable to the logs/terraform_logs.txt file. You can set your TF_LOG environment variable to DEBUG, INFO, WARN, or ERROR.
We will then deploy our resources and check to see if the log is created.
Please visit my GitHub Repository for Terraform articles on various topics being updated on constant basis.
Let’s get started!
Objectives:
1. Login to AWS Management Console
2. Create infrastructure for resources block
3. Under terraform_files resources directory - Create 3 files - main.tf
, variables.tf
, and outputs.tf
.
4. Enable Debug Logging
5. Capture Logging
6. Terraform deployment
Pre-requisites:
- AWS user account with admin access, not a root account.
- Cloud9 IDE with AWS CLI.
Resources Used:
Terraform documentation.
Terraform documentation for AMI.
Debugging Terraform
Implement logging-View all Terraform log output
Steps for implementation to this project:
1. Login to AWS Management Console
- Make sure you're in the N. Virginia (us-east-1) region
2. Create infrastructure for resources block
- Let’s create the following organizational structure as shown below.
3. Under terraform_files resources directory - Create 3 files - main.tf
, variables.tf
, and outputs.tf
.
- 1. main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.23"
}
}
required_version = ">= 0.14.9"
}
provider "aws" {
profile = "default"
region = "us-east-1"
}
resource "aws_instance" "app_server" {
ami = var.instance_ami
instance_type = "t3.micro"
subnet_id = var.subnet_id
tags = {
Name = var.instance_name
}
}
- 2. variables.tf
variable "instance_ami" {
description = "Value of the AMI used for the EC2 instance"
type = string
default = "<DUMMY_VALUE_AMI>"
}
variable "instance_ami" {
description = "Value of the AMI used for the EC2 instance"
type = string
default = "ami-0bb4c991fa89d4b9b"
}
variable "subnet_id" {
description = "Value of the subnet id used for the EC2 instance"
type = string
default = "<DUMMY_VALUE_SUBNET_ID>"
}
variable "subnet_id" {
description = "Value of the subnet id used for the EC2 instance"
type = string
default = "subnet-05f279c5812013c5e"
}
variable "instance_name" {
description = "Value of the Name tag for the EC2 instance"
type = string
default = "MyInstance"
}
- 3. outputs.tf
output "instance_id" {
description = "ID of the EC2 instance"
value = aws_instance.app_server.id
}
output "instance_ip" {
description = "Public IP address of the EC2 instance"
value = aws_instance.app_server.public_ip
}
output "instance_name" {
description = "Name of the EC2 instance"
value = aws_instance.app_server.tags.Name
}
4. Enable Debug Logging
For one time session where you need detailed log information
- Set an environment variable for TF_LOG:
For PowerShell
$env:TF_LOG=TRACE
For Bash
export TF_LOG=TRACE
- 2. Create the logs directory:
mkdir logs
- 3. Set an environment variable for TF_LOG_PATH to the logs directory:
For PowerShell
$env:TF_LOG_PATH=terraform.txt
For Bash
export TF_LOG_PATH=logs/terraform_logs.txt
This outputs your logs to the terraform.txt file.
- 4. to verify that it worked.
For PowerShell
> echo $env:TF_LOG
TRACE
> echo $env:TF_LOG_PATH
terraform.txt
For Bash
echo $TF_LOG
echo $TF_LOG_PATH
5. Capture Logging
- Check the formatting of your resources: ```
terraform fmt
- Initialize your working directory:
terraform init
- This should have generated some logs.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8iici3uju3ho5rsfhb72.png)
- Confirm the Log was Written to the Directory
- After your working directory is initialized, check your terraform_logs.txt file to confirm it contains logs:
tail -50 logs/terraform_logs.txt
- You should see that logs are successfully output to terraform_logs.txt.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dq1yze1hauo76irk1mqb.png)
## 6. Terraform deployment
- Check which version of Terraform you're running
- This is useful if you're submitting a bug report to troubleshoot a Terraform issue.
terraform version
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p34gb6rt8gjeglk6sxv4.png)
- Plan your Terraform deployment:
terraform plan
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vsc2cuhfgmwgw0lwvktf.png)
- Apply your Terraform deployment:
- When prompted to Enter a value, enter yes.
terraform apply
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/no5igimrsk4fwkhietb4.png)
- After the apply completes successfully, check your terraform_logs.txt file to confirm it now contains logs related to your apply:
tail -50 logs/terraform_logs.txt
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/avbu3lnwxugyzaxekqml.png)
- MyInstance
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yubm20absdk67xivy2gj.png)
# Cleanup
terraform destroy
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gud3c27gpb7iya5lywmj.png)
# What we have done so far
We have successfully enabled debug logging by setting the `TF_LOG` environment variable to the `TRACE` log level and setting `TF_LOG_PATH` environment variable to the `logs/terraform_logs.txt` file. Aftrwards, we have deployed our resources and then checked to see if the log was created.
Top comments (0)