Bird
Raised Fist0
Terraformcloud~10 mins

Prevent_destroy lifecycle rule in Terraform - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to add a lifecycle block that prevents resource destruction.

Terraform
resource "aws_s3_bucket" "example" {
  bucket = "my-example-bucket"

  lifecycle {
    [1] = true
  }
}
Drag options to blanks, or click blank then click option'
Acreate_before_destroy
Bprevent_destroy
Cignore_changes
Dreplace_triggered_by
Attempts:
3 left
💡 Hint
Common Mistakes
Using ignore_changes instead of prevent_destroy
Forgetting to set the value to true
Using create_before_destroy which controls replacement order
2fill in blank
medium

Complete the lifecycle block to prevent destroying the resource.

Terraform
lifecycle {
  [1] = true
}
Drag options to blanks, or click blank then click option'
Areplace_triggered_by
Bcreate_before_destroy
Cignore_changes
Dprevent_destroy
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing with ignore_changes which ignores attribute changes
Using create_before_destroy which affects replacement order
3fill in blank
hard

Fix the error in the lifecycle block to correctly prevent resource destruction.

Terraform
lifecycle {
  prevent_destroy = [1]
}
Drag options to blanks, or click blank then click option'
A"false"
Bfalse
Ctrue
D"true"
Attempts:
3 left
💡 Hint
Common Mistakes
Using quotes around true or false which makes it a string
Setting prevent_destroy to false which disables protection
4fill in blank
hard

Fill both blanks to add a lifecycle block that prevents destroying and ignores changes to tags.

Terraform
lifecycle {
  [1] = true
  [2] = ["tags"]
}
Drag options to blanks, or click blank then click option'
Aprevent_destroy
Bignore_changes
Ccreate_before_destroy
Dreplace_triggered_by
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up ignore_changes and create_before_destroy
Not using a list for ignore_changes value
5fill in blank
hard

Fill all three blanks to add a lifecycle block that prevents destroying, creates before destroy, and ignores changes to tags.

Terraform
lifecycle {
  [1] = true
  [2] = true
  [3] = ["tags"]
}
Drag options to blanks, or click blank then click option'
Aprevent_destroy
Bcreate_before_destroy
Cignore_changes
Dreplace_triggered_by
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing create_before_destroy with prevent_destroy
Not using a list for ignore_changes
Setting boolean values as strings

Practice

(1/5)
1. What does the prevent_destroy lifecycle rule do in Terraform?
easy
A. Stops accidental deletion of a resource
B. Automatically recreates a resource if deleted
C. Prevents updates to a resource
D. Locks the resource to prevent any changes

Solution

  1. Step 1: Understand the purpose of prevent_destroy

    The prevent_destroy rule is designed to stop Terraform from deleting a resource accidentally.
  2. Step 2: Compare with other lifecycle rules

    Unlike update prevention or locking, it specifically blocks deletion unless the rule is removed.
  3. Final Answer:

    Stops accidental deletion of a resource -> Option A
  4. Quick Check:

    prevent_destroy stops deletion = A [OK]
Hint: Remember: prevent_destroy means no accidental deletes [OK]
Common Mistakes:
  • Thinking it prevents updates instead of deletion
  • Confusing it with resource locking
  • Assuming it recreates deleted resources automatically
2. Which is the correct way to set the prevent_destroy rule in a Terraform resource?
easy
A. resource { prevent_destroy = true }
B. prevent_destroy = true
C. lifecycle { prevent_destroy = true }
D. lifecycle { prevent_delete = true }

Solution

  1. Step 1: Identify correct syntax for lifecycle block

    The prevent_destroy must be inside a lifecycle block within the resource.
  2. Step 2: Check option correctness

    lifecycle { prevent_destroy = true } correctly places prevent_destroy = true inside lifecycle { }. Others are either missing the block or have wrong keywords.
  3. Final Answer:

    lifecycle { prevent_destroy = true } -> Option C
  4. Quick Check:

    Correct lifecycle syntax = C [OK]
Hint: Always put prevent_destroy inside lifecycle block [OK]
Common Mistakes:
  • Placing prevent_destroy outside lifecycle block
  • Using wrong keyword like prevent_delete
  • Adding prevent_destroy directly under resource
3. Given this Terraform resource snippet, what happens if you run terraform destroy?
resource "aws_s3_bucket" "example" {
  bucket = "my-bucket"
  lifecycle {
    prevent_destroy = true
  }
}
medium
A. Terraform will show an error and stop the destroy
B. Terraform will delete the S3 bucket without error
C. Terraform will ignore prevent_destroy and delete anyway
D. Terraform will update the bucket instead of deleting

Solution

  1. Step 1: Understand prevent_destroy effect on destroy

    The prevent_destroy = true stops Terraform from deleting the resource during destroy.
  2. Step 2: Predict Terraform behavior on destroy

    Terraform will detect the rule and raise an error, preventing the deletion.
  3. Final Answer:

    Terraform will show an error and stop the destroy -> Option A
  4. Quick Check:

    prevent_destroy blocks destroy = A [OK]
Hint: prevent_destroy causes destroy to error, not delete [OK]
Common Mistakes:
  • Assuming resource deletes anyway
  • Thinking it updates instead of blocking destroy
  • Believing Terraform silently ignores the rule
4. You added prevent_destroy = true to a resource but now need to delete it. What is the correct way to fix the error during terraform destroy?
medium
A. Run terraform destroy with --force flag
B. Remove or comment out the prevent_destroy line and apply again
C. prevent_destroy = false
D. Delete the resource manually from the cloud console

Solution

  1. Step 1: Understand how prevent_destroy blocks deletion

    The rule must be removed or disabled in Terraform code before deletion can proceed.
  2. Step 2: Identify correct fix

    Removing or commenting out the line and applying changes allows Terraform to delete the resource safely.
  3. Final Answer:

    Remove or comment out the prevent_destroy line and apply again -> Option B
  4. Quick Check:

    Disable prevent_destroy before destroy = B [OK]
Hint: Disable prevent_destroy in code before deleting resource [OK]
Common Mistakes:
  • Using unsupported --force flag
  • Setting prevent_destroy directly under resource
  • Deleting resource manually without Terraform sync
5. You have a Terraform resource with prevent_destroy = true. You want to replace this resource safely without downtime. Which approach is best?
hard
A. Temporarily remove prevent_destroy, apply destroy, then recreate resource
B. Manually delete resource in cloud console, then run terraform apply
C. Use terraform taint to mark resource for replacement without removing prevent_destroy
D. Set prevent_destroy to false and run terraform apply to replace resource

Solution

  1. Step 1: Understand prevent_destroy blocks deletion

    Removing prevent_destroy allows deletion but risks downtime; manual deletion is unsafe.
  2. Step 2: Disable prevent_destroy for safe replacement

    Setting prevent_destroy = false inside the lifecycle block disables the deletion block. Then terraform apply can replace the resource if config changes require recreation.
  3. Step 3: Apply changes safely

    This triggers replacement using Terraform's logic (e.g., with create_before_destroy if set), avoiding manual steps.
  4. Final Answer:

    Set prevent_destroy to false and run terraform apply to replace resource -> Option D
  5. Quick Check:

    Set prevent_destroy = false allows replacement = C [OK]
Hint: Set prevent_destroy = false before terraform apply to replace [OK]
Common Mistakes:
  • Using `terraform taint` without disabling prevent_destroy
  • Manually deleting resource causing drift
  • Running destroy separately, risking downtime
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard