azure 当'count'参数改变时,Terraform是否重新创建资源?

qhhrdooz  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(100)

我目前正在工作的一个模块,需要有一个灵活的IP地址数量。
目前,我的资源计数是5。如果我将number_of_ips增加到6或更多会发生什么?Terraform会重新创建所有6个IP地址资源还是会递增地添加另一个资源?
示例:

locals {
  number_of_ips = 5
}

resource "azurerm_public_ip" "public-ip" {
  count               = local.number_of_ips
  name                = "${var.name}${count.index}"
  location            = var.location
  resource_group_name = var.resource_group_name
  allocation_method   = var.allocation_method
  sku                 = var.sku
}

在上面的示例中,从number_of_ips = 5转到number_of_ips = 6时,是重新创建IP地址1到5,还是仅添加IP地址#6作为增量更改?

wkyowqbh

wkyowqbh1#

Terraform是一个理想状态系统,这意味着它会评估你的配置,目标是从本质上理解“你希望世界看起来像什么”,然后将其与它对世界当前外观的记录进行比较,并提出一组动作来从当前状态达到理想状态。
在运行之间,Terraform会记住存在哪些资源示例,因此如果您最初运行count = 5,Terraform将在其状态下跟踪以下地址:

  • azurerm_public_ip.public-ip[0]
  • azurerm_public_ip.public-ip[1]
  • azurerm_public_ip.public-ip[2]
  • azurerm_public_ip.public-ip[3]
  • azurerm_public_ip.public-ip[4]

当您再次使用count = 6运行Terraform时,这意味着 * 所需状态 * 将包含一个额外的地址:

  • azurerm_public_ip.public-ip[0]
  • azurerm_public_ip.public-ip[1]
  • azurerm_public_ip.public-ip[2]
  • azurerm_public_ip.public-ip[3]
  • x1米11米1x
  • azurerm_public_ip.public-ip[5] 这是新的**

因此Terraform会将期望状态与索引0到4的实际状态进行比较,并希望发现期望状态与那些现有对象匹配,从而确定不需要更改任何内容。
Terraform还将注意到azurerm_public_ip.public-ip[5]之前根本不存在,因此将要求AzureRM提供程序计划创建一个与该示例所需状态匹配的新对象。
因此,在您描述的情况下,Terraform的典型行为是只建议创建azurerm_public_ip.public-ip[5],而不对其他示例提出任何建议。

相关问题