关于亚马逊网络服务:通过AWS控制台删除资源后如何应用或销毁?

How can I apply or destroy after removing resources via AWS Console?

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

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

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

收到这样的消息

1
2
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控制台删除资源后如何应用或销毁?


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

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

1
terraform state rm aws_batch_job_queue.example

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