google-cloud-platform - 使用Terraform,如何在不破坏实例的情况下增加GCP实例的根磁盘

标签 google-cloud-platform terraform-provider-gcp

我有一个使用 Terraform 创建的 GCP 实例。当我增加根磁盘的大小时,Terraform 尝试销毁并重新创建一个新实例,这是 Not Acceptable 。这是我的地形代码:

resource "google_compute_instance" "test" {
  ...
  boot_disk {
  auto_delete = true
    initialize_params {
      image = var.image
      size  = 10 # I want to change it to 20
      type  = "pd-standard"
    }
  }
  ...
}

var.image 是:https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20201028

如何调整 gcp 实例的根磁盘大小而不重新创建它? (我想我可以通过手动调整大小来避免重新创建实例?请参阅 How can size of the root disk in Google Compute Engine be increased? 。但我不想手动调整大小,因为有很多实例需要调整大小。此外,如果我手动更改大小,terraform将显示漂移)。

对于 AWS EC2,请注意,当我们更改大小时,terraform 不会重新创建新的 EC2。

最佳答案

来自https://github.com/hashicorp/terraform-provider-google/issues/12124

我理解“initialize_params 表示“我希望使用这些属性创建实例”,这意味着在更改时重新创建它是提供程序的预期行为”

来自https://github.com/hashicorp/terraform-provider-google/issues/6087#issuecomment-619270971

我理解“您可以在 Terraform 中创建一个可以随时更新的磁盘,并且我们可以让initialize_params真正实现其含义:在初始化磁盘时设置的参数”

以下是如何制作可以在 terraform 中调整大小的磁盘:

data "google_compute_image" "my_image" {
  family  = "debian-9"
  project = "debian-cloud"
}

resource "google_compute_disk" "foobar" {
  name  = "my-disk"
  zone  = "us-central1-a"
  // only use an image data source if you're ok with the disk recreating itself with a new image periodically
  image = data.google_compute_image.my_image.self_link
}

resource "google_compute_instance" "foobar" {
  name         = "my-instance"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    source = google_compute_disk.foobar.name
  }

  network_interface {
    network = "default"
  }
}

这样,您将能够使用 terraform 动态更改磁盘规范,而无需使用initialize_params,它用于重新创建而不是修改。

来自https://github.com/hashicorp/terraform-provider-google/issues/12655以及此答案中的先前链接,看起来 terraform 不允许您更改initialize_params 的工作方式:这些是告诉您想要创建实例,而不是修改实例。

“initialize_params 是一个仅创建字段。更新此字段中的任何内容都被定义为重新创建/销毁行为。如果您想进行就地更新,我相信上面评论中指出的源字段,将是您所需要的。”

如果您可以在不使用 Terraform 的情况下更新磁盘大小,则可以 this way .

如果您已经使用initialize_params创建了一个大小错误的实例,并且想要修改磁盘大小而不在 Terraform 中产生偏差,那么从 2/2023 开始,您可以:

  1. 按照之前的链接,将磁盘更改为新大小 X,无需使用 Terraform。
  2. 使用新尺寸而不是旧尺寸更改 Terraform 配置

万岁!

关于google-cloud-platform - 使用Terraform,如何在不破坏实例的情况下增加GCP实例的根磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75248046/

相关文章:

google-cloud-platform - 如何在 gcp 中重命名子网?

ssl - 使用 Google Cloud Container 实现 HTTPS 的步骤是什么?

google-cloud-platform - gcloud auth应用程序默认打印访问 token 错误: "invalid_grant: Bad Request"

jenkins - 我在 CentOS7 上的 Jenkins 无法访问...为什么?

javascript - 谷歌云抛出错误 : Could not load the default credentials in Nodejs

google-cloud-platform - 更改 Cloud Composer 的 DAG 的默认 GCS 位置

terraform - 如果未提供其值,则有条件地忽略 Terraform 中的参数?