我们需要将提供商从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
文件中删除相关条目。