Create_before_destroy lifecycle rule in Terraform - Time & Space Complexity
We want to understand how the time to apply changes grows when using the create_before_destroy lifecycle rule in Terraform.
Specifically, how does this rule affect the number of resource operations as we increase resources?
Analyze the time complexity of this Terraform resource with create_before_destroy lifecycle.
resource "aws_instance" "example" {
count = var.instance_count
ami = "ami-123456"
instance_type = "t2.micro"
lifecycle {
create_before_destroy = true
}
}
This creates multiple AWS instances, ensuring new ones are created before old ones are destroyed.
Look at what repeats when Terraform applies this configuration.
- Primary operation: Creating and destroying each AWS instance resource.
- How many times: Once per instance, twice per instance when replacing (create then destroy).
As the number of instances increases, the operations grow accordingly.
| Input Size (n) | Approx. API Calls/Operations |
|---|---|
| 10 | About 20 (create 10 new, destroy 10 old) |
| 100 | About 200 (create 100 new, destroy 100 old) |
| 1000 | About 2000 (create 1000 new, destroy 1000 old) |
Pattern observation: Operations roughly double because each resource is created before the old one is destroyed.
Time Complexity: O(n)
This means the time grows linearly with the number of resources, doubling the operations compared to simple create or destroy.
[X] Wrong: "Using create_before_destroy means Terraform will do twice as many operations regardless of resource count."
[OK] Correct: The doubling happens only when resources are replaced; if no replacement is needed, operations stay the same.
Understanding how lifecycle rules affect operation counts helps you design infrastructure changes that minimize downtime and manage costs effectively.
"What if we removed create_before_destroy and used the default lifecycle? How would the time complexity change when replacing resources?"
Practice
create_before_destroy lifecycle rule in Terraform?Solution
Step 1: Understand lifecycle behavior
Thecreate_before_destroyrule tells Terraform to create the replacement resource first.Step 2: Avoid downtime during updates
This ensures the old resource is only destroyed after the new one is ready, preventing service interruption.Final Answer:
To create a new resource before deleting the old one to avoid downtime -> Option AQuick Check:
create_before_destroy = avoid downtime [OK]
- Thinking it deletes old resource before creating new
- Confusing with prevent_destroy lifecycle rule
- Assuming it backs up resources automatically
create_before_destroy in a Terraform resource?Solution
Step 1: Review Terraform lifecycle block syntax
The lifecycle block uses curly braces with key-value pairs using = and booleans without quotes.Step 2: Identify correct boolean assignment
Boolean values are unquoted, sotrueis correct, not "true" as string.Final Answer:
lifecycle { create_before_destroy = true } -> Option AQuick Check:
Correct syntax uses = and unquoted booleans [OK]
- Using colon : instead of equals =
- Putting boolean true in quotes
- Assigning lifecycle block with = instead of braces
resource "aws_instance" "example" {
ami = "ami-123456"
instance_type = "t2.micro"
lifecycle {
create_before_destroy = true
}
}Solution
Step 1: Check lifecycle rule effect
Thecreate_before_destroy = truemeans Terraform creates the new resource first.Step 2: Understand resource replacement
Since the instance requires replacement, Terraform creates new instance before destroying old one.Final Answer:
Terraform will create the new instance before destroying the old one -> Option DQuick Check:
create_before_destroy = new before old [OK]
- Assuming old resource is destroyed first
- Thinking update happens in place always
- Believing create_before_destroy is unsupported
create_before_destroy = true to a resource but Terraform still destroys the old resource before creating the new one. What is the likely cause?Solution
Step 1: Understand resource support
Not all Terraform resources supportcreate_before_destroy. If unsupported, Terraform ignores it.Step 2: Check lifecycle behavior fallback
If unsupported, Terraform defaults to destroying old resource before creating new one.Final Answer:
The resource does not support create_before_destroy lifecycle rule -> Option BQuick Check:
Unsupported resource ignores create_before_destroy [OK]
- Assuming terraform init fixes lifecycle issues
- Using quotes around boolean true
- Believing lifecycle rules always override resource behavior
create_before_destroy?Solution
Step 1: Use create_before_destroy for zero downtime
Settingcreate_before_destroy = trueensures new resource is ready before old is removed.Step 2: Confirm resource supports lifecycle rule
Check documentation to ensure the database resource supports this lifecycle feature to avoid unexpected downtime.Final Answer:
Addlifecycle { create_before_destroy = true }and verify the resource supports it -> Option CQuick Check:
Use create_before_destroy with support check [OK]
- Using prevent_destroy which blocks updates
- Relying on default lifecycle risking downtime
- Manually deleting resources causing downtime
Ready to prove it?
Pass the test and this pattern moves unknown
