Terraform Snowflake提供程序更改错误:提供程序版本不兼容



我们需要将提供商从changzuckerberg/snowflake更改为snowflake - labs/snowflake。

修改

terraform {
required_providers {
snowflake = {
source = "chanzuckerberg/snowflake"
version = "0.25.36"
}
}
backend "s3" {
}
}
provider snowflake {
}

terraform {
required_providers {
snowflake = {
source = "Snowflake-Labs/snowflake"
version = "0.61.0"
}
}
backend "s3" {
}
}
provider snowflake {
}

得到如下错误:

│ Warning: Additional provider information from registry
│ 
│ The remote registry returned warnings for
│ registry.terraform.io/chanzuckerberg/snowflake:
│ - For users on Terraform 0.13 or greater, this provider has moved to
│ Snowflake-Labs/snowflake. Please update your source in required_providers.
╵
╷
│ Error: Incompatible provider version
│ 
│ Provider registry.terraform.io/chanzuckerberg/snowflake v0.47.0 does not
│ have a package available for your current platform, linux_amd64.
│ 
│ Provider releases are separate from Terraform CLI releases, so not all
│ providers are available for all platforms. Other versions of this provider
│ may have different platforms supported.
╵

这听起来像以前的提供者chanzuckerberg某处存在,从而导致问题?

感谢您的帮助

terraform init和terraform plan在本地运行良好。

terraform providers提供(本地运行)以下内容

-- provider[registry.terraform.io/snowflake-labs/snowflake] 0.61.0

错误发生在代码构建时,而我们的环境是现有的。

如果此配置已用于使用chanzuckerberg/snowflake提供程序创建一些远程对象,那么Terraform将在这些现有对象属于该提供程序的状态下进行跟踪。

通常情况下,这里的过程是在安装了两个提供程序的工作目录中运行terraform apply,然后Terraform会注意到配置已更改为使用Snowflake-Labs/snowflake,因此它将更新状态以匹配。

但是,由于提供程序chanzuckerberg/snowflake似乎没有可用于当前体系结构的包,因此在这种情况下,Terraform不能自动执行转换。

你可以通过显式地告诉Terraform重写状态来引用新的提供者来解决这个问题:

terraform state replace-provider 'chanzuckerberg/snowflake' 'snowflake-labs/snowflake'

通常,当Terraform在terraform apply期间自动执行这些更改时,它会首先检查现有存储的数据对新的提供程序是否有意义,但是这个命令绕过了所有这些检查,因此它应该避免安装旧的提供程序。只有当新的提供程序具有一组兼容的资源类型时,这才是安全的。

一旦配置和状态都没有引用chanzuckerberg/snowflake,下一次运行terraform init时,它应该不再尝试安装此提供程序,它还将从.terraform.lock.hcl文件中删除相关条目。

相关内容

  • 没有找到相关文章

最新更新