terraform的Azure缩放集存在问题

terraform的Azure缩放集存在问题,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,不知道我做错了什么。我在terraform配置中只有一条NAT规则,并且我没有使用NAT池 错误: azurerm_virtual_machine_scale_set.development-eastus-ss: compute.VirtualMachineScaleSetsClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="InvalidRequestFormat

不知道我做错了什么。我在terraform配置中只有一条NAT规则,并且我没有使用NAT池

错误:

azurerm_virtual_machine_scale_set.development-eastus-ss:     compute.VirtualMachineScaleSetsClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="InvalidRequestFormat" Message="Cannot parse the request." Details=[{"code":"InvalidJsonReferenceWrongType","message":"Reference Id /subscriptions/sub-id/resourceGroups/prod-eastus-rg/providers/Microsoft.Network/loadBalancers/development-eastus-lb/inboundNatRules/development-eastus-lb-nat-http is referencing resource of a wrong type. The Id is expected to reference resources of type loadBalancers/inboundNatPools. Path Properties.UpdateGroups[0].NetworkProfile.networkInterfaceConfigurations[0].properties.ipConfigurations[0].properties.loadBalancerInboundNatPools[0]."}]
NAT规则:

resource "azurerm_lb_nat_rule" "development-eastus-lb-nat-http" {
  name                           = "development-eastus-lb-nat-http"
  resource_group_name            = "${var.resource_group_name}"
  loadbalancer_id                = "${azurerm_lb.development-eastus-lb.id}"
  protocol                       = "Tcp"
  frontend_port                  = 80
  backend_port                   = 8080
  frontend_ip_configuration_name = "development-eastus-lb-frontend"

看起来这是试图将单个nat规则绑定到scaleset的问题。正如错误所表明的,它期望nat池而不是nat池将允许负载平衡器和规模集构建一组规则,其中负载平衡器将每个基础VM的不同端口公开给VM上的同一端口

考虑一下RDP,您希望能够远程访问特定的VM,这将通过为您提供映射到该VM的唯一端口来实现

resource "azurerm_lb_nat_pool" "test" {
  resource_group_name            = "${azurerm_resource_group.test.name}"
  loadbalancer_id                = "${azurerm_lb.test.id}"
  name                           = "SampleApplicationPool"
  protocol                       = "Tcp"
  frontend_port_start            = 80
  frontend_port_end              = 81
  backend_port                   = 8080
  frontend_ip_configuration_name = "PublicIPAddress"
}
但是,如果您希望在内部和外部不同的端口上运行服务,例如HTTP网站,例如本地网络上的8080,然后外部公共网络上的80端口,那么我将查看,因为这特别允许您设置端口,如下所示

resource "azurerm_lb_rule" "test" {
  resource_group_name            = "${azurerm_resource_group.test.name}"
  loadbalancer_id                = "${azurerm_lb.test.id}"
  name                           = "LBRule"
  protocol                       = "Tcp"
  frontend_port                  = 3389
  backend_port                   = 3389
  frontend_ip_configuration_name = "PublicIPAddress"
}
希望这能有所帮助