Taking a resource out of management used to mean state rm, which is a command run against state and invisible in review.
removed {
from = aws_s3_bucket.old_uploads
lifecycle {
destroy = false
}
}
# the plan says: 1 to forget. the bucket stays.
# without the lifecycle block the default is to DESTROY,
# which is the opposite of what the block is usually for.
The default being destroy is the trap, and it is the reverse of what most people mean by “removed” — the block covers both intentions and the safe one is the opt-in. Like import and moved, this is a declarative version of something that used to be a command, which means it appears in the pull request that causes it and applies identically on every machine.