Bird
Raised Fist0
Terraformcloud~10 mins

Terraform apply -replace flag - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Terraform apply -replace flag
Start terraform apply
Check -replace flag?
NoNormal apply
Yes
Mark specified resource for replacement
Destroy old resource
Create new resource
Apply other changes
Finish apply
Terraform apply checks if the -replace flag is used. If yes, it forces replacement of specified resources by destroying and recreating them during apply.
Execution Sample
Terraform
terraform apply -replace=aws_instance.example
This command forces Terraform to replace the aws_instance.example resource during apply.
Process Table
StepActionResourceState BeforeState AfterNotes
1Start apply-aws_instance.example: existingaws_instance.example: existingBegin terraform apply process
2Check -replace flag----replace=aws_instance.example detected
3Mark resource for replacementaws_instance.exampleexistingmarked for replacementResource flagged to be destroyed and recreated
4Destroy old resourceaws_instance.examplemarked for replacementdestroyedOld instance is destroyed
5Create new resourceaws_instance.exampledestroyedcreatedNew instance is created
6Apply other changes---Apply any other planned changes
7Finish apply-aws_instance.example: createdaws_instance.example: createdApply completes successfully
💡 All resources applied; replaced resource destroyed and recreated as requested by -replace flag
Status Tracker
VariableStartAfter Step 3After Step 4After Step 5Final
aws_instance.exampleexistingmarked for replacementdestroyedcreatedcreated
Key Moments - 3 Insights
Why does Terraform destroy the resource before creating a new one when using -replace?
Terraform must destroy the existing resource first to avoid conflicts and ensure a clean replacement, as shown in steps 4 and 5 of the execution_table.
Does -replace affect resources not specified in the flag?
No, only the resource specified with -replace is destroyed and recreated; other resources are applied normally, as seen in step 6.
What happens if the resource does not exist before apply but -replace is used?
Terraform will simply create the resource without destruction since there is no existing resource to replace, similar to skipping step 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the state of aws_instance.example after step 4?
Aexisting
Bdestroyed
Cmarked for replacement
Dcreated
💡 Hint
Check the 'State After' column for step 4 in the execution_table.
At which step does Terraform detect the -replace flag?
AStep 2
BStep 1
CStep 3
DStep 5
💡 Hint
Look for the action 'Check -replace flag' in the execution_table.
If you remove the -replace flag, how would the execution_table change?
AResource would be destroyed but not recreated
BStep 3 would mark resource for replacement anyway
CStep 4 and 5 would be skipped; resource remains existing
DAll steps remain the same
💡 Hint
Refer to the concept_flow where no -replace flag leads to normal apply without replacement.
Concept Snapshot
terraform apply -replace=resource
Forces replacement of specified resource.
Destroys old resource, then creates new one.
Other resources apply normally.
Use to fix or refresh problematic resources.
Full Transcript
Terraform apply with the -replace flag forces Terraform to destroy and recreate a specified resource during the apply process. The flow starts with detecting the flag, marking the resource for replacement, destroying the old resource, creating a new one, then applying other changes normally. This is useful when you want to refresh or fix a resource without changing the entire infrastructure. Only the specified resource is replaced; others remain unchanged.

Practice

(1/5)
1. What does the -replace flag do when used with terraform apply?
easy
A. Only plans changes without applying them
B. Skips the creation of new resources
C. Forces Terraform to destroy and recreate a specific resource
D. Updates all resources without destroying any

Solution

  1. Step 1: Understand the purpose of the -replace flag

    The -replace flag tells Terraform to destroy and recreate a specific resource during apply.
  2. Step 2: Compare with other apply behaviors

    Normally, Terraform updates resources in place if possible, but -replace forces full replacement of the targeted resource.
  3. Final Answer:

    Forces Terraform to destroy and recreate a specific resource -> Option C
  4. Quick Check:

    -replace flag = force resource replacement [OK]
Hint: Remember: -replace means rebuild that resource only [OK]
Common Mistakes:
  • Thinking -replace updates resources in place
  • Confusing -replace with plan-only mode
  • Assuming it affects all resources
