Как использовать Terraform для настройки внешнего IP-адреса для машины в Yandex Cloud?

Как присвоить виртуальной машине внешний IP в данном коде Terraform?

data "yandex_compute_image" "last_ubuntu" {
  family = "ubuntu-2204-lts"  # ОС (Ubuntu, 22.04 LTS)
}

resource "yandex_compute_instance" "web" { 
  name = "prod"
	platform_id = "standard-v1" # тип процессора (Intel Broadwell)
  resources {
    core_fraction = 5 # Гарантированная доля vCPU
    cores  = 2 # vCPU
    memory = 1 # RAM
  }

  boot_disk {
    initialize_params {
      image_id = data.yandex_compute_image.last_ubuntu.id
    }
  }

  network_interface {
    subnet_id = yandex_vpc_subnet.test-subnet-a.id
    nat = true
    nat_ip_address = yandex_vpc_address.addr.id
  }

  metadata = {
    user-data = file("nginx.sh")
  }
}

resource "yandex_vpc_network" "test-net" {
  name = "test-network"
}

resource "yandex_vpc_subnet" "test-subnet-a" {
  v4_cidr_blocks = ["10.3.0.0/16"]
  zone           = "ru-central1-a"
  network_id     = "${yandex_vpc_network.test-net.id}"
}

resource "yandex_vpc_address" "addr" {

  external_ipv4_address {
    zone_id = "ru-central1-a"
  }
}

Ошибка: Error: Error while requesting API to create instance: server-request-id = afe30f0d-9efd-400b-b815-eb07acb0c606 server-trace-id = da66a2011c424757:876f1a4d12bf71b5:da66a2011c424757:1 client-request-id = 16aede8e-a4bf-484c-8ea8-7c2ea80903c1 client-trace-id = e80cb92b-c9d6-469d-99c0-e24cc53db91c rpc error: code = InvalidArgument desc = Request validation error: NetworkInterfaceSpecs[0]: PrimaryV4AddressSpec: OneToOneNatSpec: Address: invalid ip address
  • 23 октября 2023 г. 13:28
Ответы на вопрос 2
Ошибка, которая возникает при выполнении данного кода Terraform, связана с неверным форматом IP-адреса, который указан в блоке `external_ipv4_address` для ресурса `yandex_vpc_address`.

Для использования внешнего IP-адреса в Terraform в Yandex Cloud нужно выполнить следующие шаги:

1. Создать ресурс `yandex_vpc_address` для создания внешнего IP-адреса:

```terraform
resource "yandex_vpc_address" "addr" {
  type          = "EXTERNAL"
  name          = "external-ip"
  zone_id       = "ru-central1-a"
}
```

2. Добавить созданный IP-адрес в блок `network_interface` ресурса `yandex_compute_instance`, используя значение `yandex_vpc_address.addr.ip_address`:

```terraform
resource "yandex_compute_instance" "web" {
  # ...

  network_interface {
    subnet_id        = yandex_vpc_subnet.test-subnet-a.id
    nat              = true
    nat_ip_address   = yandex_vpc_address.addr.ip_address
    // ...

  }

  # ...
}
```

3. После этого можно применить изменения с помощью команды `terraform apply`.

Обратите внимание, что код может требовать дополнительных настроек, таких как создание сети и подсети, которые используются в данном примере.
Зарезервировать внешний IP-адрес и использовать его ресурс:

resource "yandex_vpc_address" "addr" {
  name = "<имя_статического_публичного_IP-адреса>"
  deletion_protection = "<защита_от_удаления:_true_или_false>"
  external_ipv4_address {
    zone_id = "<зона_доступности>"
  }
}

Документация по управлению VPC-ресурсами с использованием Terraform:
https://cloud.yandex.ru/docs/vpc/operations/get-st...

Дополнительные примеры и информация доступны в документации провайдера Terraform:
https://terraform-provider.yandexcloud.net/Resource...
Похожие вопросы