有没有办法追踪我的状态文件 placed/referenced?

Is there a way to trace where my state file is being placed/referenced?

我在 GCP 上使用 TF 0.11.11。我将 backend.tfvars 文件设置为按状态文件存储在 GCP 存储桶中:

# bucket where terraform state file will be kept
bucket = "this-is-my-tf-bucket"

# folder in the bucket where the terraform state file will be kept
prefix = "bucket.folder.sbx"

credentials = "greg-cred.json"

但是,在我 运行 我的初始化和应用之后,我注意到我的存储桶中不存在该文件夹 (bucket.folder.sbx)。 init 和 apply 运行 很好,没有错误。所以我想知道...我的状态文件去哪里了?

有办法追踪吗?

作为次要问题,我的本地 "terraform.tfstate" 文件似乎没有放在我的 .terraform 目录中,而是放在根目录中。我想知道这是为什么?如何控制本地 terraform.tfstate 文件的放置位置?

预计在项目的根目录中有terraform.tfstate。 根据 Terrafor 体系结构,.terraform 文件夹中应安装模块和提供程序,而不是状态文件。

如果您想在 GCP 存储桶中存储状态文件 - 您需要声明一个 "terraform" 块,请参阅 documentation:

terraform {
  backend "gcs" {
    bucket  = "tf-state-prod"
    prefix  = "terraform/state"
  }
}

因此,如果您在本地看到 terraform.tfstate - 它肯定不在云中。 Terraform 仅在本地或远程存储桶(使用上述配置)中创建一个状态文件。

创建 backend.tfvars 不会创建后端配置。更重要的是,它甚至不会自动加载。稍后会详细介绍。

要创建 GCS 远程后端配置,您应该遵循 Terraform GCS backend documentation:

terraform {
  backend "gcs" {
    # bucket where terraform state file will be kept
    bucket = "this-is-my-tf-bucket"
    # folder in the bucket where the terraform state file will be kept
    prefix = "bucket.folder.sbx"
    credentials = "greg-cred.json"
  }
}

如果不提供后端配置,则获取默认本地后端并根据default backend documentation状态文件路径:

defaults to "terraform.tfstate" relative to the root module by default.

至于backend.tfvars*.tfvars不会自动加载(terraform.tfvars*.auto.tfvars除外)。参见 input variables documentation. If you want to load the the backend.tfvars file you should use -var-file=backend.tfvars. You must also reference these variables from your backend configuration. See this example.