Sno*_*ash 39 terraform terraform-modules
我正在重构一些 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.
Run Code Online (Sandbox Code Playgroud)
似乎我需要从 tfstate 文件中删除该资源,然后使用新的 tf 配置重新添加它。
当我重构一些整体代码时,有数百条这样的Error: Provider configuration not present消息。
删除和重新添加的任何快捷方式?
Mar*_*ins 35
正如错误消息所解释的那样,Terraform 检测到在提供程序配置不可用的状态下仍然存在资源对象,因此它没有足够的信息来销毁这些资源。
在这种特殊情况下,这似乎是因为provider您的一个子模块中有一个配置块。虽然为了与旧版本的 Terraform 兼容而允许这样做,但建议provider您的根模块中只包含块,以便它们始终比提供程序管理的任何资源实例存活时间更长。
如果您的意图是销毁资源实例,module.my_module那么您必须在module "my_module"从根模块中删除块之前执行此操作。这是一种不寻常的情况,我们可以用它-target来帮助 Terraform 了解我们想要它做什么:
terraform destroy -target=module.my_module
Run Code Online (Sandbox Code Playgroud)
一旦所有这些对象都被销毁,您应该能够删除module "my_module"块而不会看到“提供程序配置不存在”错误,因为在依赖于该提供程序配置的状态中将没有资源实例。
如果您的目标是将资源块移动到另一个模块中,那么这里的另一个可能的解决方法是terraform state mv用于指示 Terraform 跟踪新地址下的现有对象:
terraform state mv 'module.my_module.some_resource.resource_name' 'module.other_module.some_resource.resource_name'
Run Code Online (Sandbox Code Playgroud)
同样,最好在删除旧模块之前执行此操作,以便旧提供程序配置保持存在,直到没有任何东西可供管理为止。在您将现有对象移动到状态中的新模块并resource在配置中为其放置一个块后,Terraform 应该理解您从现在开始使用不同的提供程序配置管理此资源的意图,并且您可以安全地删除旧module块,因此provider它里面的块。
您可以注释掉要销毁的模块中的临时资源,取消注释重新创建的资源,然后可以按照以下步骤来避免错误。
从模块中删除提供程序并显式传递模块中的提供程序,
module "pass_provider" {
source = "../module"
providers = {
aws = aws
}
}
Run Code Online (Sandbox Code Playgroud)
通过别名传递提供商,
module "pass_provider_alias" {
source = "../module"
providers = {
aws = "aws.alias_name"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31936 次 |
| 最近记录: |