首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地TFstate不会迁移到远程位置(Azure )

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

Stack Overflow用户
提问于 2021-12-20 16:17:19
回答 1查看 97关注 0票数 0

我用Azure Blob来存储我的状态。我遵循这些steps,唯一的区别是我使用的是AzurermBackend。问题是,当我执行terraform init时,它不会将现有状态迁移到blob,它只是创建一个没有资源的新状态,所以当我执行cdktf diff terraform时,它需要创建已经在本地状态中创建的每个资源。我检查了文件,文件是空的。我也尝试过不起作用的stack.addOveride。接下来,我执行TF_LOG=DEBUG terraform init并获得以下日志:

代码语言:javascript
复制
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并获得了以下日志:

代码语言:javascript
复制
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中时,唯一起作用的是,但我不喜欢这样做。

如果我想迁移之前存在的tfstate,我将如何获得地形来问我是否想迁移?

这是cdktf堆栈中的代码:

代码语言:javascript
复制
// new AzurermBackend(mystack,  {
//   storageAccountName: "cdkremotebackendtest",
//   containerName: "test1",

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

//   accessKey: "",


// });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 19:19:55

您还需要在主terraform配置下指定后端提供程序。如果您不指定它,它将假设是本地的,所以没有迁移。就像这样

代码语言:javascript
复制
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

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

https://stackoverflow.com/questions/70424811

复制
相关文章

相似问题

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