gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:24:36 25 4
gpt4 key购买 nike

我目前正在开发一个需要灵活数量的 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 = 5number_of_ips = 6 时,是重新创建 IP 地址 1 到 5,还是只是添加 IP 地址 #6作为增量更改?

最佳答案

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]
  • azurerm_public_ip.public-ip[4]
  • azurerm_public_ip.public-ip[5] ⬅️ 这是新的

因此,Terraform 会将索引 0 到 4 的所需状态与实际状态进行比较,并希望发现所需状态与那些现有对象相匹配,从而确定不需要更改任何内容。

Terraform 还会注意到 azurerm_public_ip.public-ip[5] 之前根本不存在,因此会要求 AzureRM 提供程序计划创建一个与该实例所需状态匹配的新对象.

因此,您所描述的情况下的典型行为是 Terraform 仅建议创建 azurerm_public_ip.public-ip[5],而不为其他实例提出任何建议。

关于azure - 当 'count' 参数更改时,Terraform 是否会重新创建资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75650206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com