2. Which of the following is the correct syntax to replace a resource named aws_instance.example using Terraform apply?
easy
A. terraform apply -replace=aws_instance.example
B. terraform apply --replace aws_instance.example
C. terraform apply -replace aws_instance.example
D. terraform apply -replace=aws_instance.example.id

Solution

  1. Step 1: Recall the correct flag syntax

    The correct syntax uses an equals sign with the resource address: -replace=resource_address.
  2. Step 2: Check the resource address format

    The resource address is aws_instance.example, so the correct command is terraform apply -replace=aws_instance.example.
  3. Final Answer:

    terraform apply -replace=aws_instance.example -> Option A
  4. Quick Check:

    Correct syntax uses '=' with resource address [OK]
Hint: Use '=' directly after -replace with resource name [OK]
Common Mistakes:
  • Using space instead of '=' after -replace
  • Adding extra flags like --replace
  • Appending .id unnecessarily
3. Given this Terraform command:
terraform apply -replace=aws_s3_bucket.mybucket
What will happen to the resource aws_s3_bucket.mybucket during apply?
medium
A. It will be updated in place without destruction
B. It will be ignored and left unchanged
C. Terraform will only plan changes but not apply
D. It will be destroyed and recreated

Solution

  1. Step 1: Understand the effect of -replace on a resource

    The -replace flag forces Terraform to destroy and recreate the specified resource during apply.
  2. Step 2: Apply this to aws_s3_bucket.mybucket

    Since the command targets aws_s3_bucket.mybucket, Terraform will destroy and then recreate this bucket.
  3. Final Answer:

    It will be destroyed and recreated -> Option D
  4. Quick Check:

    -replace causes destroy and recreate [OK]
Hint: Replace means destroy then create that resource [OK]
Common Mistakes:
  • Thinking it updates resource without destruction
  • Assuming it skips the resource
  • Confusing apply with plan
4. You run terraform apply -replace=aws_instance.web but get an error: Invalid resource address. What is the most likely cause?
medium
A. The resource name is misspelled or does not exist in the state
B. The -replace flag cannot be used with aws_instance resources
C. You forgot to run terraform init before apply
D. The command requires a space instead of '=' after -replace

Solution

  1. Step 1: Analyze the error message

    An 'Invalid resource address' error means Terraform cannot find the resource in the state or the address is wrong.
  2. Step 2: Check resource existence and spelling

    Most likely, the resource aws_instance.web is misspelled or not present in the current Terraform state.
  3. Final Answer:

    The resource name is misspelled or does not exist in the state -> Option A
  4. Quick Check:

    Invalid address = wrong or missing resource name [OK]
Hint: Check resource name spelling and state presence first [OK]
Common Mistakes:
  • Assuming -replace flag is invalid for resource types
  • Thinking terraform init fixes resource address errors
  • Using space instead of '=' causes different errors
5. You want to replace two resources, aws_instance.web and aws_security_group.sg, in a single apply command. Which is the correct way to do this?
hard
A. terraform apply -replace=aws_instance.web,aws_security_group.sg
B. terraform apply -replace=aws_instance.web -replace=aws_security_group.sg
C. terraform apply -replace=aws_instance.web aws_security_group.sg
D. terraform apply -replace aws_instance.web -replace aws_security_group.sg

Solution

  1. Step 1: Understand multiple -replace usage

    Terraform allows multiple -replace flags, each specifying one resource to replace.
  2. Step 2: Evaluate each option

    terraform apply -replace=aws_instance.web -replace=aws_security_group.sg uses two separate -replace flags correctly. terraform apply -replace=aws_instance.web,aws_security_group.sg uses a comma which is invalid. Options C and D use incorrect syntax without '=' or with spaces.
  3. Final Answer:

    terraform apply -replace=aws_instance.web -replace=aws_security_group.sg -> Option B
  4. Quick Check:

    Use multiple -replace flags for multiple resources [OK]
Hint: Use one -replace= per resource to replace multiple [OK]
Common Mistakes:
  • Trying to list multiple resources with commas
  • Using spaces instead of '=' after -replace
  • Combining resources in one -replace flag