我有一个使用 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 开始,您可以:
- 按照之前的链接,将磁盘更改为新大小 X,无需使用 Terraform。
- 使用新尺寸而不是旧尺寸更改 Terraform 配置
万岁!
关于google-cloud-platform - 使用Terraform,如何在不破坏实例的情况下增加GCP实例的根磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75248046/