gpt4 book ai didi

Terraform - 重构模块 : Error: Provider configuration not present

转载 作者:行者123 更新时间:2023-12-02 23:04:16 30 4
gpt4 key购买 nike

我正在重构一些 Terraform 模块并得到:

Error: Provider configuration not present

To work with
module.my_module.some_resource.resource_name its
original provider configuration at
module.my_module.provider.some_provider.provider_name is required, but it
has been removed. This occurs when a provider configuration is removed while
objects created by that provider still exist in the state. Re-add the provider
configuration to destroy
module.my_module.some_resource.resource_name, after
which you can remove the provider configuration again.

看来我需要从 tfstate 文件中删除该资源,然后使用新的 tf 配置重新添加它。

当我重构一些整体代码时,有数百条这样的错误:提供程序配置不存在消息。

有删除和重新添加的快捷方式吗?

最佳答案

正如错误消息所解释的那样,Terraform 检测到仍有资源对象处于其提供程序配置不可用的状态,因此它没有足够的信息来销毁这些资源。

在这种特殊情况下,发生这种情况似乎是因为您的子模块之一中有一个 provider 配置 block 。虽然这是为了与旧版本的 Terraform 兼容而允许的,it's recommended to only have provider blocks in your root module以便它们始终比提供者管理的任何资源实例的生命周期更长。

如果您的目的是销毁module.my_module中的资源实例,那么您必须在删除module“my_module” block 之前执行此操作从根模块。这是一种不寻常的情况,我们可以使用 -target 来帮助 Terraform 理解我们希望它做什么:

terraform destroy -target=module.my_module

一旦所有这些对象都被销毁,您应该能够删除模块“my_module” block ,而不会看到“提供程序配置不存在”错误,因为在依赖于该提供者配置的状态。

如果您的目标是将资源 block 移动到另一个模块中,则另一个可能的解决方案是使用 terraform state mv 指示 Terraform 跟踪新地址下的现有对象:

terraform state mv 'module.my_module.some_resource.resource_name' 'module.other_module.some_resource.resource_name'

同样,最好在删除旧模块之前执行此操作,以便旧的提供程序配置仍然存在,直到没有任何内容可供管理。将现有对象移动到状态中的新模块并在配置中为其放置一个 resource block 后,Terraform 应该了解您使用不同的提供程序配置来管理此资源的意图现在,您可以安全地删除旧的 module block ,以及其中的 provider block 。

关于Terraform - 重构模块 : Error: Provider configuration not present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58393294/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com