如何协调 Terraform 状态与现有存储桶?
How to reconcile the Terraform State with an existing bucket?
使用 Terraform 11.14
我的地形文件包含以下资源:
resource "google_storage_bucket" "assets-bucket" {
name = "${local.assets_bucket_name}"
storage_class = "MULTI_REGIONAL"
force_destroy = true
}
并且这个桶已经被创建(它存在于基于之前apply
的基础设施上)
但是,状态(gcs
上的远程状态)不一致,似乎不包括此存储桶。
结果,terraform apply
失败并出现以下错误:
google_storage_bucket.assets-bucket: googleapi: Error 409: You already own this bucket. Please select another name., conflict
如何调和状态? (terraform refresh
没有帮助)
编辑
根据@ydaetskcoR 的回复,我做了:
terraform import module.bf-nathan.google_storage_bucket.assets-bucket my-bucket
输出:
module.bf-nathan.google_storage_bucket.assets-bucket: Importing from ID "my-bucket"...
module.bf-nathan.google_storage_bucket.assets-bucket: Import complete! Imported google_storage_bucket (ID: next-assets-bf-nathan-botfront-cloud)
module.bf-nathan.google_storage_bucket.assets-bucket: Refreshing state... (ID: next-assets-bf-nathan-botfront-cloud)
Error: module.bf-nathan.provider.kubernetes: 1:11: unknown variable accessed: var.cluster_ip in:
https://${var.cluster_ip}
刷新步骤无效。我 运行 来自项目根目录的命令,其中存在 terraform.tfvars
文件。
我尝试添加 -var-file=terraform.tfvars
但没有成功。有什么想法吗?
您需要将其导入到现有的状态文件中。对于支持它的任何资源,您可以使用 terraform import
command 执行此操作。
谢天谢地 google_storage_bucket
resource does support it:
Storage buckets can be imported using the name or project/name. If the project is not passed to the import command it will be inferred from the provider block or environment variables. If it cannot be inferred it will be queried from the Compute API (this will fail if the API is not enabled).
e.g.
$ terraform import google_storage_bucket.image-store image-store-bucket
$ terraform import google_storage_bucket.image-store tf-test-project/image-store-bucket
使用 Terraform 11.14 我的地形文件包含以下资源:
resource "google_storage_bucket" "assets-bucket" {
name = "${local.assets_bucket_name}"
storage_class = "MULTI_REGIONAL"
force_destroy = true
}
并且这个桶已经被创建(它存在于基于之前apply
的基础设施上)
但是,状态(gcs
上的远程状态)不一致,似乎不包括此存储桶。
结果,terraform apply
失败并出现以下错误:
google_storage_bucket.assets-bucket: googleapi: Error 409: You already own this bucket. Please select another name., conflict
如何调和状态? (terraform refresh
没有帮助)
编辑
根据@ydaetskcoR 的回复,我做了:
terraform import module.bf-nathan.google_storage_bucket.assets-bucket my-bucket
输出:
module.bf-nathan.google_storage_bucket.assets-bucket: Importing from ID "my-bucket"...
module.bf-nathan.google_storage_bucket.assets-bucket: Import complete! Imported google_storage_bucket (ID: next-assets-bf-nathan-botfront-cloud)
module.bf-nathan.google_storage_bucket.assets-bucket: Refreshing state... (ID: next-assets-bf-nathan-botfront-cloud)
Error: module.bf-nathan.provider.kubernetes: 1:11: unknown variable accessed: var.cluster_ip in:
https://${var.cluster_ip}
刷新步骤无效。我 运行 来自项目根目录的命令,其中存在 terraform.tfvars
文件。
我尝试添加 -var-file=terraform.tfvars
但没有成功。有什么想法吗?
您需要将其导入到现有的状态文件中。对于支持它的任何资源,您可以使用 terraform import
command 执行此操作。
谢天谢地 google_storage_bucket
resource does support it:
Storage buckets can be imported using the name or project/name. If the project is not passed to the import command it will be inferred from the provider block or environment variables. If it cannot be inferred it will be queried from the Compute API (this will fail if the API is not enabled).
e.g.
$ terraform import google_storage_bucket.image-store image-store-bucket $ terraform import google_storage_bucket.image-store tf-test-project/image-store-bucket