Как обновить балансировщик нагрузки Azure с базового до стандартного в Terraform?

На портале Azure я получил предупреждение о том, что мой балансировщик нагрузки «имеет базовый номер SKU, поддержка которого будет прекращена 30 сентября 2025 года. Узнайте больше о стандартном SKU и этапах миграции».

Я безуспешно пытался найти, как обновить мой код Terraform.

Это мой Терраформ:

resource "azurerm_lb" "foo" {
  name = "foo-${var.URL_NAME}"

  frontend_ip_configuration {
    name                 = "PublicIPAddress"
    public_ip_address_id = azurerm_public_ip.foo_lb_ip.id
  }

   location            = var.AZURE_REGION
  resource_group_name = data.azurerm_resource_group.foo.name
}

resource "azurerm_lb_backend_address_pool" "foo" {
  name            = "BackEndAddressPool"
  loadbalancer_id = azurerm_lb.foo.id
}

resource "azurerm_network_interface_backend_address_pool_association" "foo" {
  count                   = var.NUMBER_OF_VMS
  backend_address_pool_id = azurerm_lb_backend_address_pool.foo.id
  ip_configuration_name   = "internal"
  network_interface_id    = azurerm_network_interface.foo[count.index].id
}

resource "azurerm_lb_probe" "foo" {
  name            = "foo-${var.URL_NAME}"
  protocol        = "Tcp"
  port            = 9999
  loadbalancer_id = azurerm_lb.foo.id
}

resource "azurerm_lb_rule" "foo" {
  name                           = "foo-${var.URL_NAME}"
  protocol                       = "Tcp"
  frontend_port                  = 9999
  backend_port                   = 9999
  frontend_ip_configuration_name = azurerm_lb.foo.frontend_ip_configuration[0].name
  loadbalancer_id                = azurerm_lb.foo.id
  backend_address_pool_ids       = [azurerm_lb_backend_address_pool.foo.id]
}

resource "azurerm_public_ip" "foo_lb_ip" {
  name                = "foo-lb-ip"
  allocation_method   = "Dynamic"
  location            = var.AZURE_REGION
  resource_group_name = data.azurerm_resource_group.foo.name
}

Вы пытались добавить этот аргумент sku = «Стандарт» в свой блок ресурсов azurerm_lb? также посмотрите эту ссылку Learn.microsoft.com/en-us/azure/load-balancer/…

Derek Roberts 21.08.2024 22:23

Похоже, мне пришлось добавить sku = «Standard» как в azurerm_public_ip, так и в azurerm_lb. Мне также пришлось изменить location_method с «Динамического» на «Статический» в azurerm_public_ip.

Marcin Kulik 23.08.2024 20:18

Кажется, я снова что-то упустил. Вздохи! ох блин!!!!!

Derek Roberts 23.08.2024 21:23
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
3
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как обновить балансировщик нагрузки Azure с базового до стандартного в Terraform?

Чтобы обновить Azure's Load Balancer с «Базового» до «Стандартного», вам необходимо изменить LB SKU на «Стандартный» и убедиться, что SKU общедоступного IP-адреса также имеет значение «Стандартный». Только тогда Load Balancer обновится до Standard..

Примечание. Если вы не можете позволить себе простой ресурса, вы можете использовать create_before_destroy = true. Эта функция сначала создаст новый ресурс и обеспечит его полную работоспособность, прежде чем уничтожать старый ресурс. Это имеет решающее значение для минимизации времени простоя между ресурсами. Однако при использовании этой функции обязательно используйте новое имя ресурса.

lifecycle {
    create_before_destroy = true
  }

Вот код Terraform для обновления Azure Load balancer SKU до Standard

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = "network-RG2"
  location = "West Europe"
 
}

resource "azurerm_virtual_network" "example" {
  name                = "sample-network1"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_subnet" "example" {
  name                 = "internal1"
  resource_group_name  = azurerm_resource_group.example.name
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefixes     = ["10.0.2.0/24"]
}

resource "azurerm_public_ip" "example" {
  name                = "venkat-pip1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  allocation_method   = "Static"
  sku                 = "Standard"
}

resource "azurerm_lb" "example" {
  name                = "venkat-lb1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  sku                 = "Standard"

  frontend_ip_configuration {
    name                 = "primary"
    public_ip_address_id = azurerm_public_ip.example.id
  }
depends_on = [ azurerm_public_ip.example ]
}

resource "azurerm_lb_backend_address_pool" "example" {
  loadbalancer_id = azurerm_lb.example.id
  name            = "acctestpool1"
}

resource "azurerm_network_interface" "example" {
  name                = "venkat-nic1"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name

  ip_configuration {
    name                          = "venkattestconfig1"
    subnet_id                     = azurerm_subnet.example.id
    private_ip_address_allocation = "Dynamic"
  }

}
resource "azurerm_network_interface_backend_address_pool_association" "example" {
  network_interface_id    = azurerm_network_interface.example.id
  ip_configuration_name   = "venkattestconfig1"
  backend_address_pool_id = azurerm_lb_backend_address_pool.example.id
}

Терраформирование применяется:

После выполнения скрипта terraform значок Azure Load balancer SKU был изменен на стандартный.

Альтернативно вы также можете использовать PowerShell code в terraform, используя нулевой блок ресурсов для обновления load balancer sku до Standard. ниже приведен код терраформирования с null resource

resource "null_resource" "powershell" {
  triggers = {
    }

provisioner "local-exec" {
        command = <<-EOT
        Start-AzBasicLoadBalancerUpgrade -ResourceGroupName <loadBalancerRGName> -BasicLoadBalancerName <basicLBName> -validateScenarioOnly
        EOT
      }
}

Спасибо, это работает. Похоже, мне пришлось добавить sku = «Standard» как в azurerm_public_ip, так и в azurerm_lb. Мне также пришлось изменить location_method с «Динамического» на «Статический» в azurerm_public_ip.

Marcin Kulik 23.08.2024 20:18

Вам необходимо добавить в файл terraform следующее:

Я использовал эту документацию, есть ссылка: docs

resource "azurerm_lb" "foo" {
  name = "foo-${var.URL_NAME}"
  sku = "Standard" 
  frontend_ip_configuration {
    name                 = "PublicIPAddress"
    public_ip_address_id = azurerm_public_ip.foo_lb_ip.id]
    sku = "Standard" 
  }

   location            = var.AZURE_REGION
  resource_group_name = data.azurerm_resource_group.foo.name
}

Другие вопросы по теме

Похожие вопросы