通过AWS Console删除资源后如何应用或销毁?

时间:2020-04-30 19:21:44

标签: amazon-web-services terraform

我有一个具有各种批处理服务资源的模块,例如作业定义,计算环境和作业队列。

今天,由于更新这些与批处理相关的资源之一时出错,我无法执行terraform apply(不幸的是,我丢失了这些初始错误消息)。

我以前遇到过类似情况,并通过手动禁用/删除作业队列来清除障碍。因此,我再次通过AWS控制台执行了此操作,然后运行terraform apply,但是这次计划/应用仍然无法正常工作,可能是因为队列中有一个处于可运行但未启动状态的未完成任务(我之前的时候作业队列为空)。因此,我对计算环境做了同样的事情(通过AWS控制台禁用/删除),现在我收到terraform plan这样的消息:

2020/04/30 15:15:43 [ERROR] module.batch_data_load: eval: *terraform.EvalRefresh, err: One compute environment is expected, but AWS return no compute environment
2020/04/30 15:15:43 [ERROR] module.batch_data_load: eval: *terraform.EvalSequence, err: One compute environment is expected, but AWS return no compute environment

因此,似乎我已经通过AWS控制台浏览Terraform托管资源,使状态文件变得杂乱无章。

通过AWS控制台删除资源后如何应用或销毁?

1 个答案:

答案 0 :(得分:1)

Terraform确实会在创建计划时尝试将其对状态的想法与远程对象重新同步,但这并不总是有效的,因为有时远程对象会以Terraform无法解释的方式进行交互,或其他原因Terraform没有足够的信息来完全重新同步。

如果您知道与配置中的特定资源实例相关联的远程对象已删除,则可以使用terraform state rm命令告诉Terraform“忘记”该对象并将其从状态中完全删除:< / p>

terraform state rm aws_batch_job_queue.example

仅当您确定该对象已不存在或打算使用其他系统继续管理现有对象时,才应执行此操作,因为一旦Terraform忘记了该对象,它将永远不会计划销毁该对象。因此该对象可以永远保持活动状态。