Azure 在创建另一个池之前删除后端池和负载平衡器规则

Azure 在创建另一个池之前删除后端池和负载平衡器规则,azure,terraform,terraform-provider-azure,Azure,Terraform,Terraform Provider Azure,我有terraform脚本,它在资源组的Loadbalancer中创建后端地址池和Loadbalancer规则。这些任务包含在Azure管道中。这是我第一次运行管道。它的创建是正确的。如果我第二次运行管道。它不更新现有版本。它保留以前版本创建的后端地址池和负载平衡器规则,并为此版本添加额外的后端地址池和负载平衡器规则,这导致后端地址池和负载平衡器规则重复。有什么建议吗 resource "azurerm_lb_backend_address_pool" "example" { resourc

我有terraform脚本,它在资源组的Loadbalancer中创建后端地址池和Loadbalancer规则。这些任务包含在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将状态本地存储在名为Terraform.tfstate的文件中。在团队中使用Terraform时,使用本地文件会使Terraform的使用变得复杂,因为每个用户必须确保在运行Terraform之前始终拥有最新的状态数据,并且确保没有其他人同时运行Terraform。 使用远程状态,Terraform将状态数据写入远程数据存储,然后可以在团队的所有成员之间共享。Terraform支持在Terraform云、HashiCorp Consor、Amazon S3、阿里云OSS等中存储状态

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

您将需要配置以保持该状态。以下是使用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存储的本机功能支持状态锁定和一致性检查

这在中有更完整的描述


微软也提供了,这将一步一步地完成安装。

您可以添加一个
terraform destroy--target=azurerm\u lb\u backend\u address\u pool。在执行
terraform应用之前,请在管道上添加一个
示例,这将保证在创建一个terraform应用之前删除它。在创建BaackendPool之前,我需要在main.tf中添加它吗?它必须位于您的根目录中模块,运行terraform apply的模块。它不一定要在main.tf中。它可以在同一目录下的任何.tf文件中,也可以由Terragrunt之类的工具生成。我已经尝试过了…下次它再次创建额外的后端池时,它第一次起作用。如果您在管道中运行教程,您将获得新的存储帐户和后端。您应该使用教程中的脚本创建一次后端,然后在管道中存储一个重用相同值的资源\组\名称、存储\帐户\名称、容器\名称和帐户\密钥。按照教程中的建议,确保使用类似Azure KEY Vault的东西来保护帐户密钥。@Alain O'Dea我已经尝试过tuturiol。。它在每个后端地址池下为我提供额外的虚拟机。我在问题中附上了am图像,以显示我是如何得到的。请检查。