首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Terraform上出现"Invalid legacy address“错误

Terraform上出现"Invalid legacy address“错误
EN

Stack Overflow用户
提问于 2020-12-22 00:53:36
回答 8查看 25.5K关注 0票数 41

我正在尝试使用terraform v0.14.3部署一个bitbucket管道,以便在google云中创建资源。运行terraform命令后,管道失败,并显示以下错误:

代码语言:javascript
运行
复制
Error: Invalid legacy provider address

This configuration or its associated state refers to the unqualified provider
"google".

You must complete the Terraform 0.13 upgrade process before upgrading to later
versions.

我们将terraform的本地版本更新为v.0.13.0,然后按照本指南中的引用运行:terraform 0.13upgradehttps://www.terraform.io/upgrade-guides/0-13.html。生成了一个需要terraform版本>=0.13的versions.tf文件,我们所需的提供程序块现在看起来如下所示:

代码语言:javascript
运行
复制
terraform {
  backend "gcs" {
    bucket      = "some-bucket"
    prefix      = "terraform/state"
    credentials = "key.json" #this is just a bitbucket pipeline variable
  }
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 2.20.0"
    }
  }
}
provider "google" {
  project     = var.project_ID
  credentials = "key.json"
  region      = var.project_region
}

当启动bitbucket管道时,我们仍然得到相同的错误。有没有人知道如何克服这个错误?提前谢谢。

EN

回答 8

Stack Overflow用户

发布于 2020-12-28 17:13:22

解决方案

如果您使用的是较新版本的Terraform,如v0.14.x,则应:

  1. 使用replace-provider子命令

terraform状态replace-provider \ -auto-approve \ " registry.terraform.io/-/google“\ "hashicorp/google”#=> Terraform将执行以下操作:~更新提供程序:-registry.terraform.io/-/google+ registry.terraform.io/hashicorp/google Changing x resources:。。。已成功替换%x资源的提供程序。

  1. 再次初始化Terraform:

terraform初始化#=>正在初始化后端...正在初始化提供程序插件...-重用依赖锁文件中的先前版本的hashicorp/google -使用先前安装的hashicorp/google vx.xx.x Terraform已成功初始化!你现在可以开始使用Terraform了。试试看。。。

这应负责安装提供程序。

解释

Terraform一次只支持从一个主要功能升级升级。您的旧状态文件很可能是使用早于v0.13.x的版本创建的。

如果在升级Terraform版本之前没有运行apply命令,则可能会出现以下错误:从v0.13.xv0.14.x的升级未完成。

你可以在here上找到更多信息。

票数 49
EN

Stack Overflow用户

发布于 2021-02-01 00:47:49

在我们的例子中,我们使用的是aws,并且有类似的错误

代码语言:javascript
运行
复制
...

Error: Invalid legacy provider address

This configuration or its associated state refers to the unqualified provider
"aws".

要解决的步骤是确保语法升级,方法是再次运行terraform init,检查警告,最后使用以下方法更新状态文件。

代码语言:javascript
运行
复制
# update provider in state file
terraform state replace-provider -- -/aws hashicorp/aws

# reinit
terraform init

操作问题的具体情况,如果问题仍然存在,请验证从本地和从管道对存储桶位置的访问。还要验证运行在管道中的terraform的版本。根据配置的不同,可能会更新/不能更新远程状态文件。

票数 19
EN

Stack Overflow用户

发布于 2021-03-26 03:41:10

我也有同样的问题。我跑了一下:

代码语言:javascript
运行
复制
terraform providers

这给了我:

代码语言:javascript
运行
复制
Providers required by configuration:
registry.terraform.io/hashicorp/google

Providers required by state:
registry.terraform.io/-/google

所以我跑了:

代码语言:javascript
运行
复制
terraform state replace-provider registry.terraform.io/-/google registry.terraform.io/hashicorp/google

这就起到了作用。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65396812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档