我有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将状态本地存储在名为terraform.tfstate的文件中。在团队中使用Terraform时,使用本地文件会使Terraform的使用变得复杂,因为每个用户在运行Terraform之前必须确保自己始终拥有最新的状态数据,并确保没有其他人同时运行Terraform。对于远程状态,Terraform将状态数据写入远程数据存储,然后可以在团队的所有成员之间共享。Terraform支持在Terraform Cloud,HashiCorp Consul,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存储的本机功能支持状态锁定和一致性检查。
在azurerm Terraform后端文档中对此进行了更完整的描述。
Microsoft还提供了一个教程:在Azure存储中存储Terraform状态,该过程将逐步进行设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句