我已经应用了一个 terraform 来创建一个 redis 集群。
进行到一半时,应用程序进程失败并显示以下错误消息:
Error: Error waiting for elasticache replication group (my-project) to be created: SerializationError: failed decoding Query response
status code: 200, request id: 3d5a5394-20f0-4834-9e2a-9aff20cceecf
caused by: read tcp 192.168.86.116:53912->54.222.5.156:443: read: connection reset by peer
我知道我已经成功创建了集群,因为我可以使用redis-cli
.
但是,如果我再做terraform apply
一次,terraform 会说
module.my_project.aws_elasticache_replication_group.main[0] is tainted, so must be replaced
它试图破坏和重新创建资源,而不是no action
像我预期的那样。
我已尝试将资源导入状态文件以纠正问题。但是 terraform 会引发错误:
错误:资源已由 Terraform 管理
如果操作一开始就成功,我将看不到tainted
错误消息。
有什么办法可以从这个问题中恢复过来?我想避免删除然后重新创建资源。
理想情况下,我希望我可以清除状态文件中的资源,这样 terraform 就不会尝试破坏新创建的集群。
Terraform 将对象标记为已污染,因为由于错误,无法确定该对象是否处于完全功能状态。
但是,如果您知道(通过带外检查)对象处于合适的状态,则可以使用以下
terraform untaint
命令覆盖 Terraform 的确定:在此之后,Terraform 将认为该对象处于适合进一步操作的状态。理想情况下,这将意味着后续程序
terraform plan
根本不会检测到该实例的任何更改。如果创建不完整但可以通过更新进行修复,则提供者可能会生成就地更新以匹配配置的计划。我可以先从状态文件中删除资源,然后再次导入。
1. 拆除
2. 进口