【问题标题】:Removing Backend pools and load balancer rules before creating another在创建另一个之前删除后端池和负载均衡器规则
【发布时间】:2020-09-26 15:02:49
【问题描述】:

我有 terraform 脚本,它在资源组的负载均衡器中创建后端地址池和负载均衡器规则。这些任务包含在 Azure 管道中。对于我第一次运行管道。它的创建正确。如果我第二次运行管道。它没有更新现有的。它保留了由先前版本创建的后端地址池和负载均衡器规则,并为此版本添加了额外的后端地址池和负载均衡器规则,这导致后端地址池和负载均衡器规则重复。请对此有任何建议

resource "azurerm_lb_backend_address_pool" "example" {
  resource_group_name = azurerm_resource_group.example.name
  loadbalancer_id     = azurerm_lb.example.id
  name                = "BackEndAddressPool"
}

resource "azurerm_lb_rule" "example" {
  resource_group_name            = azurerm_resource_group.example.name
  loadbalancer_id                = azurerm_lb.example.id
  name                           = "LBRule"
  protocol                       = "All"
  frontend_port                  = 0
  backend_port                   = 0
  frontend_ip_configuration_name = "PublicIPAddress"
  enable_floating_ip             = true
  backend_address_pool_id        = azurerm_lb_backend_address_pool.example
}

【问题讨论】:

  • 你可以在你的管道上添加一个terraform destroy --target=azurerm_lb_backend_address_pool.example,然后再执行terraform apply,这将保证在创建一个之前删除

标签: azure terraform terraform-provider-azure


【解决方案1】:

这很可能是因为 Terraform 状态文件在管道运行之间丢失。

默认情况下,Terraform 将状态存储在本地名为 terraform.tfstate 的文件中。在团队中使用 Terraform 时,使用本地文件会使 Terraform 的使用变得复杂,因为每个用户必须确保他们在运行 Terraform 之前始终拥有最新的状态数据,并确保没有其他人同时运行 Terraform。 使用远程状态,Terraform 将状态数据写入远程数据存储,然后可以在团队的所有成员之间共享。 Terraform 支持在 Terraform Cloud、HashiCorp Consul、Amazon S3、阿里云 OSS 等中存储状态。

远程状态是后端的一个特性。配置和使用远程后端很容易,您可以快速开始使用远程状态。如果您想迁移回使用本地状态,后端也可以轻松实现。

您需要配置Remote State storage 以保持状态。下面是一个使用 Azure Blob 存储的示例:

terraform {
  backend "azurerm" {
    resource_group_name  = "StorageAccount-ResourceGroup"
    storage_account_name = "abcd1234"
    container_name       = "tfstate"
    key                  = "prod.terraform.tfstate"
  }
}

在 Blob 存储帐户的 Blob 容器中将状态存储为具有给定键的 Blob。此后端还支持通过 Azure Blob 存储的本机功能进行状态锁定和一致性检查。

这在azurerm Terraform backend docs中有更完整的描述。

微软还提供了一个Tutorial: Store Terraform state in Azure Storage,一步一步完成设置。

【讨论】:

  • 我是否需要在创建 baackendpools 之前将其添加到我的 main.tf 中?
  • 它必须在你的根模块中,你运行 terraform 的那个。它不一定必须在 main.tf 中。它可以在同一目录中的任何 .tf 文件中,也可以由 Terragrunt 等工具生成。
  • 我已经尝试过了……下次它再次创建额外的后端池时,它是第一次工作。
  • 如果您在管道中运行本教程,您还将获得新的存储帐户和后端。您应该使用教程中的脚本创建一次后端,然后在管道中存储重复使用的 RESOURCE_GROUP_NAME、STORAGE_ACCOUNT_NAME、CONTAINER_NAME 和 ACCOUNT_KEY 的相同值。确保按照教程中的建议使用 Azure Key Vault 之类的东西来保护 ACCOUNT_KEY。
  • @ Alain O' Dea 我已经尝试过 tuturiol 。它在每个后端地址池下给了我额外的虚拟机。我在我的问题中附上了图片以显示我是如何得到的。请检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 2016-07-20
  • 2018-05-02
  • 2021-11-21
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多