3

我正在尝试将项目的 CLI 工作区迁移到 Terraform Cloud。我正在使用 Terraform 版本 0.14.8 并遵循此处的官方指南。

$ terraform0.14.8 workspace list                 
  default
* development
  production
  staging

目前项目使用S3远程状态后端配置

terraform {
  backend "s3" {
    profile              = "..."
    key                  = "..."
    workspace_key_prefix = "environments"
    region               = "us-east-1"
    bucket               = "terraform-state-bucketA"
    dynamodb_table       = "terraform-state-bucketA"
    encrypt              = true
  }

我将后端配置更改为:

  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "orgA"

    workspaces {
      prefix = "happyproject-"
    }
  }

并执行terraform0.14.8 init以开始状态迁移过程。预期行为是在 Terraform Cloud 中创建 3 个工作区:

  1. 快乐项目开发
  2. 快乐的项目分期
  3. 快乐项目制作

但是,我收到以下错误:

$ terraform0.14.8 init                           
Initializing modules...

Initializing the backend...
Backend configuration changed!

Terraform has detected that the configuration specified for the backend
has changed. Terraform will now check for existing state in the backends.

Terraform detected that the backend type changed from "s3" to "remote".

Error: Error looking up workspace

Workspace read failed: invalid value for workspace

我还启用了 TRACE 级别日志,就在它引发错误之前,我可以看到:2021/03/23 10:08:03 [TRACE] backend/remote: looking up workspace for orgA/.

注意后面的空字符串orgA/和前缀的省略!我猜 TF 会尝试向 Terraform Cloud 查询默认工作区,这是一个空字符串,但它没有这样做。我根本没有使用default工作区,它只是在我执行时出现terraform0.14.8 init。该指南提到:

Some backends, including the default local backend, allow a special default workspace that doesn't have a specific name. If you previously used a combination of named workspaces and the special default workspace, the prompt will next ask you to choose a new name for the default workspace, since Terraform Cloud doesn't support unnamed workspaces:

但是,它从不提示我为默认工作区选择名称。任何帮助将非常感激!

4

2 回答 2

1

我有类似的问题,帮助我的是提前创建具有预期名称的空工作区,然后运行terraform init​​. 在进行初始化之前,我还将 .tfstate 文件从远程位置复制到项目的根目录。希望这对您也有帮助。

于 2021-04-02T10:17:27.647 回答
0

我最终做的是

  1. 在 Terraform Cloud 中创建了空工作区
  2. 对于每个 CLI 工作区,我将后端指向相应的 TFC 工作区并执行 terraform init。这样,Terraform 状态自动从 S3 后端迁移到 TFC
  3. 最后,在迁移了所有 CLI 工作空间之后,我使用了工作空间块的前缀参数而不是名称参数来管理不同的 TFC 工作空间
于 2021-04-10T09:46:56.270 回答