Terraform Provider Dependency Lock File
Step-01: Introduction¶
- Understand the importance of Dependency Lock File which is introduced in
Terraform v0.14onwards
Step-02: Create or Review c1-versions.tf¶
- c1-versions.tf
- Discuss about Terraform, Azure and Random Pet Provider Versions
- Discuss about Azure RM Provider version
1.44.0 - In provider block,
features {}block is not present in Azure RM provider verion1.44.0 - Also discuss about Random Provider
- Azure Provider v1.44.0 Documentation
# Terraform Block terraform { required_version = ">= 1.0.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "1.44.0" #version = ">= 2.0" # Commented for Dependency Lock File Demo } random = { source = "hashicorp/random" version = ">= 3.0" } } } # Provider Block provider "azurerm" { # features {} # Commented for Dependency Lock File Demo }
Step-03: Create or Review c2-resource-group-storage-container.tf¶
- c2-resource-group-storage-container.tf
- Discuss about Azure Resource Group Resource
- Discuss about Random String Resource
- Discuss about Azure Storage Account Resource - Latest
- Discuss about Azure Storage Account Resource - v1.44.0
# Resource-1: Azure Resource Group resource "azurerm_resource_group" "myrg1" { name = "myrg-1" location = "East US" } # Resource-2: Random String resource "random_string" "myrandom" { length = 16 upper = false special = false } # Resource-3: Azure Storage Account resource "azurerm_storage_account" "mysa" { name = "mysa${random_string.myrandom.id}" resource_group_name = azurerm_resource_group.myrg1.name location = azurerm_resource_group.myrg1.location account_tier = "Standard" account_replication_type = "GRS" account_encryption_source = "Microsoft.Storage" tags = { environment = "staging" } }
Step-04: Initialize and apply the configuration¶
# We will start with Base v1.44 `.terraform.lock.hcl` file
cp .terraform.lock.hcl-v1.44 .terraform.lock.hcl
Observation: This will ensure, when we run terraform init, everything related to providers will be picked from this file
# Initialize Terraform
terraform init
# Compare both files
diff .terraform.lock.hcl-v1.44 .terraform.lock.hcl
# Validate Terraform Configuration files
terraform validate
# Execute Terraform Plan
terraform plan
# Create Resources using Terraform Apply
terraform apply
.terraform.lock.hcl
1. Provider Version
2. Version Constraints
3. Hashes
Step-05: Upgrade the Azure provider version¶
- For Azure Provider, with version constraint
version = ">= 2.0.0", it is going to upgrade to latest version with commandterraform init -upgrade - Review .terraform.lock.hcl
- Discuss about Azure Provider Versions
- Compare
.terraform.lock.hcl-v1.44&terraform.lock.hcl-V2.X.X
Step-06: Run Terraform Apply with latest Azure Provider¶
- Should fail due to argument
account_encryption_sourcefor Resourceazurerm_storage_accountnot present in Azure v2.x provider when compared to Azure v1.x provider - Error Message
Kalyans-MacBook-Pro:terraform-manifests kdaida$ terraform plan ╷ │ Error: Unsupported argument │ │ on c2-resource-group-storage-container.tf line 21, in resource "azurerm_storage_account" "mysa": │ 21: account_encryption_source = "Microsoft.Storage" │ │ An argument named "account_encryption_source" is not expected here. ╵ Kalyans-MacBook-Pro:terraform-manifests kdaida$
Step-07: Comment account_encryption_source¶
- When we do a major version upgrade to providers, it might break few features.
- So with
.terraform.lock.hcl, we can avoid this type of issues by maintaining our Provider versions consistent across any machine by having a copy of.terraform.lock.hclfile with us.# Comment account_encryption_source Attribute # Resource-3: Azure Storage Account resource "azurerm_storage_account" "mysa" { name = "mysa${random_string.myrandom.id}" resource_group_name = azurerm_resource_group.myrg1.name location = azurerm_resource_group.myrg1.location account_tier = "Standard" account_replication_type = "GRS" #account_encryption_source = "Microsoft.Storage" tags = { environment = "staging" } }
Step-08: Uncomment or add features block in Azure Provider Block¶
- As part of Azure Provider 2.x.x latest versions, it needs
features {}block in Provider block. - Please Uncomment
features {}block - Error Log of features block not present
Step-09: Run Terraform Plan and Apply¶
- Everything should pass and Storage account should migrate to
StorageV2 - Also Azure Provider v2.x default changes should be applied
Step-10: Clean-Up¶
# Destroy Resources
terraform destroy
# Delete Terraform Files
rm -rf .terraform
rm -rf .terraform.lock.hcl
Observation: We are not removing files named ".terraform.lock.hcl-V2.X.X, .terraform.lock.hcl-V1.44" which are needed for this demo for you.
# Delete Terraform State File
rm -rf terraform.tfstate*
Step-11: To put back this to original demo state for students to have seamless demo¶
# Change-1: c1-versions.tf
version = "1.44.0"
#version = ">= 2.0"
# Change-2: c1-versions.tf: Features block in commented state
# features {}
# Change-3: c2-resource-group-storage-container.tf
account_encryption_source = "Microsoft.Storage"
References¶
🎉 New Course
Ultimate DevOps Real-World Project Implementation on AWS
$15.99
$84.99
81% OFF
MARCH2026
Enroll Now on Udemy →
🎉 Offer