本地 TFstate 不会迁移到远程位置 (Azure Blob)

Local TFstate does not migrate to remote location (Azure Blob)

我正在使用 Azure Blob 来存储我的状态。我遵循这些 [步骤] (https://github.com/hashicorp/terraform-cdk/blob/main/docs/working-with-cdk-for-terraform/remote-backend.md#migrating-local-state-storage-to-remote),唯一的区别是我使用的是 AzurermBackend。问题是当我执行 terraform init 它不会将现有状态迁移到 blob,它只是创建一个没有资源的新状态,所以当我执行 cdktf diff terraform 时说它需要创建已在本地状态中创建的每个资源。我检查了文件文件是空的。我也尝试过 thr stack.addOveride 也不起作用。接下来我做的是执行 TF_LOG=DEBUG terraform init 并获得以下日志:

2021-12-20T16:00:03.228+0100 [DEBUG] Adding temp file log sink: /tmp/terraform-log769761292
2021-12-20T16:00:03.228+0100 [INFO]  Terraform version: 1.0.9
2021-12-20T16:00:03.228+0100 [INFO]  Go runtime version: go1.16.4
2021-12-20T16:00:03.228+0100 [INFO]  CLI args: []string{"/usr/bin/terraform", "init"}
2021-12-20T16:00:03.228+0100 [DEBUG] Attempting to open CLI config file: /home/shurbeski/.terraformrc
2021-12-20T16:00:03.228+0100 [DEBUG] File doesn't exist, but doesn't need to. Ignoring.
2021-12-20T16:00:03.228+0100 [DEBUG] ignoring non-existing provider search directory terraform.d/plugins
2021-12-20T16:00:03.228+0100 [DEBUG] ignoring non-existing provider search directory /home/shurbeski/.terraform.d/plugins
2021-12-20T16:00:03.228+0100 [DEBUG] ignoring non-existing provider search directory /home/shurbeski/.local/share/terraform/plugins
2021-12-20T16:00:03.228+0100 [DEBUG] ignoring non-existing provider search directory /usr/share/ubuntu/terraform/plugins
2021-12-20T16:00:03.228+0100 [DEBUG] ignoring non-existing provider search directory /usr/local/share/terraform/plugins
2021-12-20T16:00:03.228+0100 [DEBUG] ignoring non-existing provider search directory /usr/share/terraform/plugins
2021-12-20T16:00:03.228+0100 [DEBUG] ignoring non-existing provider search directory /var/lib/snapd/desktop/terraform/plugins
2021-12-20T16:00:03.228+0100 [INFO]  CLI command args: []string{"init"}

Initializing the backend...
2021-12-20T16:00:03.229+0100 [DEBUG] New state was assigned lineage "2abdb28d-45b7-02a5-d5b1-851b3c446ef3"
2021-12-20T16:00:03.229+0100 [DEBUG] checking for provisioner in "."
2021-12-20T16:00:03.233+0100 [DEBUG] checking for provisioner in "/usr/bin"
2021-12-20T16:00:03.233+0100 [INFO]  Failed to read plugin lock file .terraform/plugins/linux_amd64/lock.json: open .terraform/plugins/linux_amd64/lock.json: no such file or directory
2021-12-20T16:00:03.233+0100 [DEBUG] New state was assigned lineage "ea01857e-a1b7-080a-dda5-a5081c10f48b"

实际上它只是创建了一个新状态,所以我尝试了 TF_LOG=DEBUG terraform init -migrate-state 并得到了以下日志:

2021-12-20T16:08:07.541+0100 [DEBUG] Adding temp file log sink: /tmp/terraform-log411077971
2021-12-20T16:08:07.541+0100 [INFO]  Terraform version: 1.0.9
2021-12-20T16:08:07.541+0100 [INFO]  Go runtime version: go1.16.4
2021-12-20T16:08:07.541+0100 [INFO]  CLI args: []string{"/usr/bin/terraform", "init", "-migrate-state"}
2021-12-20T16:08:07.541+0100 [DEBUG] Attempting to open CLI config file: /home/shurbeski/.terraformrc
2021-12-20T16:08:07.541+0100 [DEBUG] File doesn't exist, but doesn't need to. Ignoring.
2021-12-20T16:08:07.541+0100 [DEBUG] ignoring non-existing provider search directory terraform.d/plugins
2021-12-20T16:08:07.541+0100 [DEBUG] ignoring non-existing provider search directory /home/shurbeski/.terraform.d/plugins
2021-12-20T16:08:07.541+0100 [DEBUG] ignoring non-existing provider search directory /home/shurbeski/.local/share/terraform/plugins
2021-12-20T16:08:07.541+0100 [DEBUG] ignoring non-existing provider search directory /usr/share/ubuntu/terraform/plugins
2021-12-20T16:08:07.541+0100 [DEBUG] ignoring non-existing provider search directory /usr/local/share/terraform/plugins
2021-12-20T16:08:07.542+0100 [DEBUG] ignoring non-existing provider search directory /usr/share/terraform/plugins
2021-12-20T16:08:07.542+0100 [DEBUG] ignoring non-existing provider search directory /var/lib/snapd/desktop/terraform/plugins
2021-12-20T16:08:07.542+0100 [INFO]  CLI command args: []string{"init", "-migrate-state"}

Initializing the backend...
2021-12-20T16:08:07.543+0100 [DEBUG] New state was assigned lineage "4af0afde-830e-1836-4bb8-4013609be0ad"
2021-12-20T16:08:07.970+0100 [DEBUG] checking for provisioner in "."
2021-12-20T16:08:07.974+0100 [DEBUG] checking for provisioner in "/usr/bin"
2021-12-20T16:08:07.974+0100 [INFO]  Failed to read plugin lock file .terraform/plugins/linux_amd64/lock.json: open .terraform/plugins/linux_amd64/lock.json: no such file or directory
2021-12-20T16:08:07.975+0100 [DEBUG] New state was assigned lineage "472594f8-73dc-abe6-3691-5c7bddfb715e"

连这个都没用。

唯一可行的方法是当我手动复制 tf 状态文件并将其放入状态的 blob 中时,但我不喜欢那样。

任何想法如何让 terraform 询问我是否要迁移我预先存在的 tfstate?

这是我在 cdktf 堆栈中的代码:

// new AzurermBackend(mystack,  {
//   storageAccountName: "cdkremotebackendtest",
//   containerName: "test1",

//   subscriptionId: "",
//   key: "terraform.tfcdk-demo.tfstate",

//   accessKey: "",


// });

您还需要在主要 terraform 配置下指定后端提供程序。如果您不指定它,它将假定为本地,因此不会迁移。像这样

terraform {
  required_providers {
--------------------
  }
  backend "azurerm" {
    resource_group_name = "cloud"
    storage_account_name = "cdkremotebackendtest"
    container_name = "test1"
    key = "terraform.tfcdk-demo.tfstate"
  }
}

有关后端的更多信息:https://www.terraform.io/language/settings/backends/configuration